ecere/com: (#1010) Fixed bad reference level of uintptr data types; Added missing...
[sdk] / compiler / bootstrap / libec / bootstrap / output.c
1 /* Code generated from eC source file: output.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 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
34
35 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
36
37 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
38
39 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
40
41 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
42
43 struct __ecereNameSpace__ecere__sys__BTNode;
44
45 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
46
47 struct __ecereNameSpace__ecere__sys__BinaryTree
48 {
49 struct __ecereNameSpace__ecere__sys__BTNode * root;
50 int count;
51 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
52 void (*  FreeKey)(void *  key);
53 } __attribute__ ((gcc_struct));
54
55 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
56
57 struct __ecereNameSpace__ecere__sys__OldList
58 {
59 void *  first;
60 void *  last;
61 int count;
62 unsigned int offset;
63 unsigned int circ;
64 } __attribute__ ((gcc_struct));
65
66 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
67
68 struct __ecereNameSpace__ecere__com__Method
69 {
70 char *  name;
71 struct __ecereNameSpace__ecere__com__Method * parent;
72 struct __ecereNameSpace__ecere__com__Method * left;
73 struct __ecereNameSpace__ecere__com__Method * right;
74 int depth;
75 int (*  function)();
76 int vid;
77 int type;
78 struct __ecereNameSpace__ecere__com__Class * _class;
79 void *  symbol;
80 char *  dataTypeString;
81 struct Type * dataType;
82 int memberAccess;
83 } __attribute__ ((gcc_struct));
84
85 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
86
87 struct __ecereNameSpace__ecere__com__Property
88 {
89 struct __ecereNameSpace__ecere__com__Property * prev;
90 struct __ecereNameSpace__ecere__com__Property * next;
91 char *  name;
92 unsigned int isProperty;
93 int memberAccess;
94 int id;
95 struct __ecereNameSpace__ecere__com__Class * _class;
96 char *  dataTypeString;
97 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
98 struct Type * dataType;
99 void (*  Set)(void * , int);
100 int (*  Get)(void * );
101 unsigned int (*  IsSet)(void * );
102 void *  data;
103 void *  symbol;
104 int vid;
105 unsigned int conversion;
106 unsigned int watcherOffset;
107 char *  category;
108 unsigned int compiled;
109 unsigned int selfWatchable;
110 unsigned int isWatchable;
111 } __attribute__ ((gcc_struct));
112
113 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
114
115 struct CodePosition
116 {
117 int line;
118 int charPos;
119 int pos;
120 int included;
121 } __attribute__ ((gcc_struct));
122
123 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
124
125 struct Location
126 {
127 struct CodePosition start;
128 struct CodePosition end;
129 } __attribute__ ((gcc_struct));
130
131 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
132
133 struct Attrib
134 {
135 struct Location loc;
136 int type;
137 struct __ecereNameSpace__ecere__sys__OldList *  attribs;
138 } __attribute__ ((gcc_struct));
139
140 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
141
142 struct ExtDecl
143 {
144 struct Location loc;
145 int type;
146 union
147 {
148 char * s;
149 struct Attrib * attr;
150 } __attribute__ ((gcc_struct));
151 } __attribute__ ((gcc_struct));
152
153 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
154
155 struct ClassDefinition
156 {
157 struct ClassDefinition * prev;
158 struct ClassDefinition * next;
159 struct Location loc;
160 struct Specifier * _class;
161 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
162 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
163 struct Symbol * symbol;
164 struct Location blockStart;
165 struct Location nameLoc;
166 int endid;
167 int declMode;
168 unsigned int deleteWatchable;
169 } __attribute__ ((gcc_struct));
170
171 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
172
173 struct Context;
174
175 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
176
177 struct Instantiation
178 {
179 struct Instantiation * prev;
180 struct Instantiation * next;
181 struct Location loc;
182 struct Specifier * _class;
183 struct Expression * exp;
184 struct __ecereNameSpace__ecere__sys__OldList *  members;
185 struct Symbol * symbol;
186 unsigned int fullSet;
187 unsigned int isConstant;
188 unsigned char *  data;
189 struct Location nameLoc;
190 struct Location insideLoc;
191 unsigned int built;
192 } __attribute__ ((gcc_struct));
193
194 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
195
196 struct Declaration
197 {
198 struct Declaration * prev;
199 struct Declaration * next;
200 struct Location loc;
201 int type;
202 union
203 {
204 struct
205 {
206 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
207 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
208 } __attribute__ ((gcc_struct));
209 struct Instantiation * inst;
210 struct
211 {
212 struct Identifier * id;
213 struct Expression * exp;
214 } __attribute__ ((gcc_struct));
215 } __attribute__ ((gcc_struct));
216 struct Specifier * extStorage;
217 struct Symbol * symbol;
218 int declMode;
219 } __attribute__ ((gcc_struct));
220
221 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
222
223 struct Statement
224 {
225 struct Statement * prev;
226 struct Statement * next;
227 struct Location loc;
228 int type;
229 union
230 {
231 struct __ecereNameSpace__ecere__sys__OldList *  expressions;
232 struct
233 {
234 struct Identifier * id;
235 struct Statement * stmt;
236 } __attribute__ ((gcc_struct)) labeled;
237 struct
238 {
239 struct Expression * exp;
240 struct Statement * stmt;
241 } __attribute__ ((gcc_struct)) caseStmt;
242 struct
243 {
244 struct __ecereNameSpace__ecere__sys__OldList * declarations;
245 struct __ecereNameSpace__ecere__sys__OldList * statements;
246 struct Context * context;
247 unsigned int isSwitch;
248 } __attribute__ ((gcc_struct)) compound;
249 struct
250 {
251 struct __ecereNameSpace__ecere__sys__OldList * exp;
252 struct Statement * stmt;
253 struct Statement * elseStmt;
254 } __attribute__ ((gcc_struct)) ifStmt;
255 struct
256 {
257 struct __ecereNameSpace__ecere__sys__OldList * exp;
258 struct Statement * stmt;
259 } __attribute__ ((gcc_struct)) switchStmt;
260 struct
261 {
262 struct __ecereNameSpace__ecere__sys__OldList * exp;
263 struct Statement * stmt;
264 } __attribute__ ((gcc_struct)) whileStmt;
265 struct
266 {
267 struct __ecereNameSpace__ecere__sys__OldList * exp;
268 struct Statement * stmt;
269 } __attribute__ ((gcc_struct)) doWhile;
270 struct
271 {
272 struct Statement * init;
273 struct Statement * check;
274 struct __ecereNameSpace__ecere__sys__OldList * increment;
275 struct Statement * stmt;
276 } __attribute__ ((gcc_struct)) forStmt;
277 struct
278 {
279 struct Identifier * id;
280 } __attribute__ ((gcc_struct)) gotoStmt;
281 struct
282 {
283 struct Specifier * spec;
284 char * statements;
285 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
286 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
287 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
288 } __attribute__ ((gcc_struct)) asmStmt;
289 struct
290 {
291 struct Expression * watcher;
292 struct Expression * object;
293 struct __ecereNameSpace__ecere__sys__OldList * watches;
294 } __attribute__ ((gcc_struct)) _watch;
295 struct
296 {
297 struct Identifier * id;
298 struct __ecereNameSpace__ecere__sys__OldList * exp;
299 struct __ecereNameSpace__ecere__sys__OldList * filter;
300 struct Statement * stmt;
301 } __attribute__ ((gcc_struct)) forEachStmt;
302 struct Declaration * decl;
303 } __attribute__ ((gcc_struct));
304 } __attribute__ ((gcc_struct));
305
306 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
307
308 struct TypeName
309 {
310 struct TypeName * prev;
311 struct TypeName * next;
312 struct Location loc;
313 struct __ecereNameSpace__ecere__sys__OldList *  qualifiers;
314 struct Declarator * declarator;
315 int classObjectType;
316 struct Expression * bitCount;
317 } __attribute__ ((gcc_struct));
318
319 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
320
321 struct Initializer
322 {
323 struct Initializer * prev;
324 struct Initializer * next;
325 struct Location loc;
326 int type;
327 union
328 {
329 struct Expression * exp;
330 struct __ecereNameSpace__ecere__sys__OldList *  list;
331 } __attribute__ ((gcc_struct));
332 unsigned int isConstant;
333 } __attribute__ ((gcc_struct));
334
335 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
336
337 struct __ecereNameSpace__ecere__com__DataValue
338 {
339 union
340 {
341 char c;
342 unsigned char uc;
343 short s;
344 unsigned short us;
345 int i;
346 unsigned int ui;
347 void *  p;
348 float f;
349 double d;
350 long long i64;
351 uint64 ui64;
352 } __attribute__ ((gcc_struct));
353 } __attribute__ ((gcc_struct));
354
355 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
356
357 struct Expression
358 {
359 struct Expression * prev;
360 struct Expression * next;
361 struct Location loc;
362 int type;
363 union
364 {
365 struct
366 {
367 char *  constant;
368 struct Identifier * identifier;
369 } __attribute__ ((gcc_struct));
370 struct Statement * compound;
371 struct Instantiation * instance;
372 char *  string;
373 struct __ecereNameSpace__ecere__sys__OldList *  list;
374 struct
375 {
376 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
377 struct Declarator * decl;
378 } __attribute__ ((gcc_struct)) _classExp;
379 struct
380 {
381 struct Identifier * id;
382 } __attribute__ ((gcc_struct)) classData;
383 struct
384 {
385 struct Expression * exp;
386 struct __ecereNameSpace__ecere__sys__OldList * arguments;
387 struct Location argLoc;
388 } __attribute__ ((gcc_struct)) call;
389 struct
390 {
391 struct Expression * exp;
392 struct __ecereNameSpace__ecere__sys__OldList * index;
393 } __attribute__ ((gcc_struct)) index;
394 struct
395 {
396 struct Expression * exp;
397 struct Identifier * member;
398 int memberType;
399 unsigned int thisPtr;
400 } __attribute__ ((gcc_struct)) member;
401 struct
402 {
403 int op;
404 struct Expression * exp1;
405 struct Expression * exp2;
406 } __attribute__ ((gcc_struct)) op;
407 struct TypeName * typeName;
408 struct Specifier * _class;
409 struct
410 {
411 struct TypeName * typeName;
412 struct Expression * exp;
413 } __attribute__ ((gcc_struct)) cast;
414 struct
415 {
416 struct Expression * cond;
417 struct __ecereNameSpace__ecere__sys__OldList * exp;
418 struct Expression * elseExp;
419 } __attribute__ ((gcc_struct)) cond;
420 struct
421 {
422 struct TypeName * typeName;
423 struct Expression * size;
424 } __attribute__ ((gcc_struct)) _new;
425 struct
426 {
427 struct TypeName * typeName;
428 struct Expression * size;
429 struct Expression * exp;
430 } __attribute__ ((gcc_struct)) _renew;
431 struct
432 {
433 char * table;
434 struct Identifier * id;
435 } __attribute__ ((gcc_struct)) db;
436 struct
437 {
438 struct Expression * ds;
439 struct Expression * name;
440 } __attribute__ ((gcc_struct)) dbopen;
441 struct
442 {
443 struct TypeName * typeName;
444 struct Initializer * initializer;
445 } __attribute__ ((gcc_struct)) initializer;
446 struct
447 {
448 struct Expression * exp;
449 struct TypeName * typeName;
450 } __attribute__ ((gcc_struct)) vaArg;
451 } __attribute__ ((gcc_struct));
452 unsigned int debugValue;
453 struct __ecereNameSpace__ecere__com__DataValue val;
454 uint64 address;
455 unsigned int hasAddress;
456 struct Type * expType;
457 struct Type * destType;
458 unsigned int usage;
459 int tempCount;
460 unsigned int byReference;
461 unsigned int isConstant;
462 unsigned int addedThis;
463 unsigned int needCast;
464 unsigned int thisPtr;
465 } __attribute__ ((gcc_struct));
466
467 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
468
469 struct TemplateDatatype
470 {
471 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
472 struct Declarator * decl;
473 } __attribute__ ((gcc_struct));
474
475 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
476
477 struct TemplateArgument;
478
479 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
480
481 struct TemplateParameter
482 {
483 struct TemplateParameter * prev;
484 struct TemplateParameter * next;
485 struct Location loc;
486 int type;
487 struct Identifier * identifier;
488 union
489 {
490 struct TemplateDatatype * dataType;
491 int memberType;
492 } __attribute__ ((gcc_struct));
493 struct TemplateArgument * defaultArgument;
494 char *  dataTypeString;
495 struct Type * baseType;
496 } __attribute__ ((gcc_struct));
497
498 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
499
500 struct Specifier
501 {
502 struct Specifier * prev;
503 struct Specifier * next;
504 struct Location loc;
505 int type;
506 union
507 {
508 int specifier;
509 struct
510 {
511 struct ExtDecl * extDecl;
512 char *  name;
513 struct Symbol * symbol;
514 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
515 } __attribute__ ((gcc_struct));
516 struct
517 {
518 struct Identifier * id;
519 struct __ecereNameSpace__ecere__sys__OldList *  list;
520 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
521 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
522 unsigned int addNameSpace;
523 struct Context * ctx;
524 struct ExtDecl * extDeclStruct;
525 } __attribute__ ((gcc_struct));
526 struct Expression * expression;
527 struct Specifier * _class;
528 struct TemplateParameter * templateParameter;
529 } __attribute__ ((gcc_struct));
530 } __attribute__ ((gcc_struct));
531
532 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
533
534 struct Identifier
535 {
536 struct Identifier * prev;
537 struct Identifier * next;
538 struct Location loc;
539 struct Symbol * classSym;
540 struct Specifier * _class;
541 char *  string;
542 struct Identifier * badID;
543 } __attribute__ ((gcc_struct));
544
545 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
546
547 struct Pointer
548 {
549 struct Pointer * prev;
550 struct Pointer * next;
551 struct Location loc;
552 struct __ecereNameSpace__ecere__sys__OldList *  qualifiers;
553 struct Pointer * pointer;
554 } __attribute__ ((gcc_struct));
555
556 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
557
558 struct Declarator
559 {
560 struct Declarator * prev;
561 struct Declarator * next;
562 struct Location loc;
563 int type;
564 struct Symbol * symbol;
565 struct Declarator * declarator;
566 union
567 {
568 struct Identifier * identifier;
569 struct
570 {
571 struct Expression * exp;
572 struct Expression * posExp;
573 struct Attrib * attrib;
574 } __attribute__ ((gcc_struct)) structDecl;
575 struct
576 {
577 struct Expression * exp;
578 struct Specifier * enumClass;
579 } __attribute__ ((gcc_struct)) array;
580 struct
581 {
582 struct __ecereNameSpace__ecere__sys__OldList * parameters;
583 } __attribute__ ((gcc_struct)) function;
584 struct
585 {
586 struct Pointer * pointer;
587 } __attribute__ ((gcc_struct)) pointer;
588 struct
589 {
590 struct ExtDecl * extended;
591 } __attribute__ ((gcc_struct)) extended;
592 } __attribute__ ((gcc_struct));
593 } __attribute__ ((gcc_struct));
594
595 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
596
597 struct FunctionDefinition
598 {
599 struct FunctionDefinition * prev;
600 struct FunctionDefinition * next;
601 struct Location loc;
602 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
603 struct Declarator * declarator;
604 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
605 struct Statement * body;
606 struct __ecereNameSpace__ecere__com__Class * _class;
607 struct __ecereNameSpace__ecere__sys__OldList attached;
608 int declMode;
609 struct Type * type;
610 struct Symbol * propSet;
611 int tempCount;
612 unsigned int propertyNoThis;
613 } __attribute__ ((gcc_struct));
614
615 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
616
617 struct DBTableDef;
618
619 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
620
621 struct External
622 {
623 struct External * prev;
624 struct External * next;
625 struct Location loc;
626 int type;
627 struct Symbol * symbol;
628 union
629 {
630 struct FunctionDefinition * function;
631 struct ClassDefinition * _class;
632 struct Declaration * declaration;
633 char *  importString;
634 struct Identifier * id;
635 struct DBTableDef * table;
636 } __attribute__ ((gcc_struct));
637 int importType;
638 } __attribute__ ((gcc_struct));
639
640 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
641
642 struct ModuleImport;
643
644 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
645
646 struct ClassImport;
647
648 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
649
650 struct Symbol
651 {
652 char *  string;
653 struct Symbol * parent;
654 struct Symbol * left;
655 struct Symbol * right;
656 int depth;
657 struct Type * type;
658 union
659 {
660 struct __ecereNameSpace__ecere__com__Method * method;
661 struct __ecereNameSpace__ecere__com__Property * _property;
662 struct __ecereNameSpace__ecere__com__Class * registered;
663 } __attribute__ ((gcc_struct));
664 int id;
665 int idCode;
666 union
667 {
668 struct
669 {
670 struct External * pointerExternal;
671 struct External * structExternal;
672 } __attribute__ ((gcc_struct));
673 struct
674 {
675 struct External * externalGet;
676 struct External * externalSet;
677 struct External * externalPtr;
678 struct External * externalIsSet;
679 } __attribute__ ((gcc_struct));
680 struct
681 {
682 struct External * methodExternal;
683 struct External * methodCodeExternal;
684 } __attribute__ ((gcc_struct));
685 } __attribute__ ((gcc_struct));
686 unsigned int imported;
687 unsigned int declaredStructSym;
688 struct __ecereNameSpace__ecere__com__Class * _class;
689 unsigned int declaredStruct;
690 unsigned int needConstructor;
691 unsigned int needDestructor;
692 char *  constructorName;
693 char *  structName;
694 char *  className;
695 char *  destructorName;
696 struct ModuleImport * module;
697 struct ClassImport * _import;
698 struct Location nameLoc;
699 unsigned int isParam;
700 unsigned int isRemote;
701 unsigned int isStruct;
702 unsigned int fireWatchersDone;
703 int declaring;
704 unsigned int classData;
705 unsigned int isStatic;
706 char *  shortName;
707 struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
708 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
709 struct Context * ctx;
710 int isIterator;
711 struct Expression * propCategory;
712 } __attribute__ ((gcc_struct));
713
714 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
715
716 struct Type
717 {
718 struct Type * prev;
719 struct Type * next;
720 int refCount;
721 union
722 {
723 struct Symbol * _class;
724 struct
725 {
726 struct __ecereNameSpace__ecere__sys__OldList members;
727 char *  enumName;
728 } __attribute__ ((gcc_struct));
729 struct
730 {
731 struct Type * returnType;
732 struct __ecereNameSpace__ecere__sys__OldList params;
733 struct Symbol * thisClass;
734 unsigned int staticMethod;
735 struct TemplateParameter * thisClassTemplate;
736 } __attribute__ ((gcc_struct));
737 struct
738 {
739 struct __ecereNameSpace__ecere__com__Method * method;
740 struct __ecereNameSpace__ecere__com__Class * methodClass;
741 struct __ecereNameSpace__ecere__com__Class * usedClass;
742 } __attribute__ ((gcc_struct));
743 struct
744 {
745 struct Type * arrayType;
746 int arraySize;
747 struct Expression * arraySizeExp;
748 unsigned int freeExp;
749 struct Symbol * enumClass;
750 } __attribute__ ((gcc_struct));
751 struct Type * type;
752 struct TemplateParameter * templateParameter;
753 } __attribute__ ((gcc_struct));
754 int kind;
755 unsigned int size;
756 char *  name;
757 char *  typeName;
758 int classObjectType;
759 int alignment;
760 unsigned int offset;
761 int bitFieldCount;
762 int count;
763 unsigned int isSigned : 1;
764 unsigned int constant : 1;
765 unsigned int truth : 1;
766 unsigned int byReference : 1;
767 unsigned int extraParam : 1;
768 unsigned int directClassAccess : 1;
769 unsigned int computing : 1;
770 unsigned int keepCast : 1;
771 unsigned int passAsTemplate : 1;
772 unsigned int dllExport : 1;
773 unsigned int attrStdcall : 1;
774 unsigned int declaredWithStruct : 1;
775 } __attribute__ ((gcc_struct));
776
777 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
778
779 struct __ecereNameSpace__ecere__com__Class
780 {
781 struct __ecereNameSpace__ecere__com__Class * prev;
782 struct __ecereNameSpace__ecere__com__Class * next;
783 char *  name;
784 int offset;
785 int structSize;
786 int (* *  _vTbl)();
787 int vTblSize;
788 int (*  Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
789 void (*  Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
790 int offsetClass;
791 int sizeClass;
792 struct __ecereNameSpace__ecere__com__Class * base;
793 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
794 struct __ecereNameSpace__ecere__sys__BinaryTree members;
795 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
796 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
797 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
798 struct __ecereNameSpace__ecere__sys__OldList derivatives;
799 int memberID;
800 int startMemberID;
801 int type;
802 struct __ecereNameSpace__ecere__com__Instance * module;
803 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
804 char *  dataTypeString;
805 struct Type * dataType;
806 int typeSize;
807 int defaultAlignment;
808 void (*  Initialize)();
809 int memberOffset;
810 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
811 char *  designerClass;
812 unsigned int noExpansion;
813 char *  defaultProperty;
814 unsigned int comRedefinition;
815 int count;
816 unsigned int isRemote;
817 unsigned int internalDecl;
818 void *  data;
819 unsigned int computeSize;
820 int structAlignment;
821 int destructionWatchOffset;
822 unsigned int fixed;
823 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
824 int inheritanceAccess;
825 char *  fullName;
826 void *  symbol;
827 struct __ecereNameSpace__ecere__sys__OldList conversions;
828 struct __ecereNameSpace__ecere__sys__OldList templateParams;
829 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
830 struct __ecereNameSpace__ecere__com__Class * templateClass;
831 struct __ecereNameSpace__ecere__sys__OldList templatized;
832 int numParams;
833 unsigned int isInstanceClass;
834 unsigned int byValueSystemClass;
835 } __attribute__ ((gcc_struct));
836
837 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
838
839 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
840
841 struct __ecereNameSpace__ecere__com__Instance
842 {
843 int (* *  _vTbl)();
844 struct __ecereNameSpace__ecere__com__Class * _class;
845 int _refCount;
846 } __attribute__ ((gcc_struct));
847
848 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
849
850 struct __ecereNameSpace__ecere__com__DataMember
851 {
852 struct __ecereNameSpace__ecere__com__DataMember * prev;
853 struct __ecereNameSpace__ecere__com__DataMember * next;
854 char *  name;
855 unsigned int isProperty;
856 int memberAccess;
857 int id;
858 struct __ecereNameSpace__ecere__com__Class * _class;
859 char *  dataTypeString;
860 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
861 struct Type * dataType;
862 int type;
863 int offset;
864 int memberID;
865 struct __ecereNameSpace__ecere__sys__OldList members;
866 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
867 int memberOffset;
868 int structAlignment;
869 } __attribute__ ((gcc_struct));
870
871 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
872
873 struct __ecereNameSpace__ecere__com__SerialBuffer
874 {
875 unsigned char *  _buffer;
876 unsigned int count;
877 unsigned int _size;
878 unsigned int pos;
879 } __attribute__ ((gcc_struct));
880
881 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
882
883 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
884 {
885 union
886 {
887 struct
888 {
889 char *  dataTypeString;
890 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
891 } __attribute__ ((gcc_struct));
892 struct __ecereNameSpace__ecere__com__DataValue expression;
893 struct
894 {
895 char *  memberString;
896 union
897 {
898 struct __ecereNameSpace__ecere__com__DataMember * member;
899 struct __ecereNameSpace__ecere__com__Property * prop;
900 struct __ecereNameSpace__ecere__com__Method * method;
901 } __attribute__ ((gcc_struct));
902 } __attribute__ ((gcc_struct));
903 } __attribute__ ((gcc_struct));
904 } __attribute__ ((gcc_struct));
905
906 enum yytokentype
907 {
908 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
909 };
910
911 typedef union YYSTYPE
912 {
913 int specifierType;
914 int i;
915 int declMode;
916 struct Identifier * id;
917 struct Expression * exp;
918 struct Specifier * specifier;
919 struct __ecereNameSpace__ecere__sys__OldList * list;
920 struct Enumerator * enumerator;
921 struct Declarator * declarator;
922 struct Pointer * pointer;
923 struct Initializer * initializer;
924 struct InitDeclarator * initDeclarator;
925 struct TypeName * typeName;
926 struct Declaration * declaration;
927 struct Statement * stmt;
928 struct FunctionDefinition * function;
929 struct External * external;
930 struct Context * context;
931 struct AsmField * asmField;
932 struct Attrib * attrib;
933 struct ExtDecl * extDecl;
934 struct Attribute * attribute;
935 struct Instantiation * instance;
936 struct MembersInit * membersInit;
937 struct MemberInit * memberInit;
938 struct ClassFunction * classFunction;
939 struct ClassDefinition * _class;
940 struct ClassDef * classDef;
941 struct PropertyDef * prop;
942 char * string;
943 struct Symbol * symbol;
944 struct PropertyWatch * propertyWatch;
945 struct TemplateParameter * templateParameter;
946 struct TemplateArgument * templateArgument;
947 struct TemplateDatatype * templateDatatype;
948 struct DBTableEntry * dbtableEntry;
949 struct DBIndexItem * dbindexItem;
950 struct DBTableDef * dbtableDef;
951 } __attribute__ ((gcc_struct)) YYSTYPE;
952
953 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
954
955 struct Enumerator
956 {
957 struct Enumerator * prev;
958 struct Enumerator * next;
959 struct Location loc;
960 struct Identifier * id;
961 struct Expression * exp;
962 } __attribute__ ((gcc_struct));
963
964 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
965
966 struct InitDeclarator
967 {
968 struct InitDeclarator * prev;
969 struct InitDeclarator * next;
970 struct Location loc;
971 struct Declarator * declarator;
972 struct Initializer * initializer;
973 } __attribute__ ((gcc_struct));
974
975 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
976
977 struct AsmField
978 {
979 struct AsmField * prev;
980 struct AsmField * next;
981 struct Location loc;
982 char *  command;
983 struct Expression * expression;
984 } __attribute__ ((gcc_struct));
985
986 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
987
988 struct Attribute
989 {
990 struct Attribute * prev;
991 struct Attribute * next;
992 struct Location loc;
993 char * attr;
994 struct Expression * exp;
995 } __attribute__ ((gcc_struct));
996
997 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
998
999 struct ClassFunction
1000 {
1001 struct ClassFunction * prev;
1002 struct ClassFunction * next;
1003 struct Location loc;
1004 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1005 struct Declarator * declarator;
1006 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1007 struct Statement * body;
1008 struct __ecereNameSpace__ecere__com__Class * _class;
1009 struct __ecereNameSpace__ecere__sys__OldList attached;
1010 int declMode;
1011 struct Type * type;
1012 struct Symbol * propSet;
1013 unsigned int isVirtual;
1014 unsigned int isConstructor;
1015 unsigned int isDestructor;
1016 unsigned int dontMangle;
1017 int id;
1018 int idCode;
1019 } __attribute__ ((gcc_struct));
1020
1021 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
1022
1023 struct MembersInit
1024 {
1025 struct MembersInit * prev;
1026 struct MembersInit * next;
1027 struct Location loc;
1028 int type;
1029 union
1030 {
1031 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
1032 struct ClassFunction * function;
1033 } __attribute__ ((gcc_struct));
1034 } __attribute__ ((gcc_struct));
1035
1036 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
1037
1038 struct MemberInit
1039 {
1040 struct MemberInit * prev;
1041 struct MemberInit * next;
1042 struct Location loc;
1043 struct Location realLoc;
1044 struct __ecereNameSpace__ecere__sys__OldList *  identifiers;
1045 struct Initializer * initializer;
1046 unsigned int used;
1047 unsigned int variable;
1048 unsigned int takeOutExp;
1049 } __attribute__ ((gcc_struct));
1050
1051 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
1052
1053 struct PropertyDef;
1054
1055 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
1056
1057 struct PropertyWatch;
1058
1059 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
1060
1061 struct ClassDef
1062 {
1063 struct ClassDef * prev;
1064 struct ClassDef * next;
1065 struct Location loc;
1066 int type;
1067 union
1068 {
1069 struct Declaration * decl;
1070 struct ClassFunction * function;
1071 struct __ecereNameSpace__ecere__sys__OldList *  defProperties;
1072 struct PropertyDef * propertyDef;
1073 struct PropertyWatch * propertyWatch;
1074 char *  designer;
1075 struct Identifier * defaultProperty;
1076 struct
1077 {
1078 struct Identifier * id;
1079 struct Initializer * initializer;
1080 } __attribute__ ((gcc_struct));
1081 } __attribute__ ((gcc_struct));
1082 int memberAccess;
1083 void *  object;
1084 } __attribute__ ((gcc_struct));
1085
1086 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1087
1088 struct DBTableEntry;
1089
1090 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1091
1092 struct DBIndexItem;
1093
1094 extern YYSTYPE yylval;
1095
1096 extern struct Location yylloc;
1097
1098 int outputLine;
1099
1100 unsigned int memoryGuard = 0x0;
1101
1102 void SetMemoryGuard(unsigned int b)
1103 {
1104 memoryGuard = b;
1105 }
1106
1107 unsigned int GetMemoryGuard()
1108 {
1109 return memoryGuard;
1110 }
1111
1112 extern int strcmp(const char * , const char * );
1113
1114 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts;
1115
1116 static void OutputIdentifier(struct Identifier * id, struct __ecereNameSpace__ecere__com__Instance * f)
1117 {
1118 if(id)
1119 {
1120 if(id->_class)
1121 {
1122 if(id->_class->type == 8)
1123 {
1124 if(id->_class->templateParameter && id->_class->templateParameter->identifier && id->_class->templateParameter->identifier->string)
1125 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, id->_class->templateParameter->identifier->string);
1126 }
1127 else
1128 {
1129 if(id->_class->name)
1130 {
1131 if(!strcmp(id->_class->name, "class"))
1132 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
1133 else
1134 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, id->_class->name);
1135 }
1136 }
1137 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "::");
1138 }
1139 }
1140 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, (id && id->string) ? id->string : "(null identifier)");
1141 }
1142
1143 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Putc;
1144
1145 static void OutputOperator(int op, struct __ecereNameSpace__ecere__com__Instance * f)
1146 {
1147 switch(op)
1148 {
1149 case INC_OP:
1150 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "++");
1151 break;
1152 case DEC_OP:
1153 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "--");
1154 break;
1155 case SIZEOF:
1156 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "sizeof ");
1157 break;
1158 case LEFT_OP:
1159 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<<");
1160 break;
1161 case RIGHT_OP:
1162 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">>");
1163 break;
1164 case LE_OP:
1165 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<=");
1166 break;
1167 case GE_OP:
1168 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">=");
1169 break;
1170 case EQ_OP:
1171 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "==");
1172 break;
1173 case NE_OP:
1174 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "!=");
1175 break;
1176 case AND_OP:
1177 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "&&");
1178 break;
1179 case OR_OP:
1180 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "||");
1181 break;
1182 case MUL_ASSIGN:
1183 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "*=");
1184 break;
1185 case DIV_ASSIGN:
1186 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "/=");
1187 break;
1188 case MOD_ASSIGN:
1189 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "%=");
1190 break;
1191 case ADD_ASSIGN:
1192 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "+=");
1193 break;
1194 case SUB_ASSIGN:
1195 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "-=");
1196 break;
1197 case LEFT_ASSIGN:
1198 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<<=");
1199 break;
1200 case RIGHT_ASSIGN:
1201 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">>=");
1202 break;
1203 case AND_ASSIGN:
1204 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "&=");
1205 break;
1206 case XOR_ASSIGN:
1207 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "^=");
1208 break;
1209 case OR_ASSIGN:
1210 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "|=");
1211 break;
1212 case '&':
1213 case '*':
1214 case '+':
1215 case '-':
1216 case '~':
1217 case '!':
1218 case '/':
1219 case '%':
1220 case '<':
1221 case '>':
1222 case '|':
1223 case '^':
1224 case '=':
1225 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, char ch))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Putc])(f, (char)op);
1226 break;
1227 case DELETE:
1228 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "delete ");
1229 break;
1230 }
1231 }
1232
1233 static void OutputSpecifier(struct Specifier * spec, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName);
1234
1235 static void OutputDeclarator(struct Declarator * decl, struct __ecereNameSpace__ecere__com__Instance * f);
1236
1237 void OutputTypeName(struct TypeName * type, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName)
1238 {
1239 if(type->qualifiers)
1240 {
1241 struct Specifier * spec;
1242
1243 for(spec = (*type->qualifiers).first; spec; spec = spec->next)
1244 {
1245 OutputSpecifier(spec, f, typeName);
1246 if(spec->next)
1247 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1248 }
1249 }
1250 if(type->declarator)
1251 {
1252 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1253 OutputDeclarator(type->declarator, f);
1254 }
1255 if(!type->qualifiers && !type->declarator)
1256 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "...");
1257 }
1258
1259 static void OutputStatement(struct Statement * stmt, struct __ecereNameSpace__ecere__com__Instance * f);
1260
1261 static void OutputInstance(struct Instantiation * inst, struct __ecereNameSpace__ecere__com__Instance * f);
1262
1263 extern int printf(char * , ...);
1264
1265 static void OutputInitializer(struct Initializer * initializer, struct __ecereNameSpace__ecere__com__Instance * f);
1266
1267 void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f)
1268 {
1269 switch(exp->type)
1270 {
1271 case 26:
1272 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class(");
1273 if(exp->_classExp.specifiers)
1274 {
1275 struct Specifier * spec;
1276
1277 for(spec = (*exp->_classExp.specifiers).first; spec; spec = spec->next)
1278 {
1279 OutputSpecifier(spec, f, 0x0);
1280 if(spec->next)
1281 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1282 }
1283 if(exp->_classExp.decl)
1284 {
1285 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1286 OutputDeclarator(exp->_classExp.decl, f);
1287 }
1288 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1289 }
1290 break;
1291 case 25:
1292 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1293 OutputStatement(exp->compound, f);
1294 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1295 break;
1296 case 13:
1297 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "new ");
1298 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1299 OutputTypeName(exp->_renew.typeName, f, 0x0);
1300 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1301 OutputExpression(exp->_renew.size, f);
1302 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1303 break;
1304 case 28:
1305 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "new0 ");
1306 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1307 OutputTypeName(exp->_renew.typeName, f, 0x0);
1308 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1309 OutputExpression(exp->_renew.size, f);
1310 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1311 break;
1312 case 14:
1313 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "renew ");
1314 OutputExpression(exp->_renew.exp, f);
1315 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1316 OutputTypeName(exp->_renew.typeName, f, 0x0);
1317 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1318 OutputExpression(exp->_renew.size, f);
1319 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1320 break;
1321 case 29:
1322 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "renew0 ");
1323 OutputExpression(exp->_renew.exp, f);
1324 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1325 OutputTypeName(exp->_renew.typeName, f, 0x0);
1326 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1327 OutputExpression(exp->_renew.size, f);
1328 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1329 break;
1330 case 0:
1331 if(exp->identifier)
1332 OutputIdentifier(exp->identifier, f);
1333 break;
1334 case 1:
1335 if(exp->instance)
1336 OutputInstance(exp->instance, f);
1337 break;
1338 case 2:
1339 if(exp->constant)
1340 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, exp->constant);
1341 else
1342 printf("");
1343 break;
1344 case 3:
1345 if(exp->string)
1346 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, exp->string);
1347 break;
1348 case 4:
1349 if(exp->op.exp1)
1350 {
1351 OutputExpression(exp->op.exp1, f);
1352 if(exp->op.exp2)
1353 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1354 }
1355 OutputOperator(exp->op.op, f);
1356 if(exp->op.exp2)
1357 {
1358 if(exp->op.exp1 || (exp->op.exp2->type == 4 && !exp->op.exp2->op.exp1 && exp->op.exp2->op.op == exp->op.op))
1359 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1360 OutputExpression(exp->op.exp2, f);
1361 }
1362 break;
1363 case 34:
1364 case 5:
1365 {
1366 struct Expression * expression;
1367
1368 if(exp->type == 34)
1369 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1370 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1371 if(exp->list)
1372 {
1373 for(expression = (*exp->list).first; expression; expression = expression->next)
1374 {
1375 OutputExpression(expression, f);
1376 if(expression->next)
1377 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1378 }
1379 }
1380 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1381 break;
1382 }
1383 case 6:
1384 {
1385 struct Expression * expression;
1386
1387 if(exp->index.exp)
1388 OutputExpression(exp->index.exp, f);
1389 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1390 if(exp->index.index)
1391 for(expression = (*exp->index.index).first; expression; expression = expression->next)
1392 {
1393 OutputExpression(expression, f);
1394 if(expression->next)
1395 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1396 }
1397 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1398 break;
1399 }
1400 case 7:
1401 {
1402 OutputExpression(exp->call.exp, f);
1403 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1404 if(exp->call.arguments)
1405 {
1406 struct Expression * expression;
1407
1408 for(expression = (*exp->call.arguments).first; expression; expression = expression->next)
1409 {
1410 OutputExpression(expression, f);
1411 if(expression->next)
1412 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1413 }
1414 }
1415 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1416 break;
1417 }
1418 case 8:
1419 if(exp->member.exp)
1420 OutputExpression(exp->member.exp, f);
1421 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ".");
1422 if(exp->member.member)
1423 OutputIdentifier(exp->member.member, f);
1424 break;
1425 case 9:
1426 OutputExpression(exp->member.exp, f);
1427 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "->");
1428 OutputIdentifier(exp->member.member, f);
1429 break;
1430 case 10:
1431 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "sizeof(");
1432 OutputTypeName(exp->typeName, f, 0x0);
1433 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1434 break;
1435 case 38:
1436 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__alignof__(");
1437 OutputTypeName(exp->typeName, f, 0x0);
1438 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1439 break;
1440 case 35:
1441 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1442 if(exp->initializer.typeName)
1443 OutputTypeName(exp->initializer.typeName, f, 0x0);
1444 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1445 if(exp->initializer.initializer)
1446 OutputInitializer(exp->initializer.initializer, f);
1447 break;
1448 case 11:
1449 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1450 OutputTypeName(exp->cast.typeName, f, 0x0);
1451 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1452 if(exp->cast.exp)
1453 OutputExpression(exp->cast.exp, f);
1454 break;
1455 case 12:
1456 OutputExpression(exp->cond.cond, f);
1457 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ? ");
1458 {
1459 struct Expression * expression;
1460
1461 for(expression = (*exp->cond.exp).first; expression; expression = expression->next)
1462 {
1463 OutputExpression(expression, f);
1464 if(expression->next)
1465 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1466 }
1467 }
1468 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1469 OutputExpression(exp->cond.elseExp, f);
1470 break;
1471 case 36:
1472 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__builtin_va_arg(");
1473 OutputExpression(exp->vaArg.exp, f);
1474 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1475 OutputTypeName(exp->vaArg.typeName, f, 0x0);
1476 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1477 break;
1478 case 37:
1479 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1480 if(exp->list)
1481 {
1482 struct Expression * expression;
1483
1484 for(expression = (*exp->list).first; expression; expression = expression->next)
1485 {
1486 OutputExpression(expression, f);
1487 if(expression->next)
1488 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1489 }
1490 }
1491 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1492 break;
1493 }
1494 }
1495
1496 static void OutputAsmField(struct AsmField * field, struct __ecereNameSpace__ecere__com__Instance * f)
1497 {
1498 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, field->command);
1499 if(field->expression)
1500 {
1501 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1502 OutputExpression(field->expression, f);
1503 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1504 }
1505 }
1506
1507 extern char *  strchr(const char * , int);
1508
1509 extern char *  __ecereNameSpace__ecere__sys__StripLastDirectory(char *  string, char *  output);
1510
1511 extern char *  sourceFile;
1512
1513 extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
1514
1515 extern void __ecereNameSpace__ecere__sys__ChangeCh(char *  string, char ch1, char ch2);
1516
1517 static void GetSourceName(char * name, const char * src)
1518 {
1519 name[0] = (char)0;
1520 if(src)
1521 {
1522 if(!strchr(src, '/') && !strchr(src, '\\'))
1523 __ecereNameSpace__ecere__sys__StripLastDirectory(sourceFile, name);
1524 __ecereNameSpace__ecere__sys__PathCat(name, src);
1525 }
1526 else if(sourceFile)
1527 __ecereNameSpace__ecere__sys__PathCat(name, sourceFile);
1528 __ecereNameSpace__ecere__sys__ChangeCh(name, '\\', '/');
1529 }
1530
1531 extern unsigned int inCompiler;
1532
1533 extern char *  GetIncludeFileFromID(int id);
1534
1535 extern char *  outputFile;
1536
1537 extern unsigned int outputLineNumbers;
1538
1539 static void OutputDeclaration(struct Declaration * decl, struct __ecereNameSpace__ecere__com__Instance * f);
1540
1541 extern struct __ecereNameSpace__ecere__sys__OldList *  MkList(void);
1542
1543 extern struct Declarator * SpecDeclFromString(char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
1544
1545 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1546
1547 extern struct Identifier * MkIdentifier(char *  string);
1548
1549 extern struct __ecereNameSpace__ecere__sys__OldList *  CopyList(struct __ecereNameSpace__ecere__sys__OldList *  source, void *  (*  CopyFunction)(void * ));
1550
1551 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1552
1553 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
1554
1555 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
1556
1557 extern struct Specifier * MkSpecifierName(char *  name);
1558
1559 extern void PrintTypeNoConst(struct Type * type, char *  string, unsigned int printName, unsigned int fullName);
1560
1561 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1562
1563 extern void InstDeclPassTypeName(struct TypeName * type, unsigned int param);
1564
1565 extern void FreeTypeName(struct TypeName * typeName);
1566
1567 int __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(struct __ecereNameSpace__ecere__com__Instance * this, char *  format, ...);
1568
1569 static void OutputStatement(struct Statement * stmt, struct __ecereNameSpace__ecere__com__Instance * f)
1570 {
1571 char name[274] = "";
1572 char origName[274] = "";
1573
1574 if(inCompiler)
1575 {
1576 GetSourceName(name, stmt->loc.start.included ? GetIncludeFileFromID(stmt->loc.start.included) : (((void *)0)));
1577 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
1578 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
1579 }
1580 if(inCompiler && outputLineNumbers && stmt->loc.start.line)
1581 {
1582 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.start.line, name);
1583 outputLine += 2;
1584 }
1585 switch(stmt->type)
1586 {
1587 case 14:
1588 OutputDeclaration(stmt->decl, f);
1589 break;
1590 case 0:
1591 OutputIdentifier(stmt->labeled.id, f);
1592 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":\n");
1593 outputLine++;
1594 OutputStatement(stmt->labeled.stmt, f);
1595 break;
1596 case 1:
1597 if(stmt->caseStmt.exp)
1598 {
1599 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "case ");
1600 OutputExpression(stmt->caseStmt.exp, f);
1601 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":\n");
1602 outputLine++;
1603 }
1604 else
1605 {
1606 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "default:\n");
1607 outputLine++;
1608 }
1609 if(stmt->caseStmt.stmt)
1610 OutputStatement(stmt->caseStmt.stmt, f);
1611 break;
1612 case 2:
1613 {
1614 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "{\n");
1615 outputLine++;
1616 if(stmt->compound.declarations)
1617 {
1618 struct Declaration * decl;
1619
1620 for(decl = (*stmt->compound.declarations).first; decl; decl = decl->next)
1621 {
1622 OutputDeclaration(decl, f);
1623 }
1624 }
1625 if(stmt->compound.statements)
1626 {
1627 struct Statement * statement;
1628
1629 if(stmt->compound.declarations)
1630 {
1631 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1632 outputLine++;
1633 }
1634 for(statement = (*stmt->compound.statements).first; statement; statement = statement->next)
1635 {
1636 OutputStatement(statement, f);
1637 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1638 outputLine++;
1639 }
1640 }
1641 if(inCompiler && outputLineNumbers && stmt->loc.end.line)
1642 {
1643 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.end.line, name);
1644 outputLine += 2;
1645 }
1646 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}");
1647 break;
1648 }
1649 case 3:
1650 {
1651 if(stmt->expressions)
1652 {
1653 struct Expression * exp;
1654
1655 for(exp = (*stmt->expressions).first; exp; exp = exp->next)
1656 {
1657 OutputExpression(exp, f);
1658 if(exp->next)
1659 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1660 }
1661 }
1662 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1663 break;
1664 }
1665 case 4:
1666 {
1667 struct Expression * exp;
1668
1669 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "if(");
1670 for(exp = (*stmt->ifStmt.exp).first; exp; exp = exp->next)
1671 {
1672 OutputExpression(exp, f);
1673 if(exp->next)
1674 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1675 }
1676 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1677 outputLine++;
1678 if(stmt->ifStmt.stmt)
1679 OutputStatement(stmt->ifStmt.stmt, f);
1680 if(stmt->ifStmt.elseStmt)
1681 {
1682 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1683 outputLine++;
1684 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "else");
1685 if(stmt->ifStmt.elseStmt->type != 4)
1686 {
1687 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1688 outputLine++;
1689 }
1690 else
1691 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1692 OutputStatement(stmt->ifStmt.elseStmt, f);
1693 }
1694 break;
1695 }
1696 case 5:
1697 {
1698 struct Expression * exp;
1699
1700 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "switch(");
1701 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1702 {
1703 OutputExpression(exp, f);
1704 if(exp->next)
1705 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1706 }
1707 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1708 outputLine++;
1709 OutputStatement(stmt->switchStmt.stmt, f);
1710 break;
1711 }
1712 case 6:
1713 {
1714 struct Expression * exp;
1715
1716 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "while(");
1717 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1718 {
1719 OutputExpression(exp, f);
1720 if(exp->next)
1721 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1722 }
1723 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1724 outputLine++;
1725 OutputStatement(stmt->whileStmt.stmt, f);
1726 break;
1727 }
1728 case 7:
1729 {
1730 struct Expression * exp;
1731
1732 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "do\n");
1733 outputLine++;
1734 OutputStatement(stmt->whileStmt.stmt, f);
1735 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "while(");
1736 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1737 {
1738 OutputExpression(exp, f);
1739 if(exp->next)
1740 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1741 }
1742 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ");");
1743 break;
1744 }
1745 case 8:
1746 {
1747 struct Expression * exp;
1748
1749 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "for(");
1750 OutputStatement(stmt->forStmt.init, f);
1751 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1752 OutputStatement(stmt->forStmt.check, f);
1753 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1754 if(stmt->forStmt.increment)
1755 {
1756 if(inCompiler && outputLineNumbers && stmt->loc.end.line)
1757 {
1758 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.end.line, name);
1759 outputLine += 2;
1760 }
1761 for(exp = (*stmt->forStmt.increment).first; exp; exp = exp->next)
1762 {
1763 OutputExpression(exp, f);
1764 if(exp->next)
1765 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1766 }
1767 }
1768 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1769 outputLine++;
1770 OutputStatement(stmt->forStmt.stmt, f);
1771 break;
1772 }
1773 case 9:
1774 {
1775 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "goto ");
1776 OutputIdentifier(stmt->gotoStmt.id, f);
1777 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1778 break;
1779 }
1780 case 10:
1781 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "continue;");
1782 break;
1783 case 11:
1784 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "break;");
1785 break;
1786 case 12:
1787 {
1788 struct Expression * exp;
1789
1790 if(inCompiler && memoryGuard)
1791 {
1792 struct Expression * exp = stmt->expressions ? (*stmt->expressions).last : (((void *)0));
1793
1794 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{ ");
1795 if(exp && exp->expType)
1796 {
1797 char string[1024] = "";
1798 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1799 struct Declarator * decl;
1800 struct TypeName * typeName;
1801
1802 if(exp->expType->kind == 20)
1803 {
1804 if(exp->expType->templateParameter->dataTypeString)
1805 decl = SpecDeclFromString(exp->expType->templateParameter->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1806 else if(exp->expType->templateParameter->dataType)
1807 {
1808 (__ecereNameSpace__ecere__com__eSystem_Delete(specs), specs = 0);
1809 specs = CopyList(exp->expType->templateParameter->dataType->specifiers, CopySpecifier);
1810 decl = PlugDeclarator(exp->expType->templateParameter->dataType->decl, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1811 }
1812 else
1813 {
1814 ListAdd(specs, MkSpecifierName("uint64"));
1815 decl = MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal"));
1816 }
1817 }
1818 else
1819 {
1820 PrintTypeNoConst(exp->expType, string, exp->expType->kind == 18 ? 0x1 : 0x0, 0x1);
1821 decl = SpecDeclFromString(string, specs, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1822 }
1823 typeName = MkTypeName(specs, decl);
1824 InstDeclPassTypeName(typeName, 0x0);
1825 OutputTypeName(typeName, f, 0x0);
1826 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";");
1827 FreeTypeName(typeName);
1828 }
1829 }
1830 if(!memoryGuard)
1831 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "return ");
1832 else
1833 {
1834 struct Expression * exp = stmt->expressions ? (*stmt->expressions).last : (((void *)0));
1835
1836 if(exp && exp->expType)
1837 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "__ecereReturnVal = ");
1838 }
1839 if(stmt->expressions)
1840 {
1841 for(exp = (*stmt->expressions).first; exp; exp = exp->next)
1842 {
1843 OutputExpression(exp, f);
1844 if(exp->next)
1845 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1846 }
1847 }
1848 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1849 if(inCompiler && memoryGuard)
1850 {
1851 struct Expression * exp = stmt->expressions ? (struct Expression *)(*stmt->expressions).last : (((void *)0));
1852
1853 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " __ecereNameSpace__ecere__com__MemoryGuard_PopLoc();");
1854 if(exp && exp->expType)
1855 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "return __ecereReturnVal;");
1856 else
1857 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "return;");
1858 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "}");
1859 }
1860 break;
1861 }
1862 case 13:
1863 {
1864 struct AsmField * field;
1865
1866 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__asm__ ");
1867 if(stmt->asmStmt.spec)
1868 OutputSpecifier(stmt->asmStmt.spec, f, 0x0);
1869 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1870 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, stmt->asmStmt.statements);
1871 if(stmt->asmStmt.inputFields || stmt->asmStmt.outputFields || stmt->asmStmt.clobberedFields)
1872 {
1873 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1874 if(stmt->asmStmt.inputFields)
1875 {
1876 for(field = (*stmt->asmStmt.inputFields).first; field; field = field->next)
1877 {
1878 if(field->prev)
1879 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1880 OutputAsmField(field, f);
1881 }
1882 }
1883 }
1884 if(stmt->asmStmt.outputFields || stmt->asmStmt.clobberedFields)
1885 {
1886 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1887 if(stmt->asmStmt.outputFields)
1888 {
1889 for(field = (*stmt->asmStmt.outputFields).first; field; field = field->next)
1890 {
1891 if(field->prev)
1892 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1893 OutputAsmField(field, f);
1894 }
1895 }
1896 }
1897 if(stmt->asmStmt.clobberedFields)
1898 {
1899 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1900 for(field = (*stmt->asmStmt.clobberedFields).first; field; field = field->next)
1901 {
1902 if(field->prev)
1903 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1904 OutputAsmField(field, f);
1905 }
1906 }
1907 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ");\n");
1908 outputLine++;
1909 break;
1910 }
1911 }
1912 if(inCompiler && outputLineNumbers && stmt->loc.start.line)
1913 {
1914 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", outputLine + 2, origName);
1915 outputLine += 2;
1916 }
1917 }
1918
1919 static void OutputPointer(struct Pointer * ptr, struct __ecereNameSpace__ecere__com__Instance * f)
1920 {
1921 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "*");
1922 if(ptr->qualifiers)
1923 {
1924 struct Specifier * spec;
1925
1926 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1927 for(spec = (*ptr->qualifiers).first; spec; spec = spec->next)
1928 {
1929 OutputSpecifier(spec, f, 0x0);
1930 if(spec->next)
1931 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1932 }
1933 }
1934 if(ptr->pointer)
1935 {
1936 OutputPointer(ptr->pointer, f);
1937 }
1938 }
1939
1940 static void OutputAttrib(struct Attrib * attr, struct __ecereNameSpace__ecere__com__Instance * f);
1941
1942 static void OutputExtDecl(struct ExtDecl * extDecl, struct __ecereNameSpace__ecere__com__Instance * f);
1943
1944 extern void ProcessExpressionType(struct Expression * exp);
1945
1946 extern void ComputeExpression(struct Expression * exp);
1947
1948 static void OutputDeclarator(struct Declarator * decl, struct __ecereNameSpace__ecere__com__Instance * f)
1949 {
1950 switch(decl->type)
1951 {
1952 case 0:
1953 if(decl->declarator)
1954 {
1955 OutputDeclarator(decl->declarator, f);
1956 }
1957 if(decl->structDecl.exp)
1958 {
1959 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1960 OutputExpression(decl->structDecl.exp, f);
1961 }
1962 if(decl->structDecl.posExp)
1963 {
1964 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1965 OutputExpression(decl->structDecl.posExp, f);
1966 }
1967 if(decl->structDecl.attrib)
1968 {
1969 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1970 OutputAttrib(decl->structDecl.attrib, f);
1971 }
1972 break;
1973 case 1:
1974 OutputIdentifier(decl->identifier, f);
1975 break;
1976 case 2:
1977 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1978 OutputDeclarator(decl->declarator, f);
1979 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1980 break;
1981 case 6:
1982 if(decl->extended.extended)
1983 OutputExtDecl(decl->extended.extended, f);
1984 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1985 OutputDeclarator(decl->declarator, f);
1986 break;
1987 case 7:
1988 OutputDeclarator(decl->declarator, f);
1989 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1990 if(decl->extended.extended)
1991 OutputExtDecl(decl->extended.extended, f);
1992 break;
1993 case 3:
1994 if(decl->declarator)
1995 {
1996 OutputDeclarator(decl->declarator, f);
1997 }
1998 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1999 if(decl->array.exp)
2000 {
2001 ProcessExpressionType(decl->array.exp);
2002 ComputeExpression(decl->array.exp);
2003 OutputExpression(decl->array.exp, f);
2004 }
2005 else if(decl->array.enumClass)
2006 {
2007 struct Symbol * _class = decl->array.enumClass->symbol;
2008
2009 if(_class && _class->registered)
2010 {
2011 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "%d", (int)__ecereNameSpace__ecere__com__eClass_GetProperty(_class->registered, "enumSize"));
2012 }
2013 }
2014 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
2015 break;
2016 case 4:
2017 {
2018 struct TypeName * param;
2019
2020 if(decl->declarator)
2021 OutputDeclarator(decl->declarator, f);
2022 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
2023 if(decl->function.parameters && (*decl->function.parameters).first)
2024 {
2025 for(param = (*decl->function.parameters).first; param; param = param->next)
2026 {
2027 OutputTypeName(param, f, 0x0);
2028 if(param->next)
2029 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2030 }
2031 }
2032 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2033 break;
2034 }
2035 case 5:
2036 if(decl->pointer.pointer)
2037 OutputPointer(decl->pointer.pointer, f);
2038 if(decl->declarator)
2039 {
2040 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2041 OutputDeclarator(decl->declarator, f);
2042 }
2043 break;
2044 }
2045 }
2046
2047 static void OutputEnumerator(struct Enumerator * enumerator, struct __ecereNameSpace__ecere__com__Instance * f)
2048 {
2049 OutputIdentifier(enumerator->id, f);
2050 if(enumerator->exp)
2051 {
2052 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2053 OutputExpression(enumerator->exp, f);
2054 }
2055 }
2056
2057 static void OutputAttribute(struct Attribute * attr, struct __ecereNameSpace__ecere__com__Instance * f)
2058 {
2059 if(attr->attr)
2060 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, attr->attr);
2061 if(attr->exp)
2062 {
2063 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2064 OutputExpression(attr->exp, f);
2065 }
2066 }
2067
2068 static void OutputAttrib(struct Attrib * attr, struct __ecereNameSpace__ecere__com__Instance * f)
2069 {
2070 switch(attr->type)
2071 {
2072 case ATTRIB:
2073 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute__((");
2074 break;
2075 case __ATTRIB:
2076 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute((");
2077 break;
2078 case ATTRIB_DEP:
2079 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute_deprecated__((");
2080 break;
2081 }
2082 if(attr->attribs)
2083 {
2084 struct Attribute * attrib;
2085
2086 for(attrib = (*attr->attribs).first; attrib; attrib = attrib->next)
2087 {
2088 if(attrib->prev)
2089 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2090 OutputAttribute(attrib, f);
2091 }
2092 }
2093 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "))");
2094 }
2095
2096 static void OutputExtDecl(struct ExtDecl * extDecl, struct __ecereNameSpace__ecere__com__Instance * f)
2097 {
2098 if(extDecl->type == 0 && extDecl->s)
2099 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, extDecl->s);
2100 else if(extDecl->type == 1)
2101 OutputAttrib(extDecl->attr, f);
2102 }
2103
2104 extern struct Symbol * FindClass(char *  name);
2105
2106 static void OutputClassDef(struct ClassDef * def, struct __ecereNameSpace__ecere__com__Instance * f);
2107
2108 static void OutputSpecifier(struct Specifier * spec, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName)
2109 {
2110 switch(spec->type)
2111 {
2112 case 0:
2113 switch(spec->specifier)
2114 {
2115 case TYPEDEF:
2116 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typedef");
2117 break;
2118 case EXTERN:
2119 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "extern");
2120 break;
2121 case STATIC:
2122 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "static");
2123 break;
2124 case AUTO:
2125 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "auto");
2126 break;
2127 case REGISTER:
2128 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "register");
2129 break;
2130 case CONST:
2131 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "const");
2132 break;
2133 case VOLATILE:
2134 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "volatile");
2135 break;
2136 case VOID:
2137 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "void");
2138 break;
2139 case CHAR:
2140 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "char");
2141 break;
2142 case SHORT:
2143 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "short");
2144 break;
2145 case INT:
2146 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "int");
2147 break;
2148 case UINT:
2149 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, typeName ? "uint" : "unsigned int");
2150 break;
2151 case INT64:
2152 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, typeName ? "int64" : "long long");
2153 break;
2154 case VALIST:
2155 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__builtin_va_list");
2156 break;
2157 case LONG:
2158 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "long");
2159 break;
2160 case FLOAT:
2161 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "float");
2162 break;
2163 case DOUBLE:
2164 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "double");
2165 break;
2166 case SIGNED:
2167 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "signed");
2168 break;
2169 case UNSIGNED:
2170 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "unsigned");
2171 break;
2172 case TYPED_OBJECT:
2173 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
2174 break;
2175 case ANY_OBJECT:
2176 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "any_object");
2177 break;
2178 case CLASS:
2179 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class");
2180 break;
2181 case THISCLASS:
2182 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "thisclass");
2183 break;
2184 }
2185 break;
2186 case 5:
2187 if(spec->extDecl)
2188 OutputExtDecl(spec->extDecl, f);
2189 break;
2190 case 1:
2191 if(spec->name && !strcmp(spec->name, "class"))
2192 {
2193 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
2194 }
2195 else
2196 {
2197 struct Symbol * symbol = spec->symbol;
2198
2199 if(!symbol && spec->name)
2200 symbol = FindClass(spec->name);
2201 if(symbol)
2202 {
2203 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, symbol->string ? symbol->string : "(null)");
2204 }
2205 else if(spec->name)
2206 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, spec->name);
2207 }
2208 break;
2209 case 2:
2210 {
2211 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "enum");
2212 if(spec->id)
2213 {
2214 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2215 OutputIdentifier(spec->id, f);
2216 }
2217 if(spec->list)
2218 {
2219 struct Enumerator * enumerator;
2220
2221 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2222 outputLine += 2;
2223 for(enumerator = (*spec->list).first; enumerator; enumerator = enumerator->next)
2224 {
2225 OutputEnumerator(enumerator, f);
2226 if(enumerator->next)
2227 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2228 }
2229 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n}");
2230 outputLine++;
2231 }
2232 break;
2233 }
2234 case 3:
2235 case 4:
2236 {
2237 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, (spec->type == 3) ? "struct" : "union");
2238 if(spec->extDeclStruct)
2239 {
2240 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2241 OutputExtDecl(spec->extDeclStruct, f);
2242 }
2243 if(spec->id)
2244 {
2245 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2246 OutputIdentifier(spec->id, f);
2247 }
2248 if(spec->definitions)
2249 {
2250 struct ClassDef * def;
2251
2252 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2253 outputLine += 2;
2254 for(def = (*spec->definitions).first; def; def = def->next)
2255 {
2256 OutputClassDef(def, f);
2257 }
2258 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "} __attribute__ ((gcc_struct))");
2259 }
2260 break;
2261 }
2262 case 6:
2263 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__typeof(");
2264 OutputExpression(spec->expression, f);
2265 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2266 break;
2267 case 7:
2268 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "subclass(");
2269 OutputSpecifier(spec->_class, f, 0x0);
2270 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2271 break;
2272 case 8:
2273 OutputIdentifier(spec->templateParameter->identifier, f);
2274 break;
2275 }
2276 }
2277
2278 static void OutputInitializer(struct Initializer * initializer, struct __ecereNameSpace__ecere__com__Instance * f)
2279 {
2280 char name[274] = "";
2281 char origName[274] = "";
2282
2283 if(inCompiler)
2284 {
2285 GetSourceName(name, initializer->loc.start.included ? GetIncludeFileFromID(initializer->loc.start.included) : (((void *)0)));
2286 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
2287 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
2288 }
2289 switch(initializer->type)
2290 {
2291 case 1:
2292 {
2293 struct Initializer * init;
2294
2295 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2296 outputLine += 2;
2297 if(inCompiler && outputLineNumbers && initializer->loc.start.line)
2298 {
2299 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", initializer->loc.start.line, name);
2300 outputLine += 2;
2301 }
2302 for(init = (*initializer->list).first; init; init = init->next)
2303 {
2304 OutputInitializer(init, f);
2305 if(init->next)
2306 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2307 }
2308 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n}");
2309 if(inCompiler && outputLineNumbers && initializer->loc.start.line)
2310 {
2311 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", initializer->loc.start.line, name);
2312 outputLine += 2;
2313 }
2314 outputLine++;
2315 break;
2316 }
2317 case 0:
2318 if(initializer->exp)
2319 OutputExpression(initializer->exp, f);
2320 break;
2321 }
2322 }
2323
2324 static void OutputInitDeclarator(struct InitDeclarator * decl, struct __ecereNameSpace__ecere__com__Instance * f)
2325 {
2326 OutputDeclarator(decl->declarator, f);
2327 if(decl->initializer)
2328 {
2329 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2330 OutputInitializer(decl->initializer, f);
2331 }
2332 }
2333
2334 static void OutputDeclaration(struct Declaration * decl, struct __ecereNameSpace__ecere__com__Instance * f)
2335 {
2336 struct Specifier * spec;
2337 char origName[274] = "";
2338
2339 switch(decl->type)
2340 {
2341 case 1:
2342 {
2343 struct InitDeclarator * d;
2344
2345 if(inCompiler)
2346 {
2347 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
2348 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
2349 }
2350 if(decl->declarators && (*decl->declarators).first)
2351 {
2352 for(d = (*decl->declarators).first; d; d = d->next)
2353 if(d->initializer)
2354 {
2355 char name[274] = "";
2356
2357 GetSourceName(name, decl->loc.start.included ? GetIncludeFileFromID(decl->loc.start.included) : (((void *)0)));
2358 if(inCompiler && outputLineNumbers && decl->loc.start.line)
2359 {
2360 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", decl->loc.start.line, name);
2361 outputLine += 2;
2362 }
2363 break;
2364 }
2365 }
2366 if(decl->specifiers)
2367 {
2368 unsigned int inTypeDef = 0x0;
2369
2370 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
2371 {
2372 if(spec->type == 0 && spec->specifier == TYPEDEF)
2373 inTypeDef = 0x1;
2374 OutputSpecifier(spec, f, inTypeDef && !spec->next);
2375 if(spec->next)
2376 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2377 }
2378 }
2379 if(decl->declarators && (*decl->declarators).first)
2380 {
2381 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2382 for(d = (*decl->declarators).first; d; d = d->next)
2383 {
2384 OutputInitDeclarator(d, f);
2385 if(d->next)
2386 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2387 }
2388 }
2389 break;
2390 }
2391 case 0:
2392 {
2393 if(decl->specifiers)
2394 {
2395 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
2396 {
2397 OutputSpecifier(spec, f, 0x0);
2398 if(spec->next)
2399 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2400 }
2401 }
2402 if(decl->declarators)
2403 {
2404 struct Declarator * d;
2405
2406 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2407 for(d = (*decl->declarators).first; d; d = d->next)
2408 {
2409 OutputDeclarator(d, f);
2410 if(d->next)
2411 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2412 }
2413 }
2414 if(decl->extStorage)
2415 {
2416 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2417 OutputSpecifier(decl->extStorage, f, 0x0);
2418 }
2419 break;
2420 }
2421 case 2:
2422 if(decl->inst)
2423 {
2424 OutputInstance(decl->inst, f);
2425 }
2426 break;
2427 case 3:
2428 return ;
2429 }
2430 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n");
2431 outputLine++;
2432 if(inCompiler && outputLineNumbers && decl->loc.start.line && decl->type == 1)
2433 {
2434 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", outputLine + 2, origName);
2435 outputLine += 2;
2436 }
2437 }
2438
2439 static struct FunctionDefinition * curFunction;
2440
2441 extern struct Identifier * GetDeclId(struct Declarator * decl);
2442
2443 static void OutputFunction(struct FunctionDefinition * func, struct __ecereNameSpace__ecere__com__Instance * f)
2444 {
2445 struct FunctionDefinition * oldFunc = curFunction;
2446
2447 curFunction = func;
2448 if(func->specifiers)
2449 {
2450 struct Specifier * spec;
2451
2452 for(spec = (*func->specifiers).first; spec; spec = spec->next)
2453 {
2454 OutputSpecifier(spec, f, 0x0);
2455 if(spec->next)
2456 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2457 }
2458 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2459 }
2460 if(func->declarator)
2461 OutputDeclarator(func->declarator, f);
2462 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2463 outputLine++;
2464 if(func->declarations)
2465 {
2466 struct Declaration * decl;
2467
2468 for(decl = (*func->declarations).first; decl; decl = decl->next)
2469 {
2470 OutputDeclaration(decl, f);
2471 }
2472 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2473 outputLine++;
2474 }
2475 if(func->body)
2476 {
2477 if(inCompiler && memoryGuard)
2478 {
2479 char name[1024] = "";
2480 struct Identifier * id = GetDeclId(func->declarator);
2481
2482 GetSourceName(name, func->loc.start.included ? GetIncludeFileFromID(func->loc.start.included) : (((void *)0)));
2483 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{\n");
2484 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereNameSpace__ecere__com__MemoryGuard_PushLoc(\"%s:%s\");\n", name, id->string);
2485 outputLine += 2;
2486 }
2487 OutputStatement(func->body, f);
2488 if(inCompiler && memoryGuard)
2489 {
2490 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereNameSpace__ecere__com__MemoryGuard_PopLoc();\n");
2491 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "}\n");
2492 outputLine += 2;
2493 }
2494 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2495 outputLine++;
2496 }
2497 curFunction = oldFunc;
2498 }
2499
2500 static void OutputMemberInit(struct MemberInit * init, struct __ecereNameSpace__ecere__com__Instance * f)
2501 {
2502 if(init->identifiers)
2503 {
2504 if((*init->identifiers).count > 1)
2505 {
2506 struct Identifier * id;
2507
2508 for(id = (*init->identifiers).first; id; id = id->next)
2509 {
2510 OutputIdentifier(id, f);
2511 if(id->next)
2512 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ".");
2513 }
2514 }
2515 else if((*init->identifiers).first)
2516 OutputIdentifier((*init->identifiers).first, f);
2517 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2518 }
2519 if(init->initializer)
2520 OutputInitializer(init->initializer, f);
2521 }
2522
2523 static void OutputClassFunction(struct ClassFunction * func, struct __ecereNameSpace__ecere__com__Instance * f);
2524
2525 static void OutputMembersInit(struct MembersInit * init, struct __ecereNameSpace__ecere__com__Instance * f)
2526 {
2527 switch(init->type)
2528 {
2529 case 0:
2530 {
2531 struct MemberInit * member;
2532
2533 if(init->dataMembers)
2534 {
2535 for(member = (*init->dataMembers).first; member; member = member->next)
2536 {
2537 OutputMemberInit(member, f);
2538 if(member->next)
2539 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2540 }
2541 }
2542 break;
2543 }
2544 case 1:
2545 OutputClassFunction(init->function, f);
2546 break;
2547 }
2548 }
2549
2550 static void OutputInstance(struct Instantiation * inst, struct __ecereNameSpace__ecere__com__Instance * f)
2551 {
2552 if(inst->_class)
2553 OutputSpecifier(inst->_class, f, 0x0);
2554 if(inst->exp)
2555 {
2556 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2557 OutputExpression(inst->exp, f);
2558 }
2559 if(inst->members && (*inst->members).count > 1)
2560 {
2561 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2562 outputLine += 2;
2563 }
2564 else if(inst->members)
2565 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " { ");
2566 else
2567 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "{");
2568 if(inst->members)
2569 {
2570 struct MembersInit * init;
2571
2572 for(init = (*inst->members).first; init; init = init->next)
2573 {
2574 OutputMembersInit(init, f);
2575 if(init->type == 0 && init->next)
2576 {
2577 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n");
2578 outputLine++;
2579 }
2580 }
2581 }
2582 if(inst->members)
2583 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " }");
2584 else
2585 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}");
2586 }
2587
2588 static void OutputClassFunction(struct ClassFunction * func, struct __ecereNameSpace__ecere__com__Instance * f)
2589 {
2590 if(func->specifiers)
2591 {
2592 struct Specifier * spec;
2593
2594 for(spec = (*func->specifiers).first; spec; spec = spec->next)
2595 {
2596 OutputSpecifier(spec, f, 0x0);
2597 if(spec->next)
2598 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2599 }
2600 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2601 }
2602 if(func->declarator)
2603 OutputDeclarator(func->declarator, f);
2604 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2605 outputLine++;
2606 if(func->declarations)
2607 {
2608 struct Declaration * decl;
2609
2610 for(decl = (*func->declarations).first; decl; decl = decl->next)
2611 {
2612 OutputDeclaration(decl, f);
2613 }
2614 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2615 outputLine++;
2616 }
2617 if(func->body)
2618 {
2619 OutputStatement(func->body, f);
2620 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2621 outputLine++;
2622 }
2623 else
2624 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
2625 }
2626
2627 static void OutputClassDef(struct ClassDef * def, struct __ecereNameSpace__ecere__com__Instance * f)
2628 {
2629 switch(def->type)
2630 {
2631 case 2:
2632 if(def->decl)
2633 {
2634 OutputDeclaration(def->decl, f);
2635 if(def->next && def->next->type != 2)
2636 {
2637 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2638 outputLine++;
2639 }
2640 }
2641 break;
2642 case 1:
2643 {
2644 struct MemberInit * init;
2645
2646 for(init = (*def->defProperties).first; init; init = init->next)
2647 {
2648 OutputMemberInit(init, f);
2649 if(init->next)
2650 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2651 }
2652 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n\n");
2653 outputLine += 2;
2654 break;
2655 }
2656 case 0:
2657 OutputClassFunction(def->function, f);
2658 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2659 outputLine++;
2660 break;
2661 }
2662 }
2663
2664 static void OutputClass(struct ClassDefinition * _class, struct __ecereNameSpace__ecere__com__Instance * f)
2665 {
2666 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class ");
2667 OutputSpecifier(_class->_class, f, 0x0);
2668 if(_class->baseSpecs)
2669 {
2670 struct Specifier * spec;
2671
2672 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
2673 for(spec = (*_class->baseSpecs).first; spec; spec = spec->next)
2674 {
2675 OutputSpecifier(spec, f, 0x0);
2676 }
2677 }
2678 if(_class->definitions)
2679 {
2680 struct ClassDef * def;
2681
2682 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2683 outputLine += 2;
2684 for(def = (*_class->definitions).first; def; def = def->next)
2685 {
2686 OutputClassDef(def, f);
2687 }
2688 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}\n");
2689 outputLine++;
2690 }
2691 else
2692 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
2693 }
2694
2695 void OutputTree(struct __ecereNameSpace__ecere__sys__OldList * ast, struct __ecereNameSpace__ecere__com__Instance * f)
2696 {
2697 struct External * external;
2698
2699 outputLine = 31;
2700 for(external = ast->first; external; external = external->next)
2701 {
2702 switch(external->type)
2703 {
2704 case 0:
2705 OutputFunction(external->function, f);
2706 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2707 outputLine++;
2708 break;
2709 case 1:
2710 OutputDeclaration(external->declaration, f);
2711 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2712 outputLine++;
2713 break;
2714 case 2:
2715 OutputClass(external->_class, f);
2716 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2717 outputLine++;
2718 break;
2719 }
2720 }
2721 }
2722
2723 extern char *  __ecereNameSpace__ecere__sys__TrimRSpaces(char *  string, char *  output);
2724
2725 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
2726
2727 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
2728
2729 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_GetSize;
2730
2731 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
2732
2733 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
2734
2735 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
2736
2737 char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl)
2738 {
2739 char * string;
2740 struct TypeName * typeName = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
2741 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
2742 unsigned int size;
2743
2744 typeName->qualifiers = specs;
2745 typeName->declarator = decl;
2746 OutputTypeName(typeName, f, 0x1);
2747 ((typeName ? (__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor(typeName) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(typeName)) : 0), typeName = 0);
2748 size = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_GetSize])(f);
2749 string = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (size + 1));
2750 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
2751 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string, 1, (unsigned int)size);
2752 string[size] = '\0';
2753 __ecereNameSpace__ecere__sys__TrimRSpaces(string, string);
2754 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
2755 return string;
2756 }
2757
2758 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2759
2760 struct __ecereNameSpace__ecere__com__GlobalFunction;
2761
2762 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);
2763
2764 void __ecereRegisterModule_output(struct __ecereNameSpace__ecere__com__Instance * module)
2765 {
2766 struct __ecereNameSpace__ecere__com__Class * class;
2767
2768 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetMemoryGuard", "void SetMemoryGuard(bool b)", SetMemoryGuard, module, 1);
2769 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetMemoryGuard", "bool GetMemoryGuard(void)", GetMemoryGuard, module, 1);
2770 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputTypeName", "void OutputTypeName(TypeName type, ecere::sys::File f, bool typeName)", OutputTypeName, module, 1);
2771 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputExpression", "void OutputExpression(Expression exp, ecere::sys::File f)", OutputExpression, module, 1);
2772 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputTree", "void OutputTree(ecere::sys::OldList ast, ecere::sys::File f)", OutputTree, module, 1);
2773 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("StringFromSpecDecl", "char * StringFromSpecDecl(ecere::sys::OldList specs, Declarator decl)", StringFromSpecDecl, module, 1);
2774 }
2775
2776 void __ecereUnregisterModule_output(struct __ecereNameSpace__ecere__com__Instance * module)
2777 {
2778
2779 }
2780