wip II
[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 unsigned int typedByReference : 1;
776 } __attribute__ ((gcc_struct));
777
778 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
779
780 struct __ecereNameSpace__ecere__com__Class
781 {
782 struct __ecereNameSpace__ecere__com__Class * prev;
783 struct __ecereNameSpace__ecere__com__Class * next;
784 char *  name;
785 int offset;
786 int structSize;
787 int (* *  _vTbl)();
788 int vTblSize;
789 int (*  Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
790 void (*  Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
791 int offsetClass;
792 int sizeClass;
793 struct __ecereNameSpace__ecere__com__Class * base;
794 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
795 struct __ecereNameSpace__ecere__sys__BinaryTree members;
796 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
797 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
798 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
799 struct __ecereNameSpace__ecere__sys__OldList derivatives;
800 int memberID;
801 int startMemberID;
802 int type;
803 struct __ecereNameSpace__ecere__com__Instance * module;
804 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
805 char *  dataTypeString;
806 struct Type * dataType;
807 int typeSize;
808 int defaultAlignment;
809 void (*  Initialize)();
810 int memberOffset;
811 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
812 char *  designerClass;
813 unsigned int noExpansion;
814 char *  defaultProperty;
815 unsigned int comRedefinition;
816 int count;
817 unsigned int isRemote;
818 unsigned int internalDecl;
819 void *  data;
820 unsigned int computeSize;
821 int structAlignment;
822 int destructionWatchOffset;
823 unsigned int fixed;
824 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
825 int inheritanceAccess;
826 char *  fullName;
827 void *  symbol;
828 struct __ecereNameSpace__ecere__sys__OldList conversions;
829 struct __ecereNameSpace__ecere__sys__OldList templateParams;
830 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
831 struct __ecereNameSpace__ecere__com__Class * templateClass;
832 struct __ecereNameSpace__ecere__sys__OldList templatized;
833 int numParams;
834 unsigned int isInstanceClass;
835 unsigned int byValueSystemClass;
836 } __attribute__ ((gcc_struct));
837
838 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name);
839
840 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
841
842 struct __ecereNameSpace__ecere__com__Instance
843 {
844 int (* *  _vTbl)();
845 struct __ecereNameSpace__ecere__com__Class * _class;
846 int _refCount;
847 } __attribute__ ((gcc_struct));
848
849 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
850
851 struct __ecereNameSpace__ecere__com__DataMember
852 {
853 struct __ecereNameSpace__ecere__com__DataMember * prev;
854 struct __ecereNameSpace__ecere__com__DataMember * next;
855 char *  name;
856 unsigned int isProperty;
857 int memberAccess;
858 int id;
859 struct __ecereNameSpace__ecere__com__Class * _class;
860 char *  dataTypeString;
861 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
862 struct Type * dataType;
863 int type;
864 int offset;
865 int memberID;
866 struct __ecereNameSpace__ecere__sys__OldList members;
867 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
868 int memberOffset;
869 int structAlignment;
870 } __attribute__ ((gcc_struct));
871
872 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
873
874 struct __ecereNameSpace__ecere__com__SerialBuffer
875 {
876 unsigned char *  _buffer;
877 unsigned int count;
878 unsigned int _size;
879 unsigned int pos;
880 } __attribute__ ((gcc_struct));
881
882 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
883
884 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
885 {
886 union
887 {
888 struct
889 {
890 char *  dataTypeString;
891 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
892 } __attribute__ ((gcc_struct));
893 struct __ecereNameSpace__ecere__com__DataValue expression;
894 struct
895 {
896 char *  memberString;
897 union
898 {
899 struct __ecereNameSpace__ecere__com__DataMember * member;
900 struct __ecereNameSpace__ecere__com__Property * prop;
901 struct __ecereNameSpace__ecere__com__Method * method;
902 } __attribute__ ((gcc_struct));
903 } __attribute__ ((gcc_struct));
904 } __attribute__ ((gcc_struct));
905 } __attribute__ ((gcc_struct));
906
907 enum yytokentype
908 {
909 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
910 };
911
912 typedef union YYSTYPE
913 {
914 int specifierType;
915 int i;
916 int declMode;
917 struct Identifier * id;
918 struct Expression * exp;
919 struct Specifier * specifier;
920 struct __ecereNameSpace__ecere__sys__OldList * list;
921 struct Enumerator * enumerator;
922 struct Declarator * declarator;
923 struct Pointer * pointer;
924 struct Initializer * initializer;
925 struct InitDeclarator * initDeclarator;
926 struct TypeName * typeName;
927 struct Declaration * declaration;
928 struct Statement * stmt;
929 struct FunctionDefinition * function;
930 struct External * external;
931 struct Context * context;
932 struct AsmField * asmField;
933 struct Attrib * attrib;
934 struct ExtDecl * extDecl;
935 struct Attribute * attribute;
936 struct Instantiation * instance;
937 struct MembersInit * membersInit;
938 struct MemberInit * memberInit;
939 struct ClassFunction * classFunction;
940 struct ClassDefinition * _class;
941 struct ClassDef * classDef;
942 struct PropertyDef * prop;
943 char * string;
944 struct Symbol * symbol;
945 struct PropertyWatch * propertyWatch;
946 struct TemplateParameter * templateParameter;
947 struct TemplateArgument * templateArgument;
948 struct TemplateDatatype * templateDatatype;
949 struct DBTableEntry * dbtableEntry;
950 struct DBIndexItem * dbindexItem;
951 struct DBTableDef * dbtableDef;
952 } __attribute__ ((gcc_struct)) YYSTYPE;
953
954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
955
956 struct Enumerator
957 {
958 struct Enumerator * prev;
959 struct Enumerator * next;
960 struct Location loc;
961 struct Identifier * id;
962 struct Expression * exp;
963 } __attribute__ ((gcc_struct));
964
965 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
966
967 struct InitDeclarator
968 {
969 struct InitDeclarator * prev;
970 struct InitDeclarator * next;
971 struct Location loc;
972 struct Declarator * declarator;
973 struct Initializer * initializer;
974 } __attribute__ ((gcc_struct));
975
976 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
977
978 struct AsmField
979 {
980 struct AsmField * prev;
981 struct AsmField * next;
982 struct Location loc;
983 char *  command;
984 struct Expression * expression;
985 } __attribute__ ((gcc_struct));
986
987 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
988
989 struct Attribute
990 {
991 struct Attribute * prev;
992 struct Attribute * next;
993 struct Location loc;
994 char * attr;
995 struct Expression * exp;
996 } __attribute__ ((gcc_struct));
997
998 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
999
1000 struct ClassFunction
1001 {
1002 struct ClassFunction * prev;
1003 struct ClassFunction * next;
1004 struct Location loc;
1005 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1006 struct Declarator * declarator;
1007 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1008 struct Statement * body;
1009 struct __ecereNameSpace__ecere__com__Class * _class;
1010 struct __ecereNameSpace__ecere__sys__OldList attached;
1011 int declMode;
1012 struct Type * type;
1013 struct Symbol * propSet;
1014 unsigned int isVirtual;
1015 unsigned int isConstructor;
1016 unsigned int isDestructor;
1017 unsigned int dontMangle;
1018 int id;
1019 int idCode;
1020 } __attribute__ ((gcc_struct));
1021
1022 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
1023
1024 struct MembersInit
1025 {
1026 struct MembersInit * prev;
1027 struct MembersInit * next;
1028 struct Location loc;
1029 int type;
1030 union
1031 {
1032 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
1033 struct ClassFunction * function;
1034 } __attribute__ ((gcc_struct));
1035 } __attribute__ ((gcc_struct));
1036
1037 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
1038
1039 struct MemberInit
1040 {
1041 struct MemberInit * prev;
1042 struct MemberInit * next;
1043 struct Location loc;
1044 struct Location realLoc;
1045 struct __ecereNameSpace__ecere__sys__OldList *  identifiers;
1046 struct Initializer * initializer;
1047 unsigned int used;
1048 unsigned int variable;
1049 unsigned int takeOutExp;
1050 } __attribute__ ((gcc_struct));
1051
1052 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
1053
1054 struct PropertyDef;
1055
1056 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
1057
1058 struct PropertyWatch;
1059
1060 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
1061
1062 struct ClassDef
1063 {
1064 struct ClassDef * prev;
1065 struct ClassDef * next;
1066 struct Location loc;
1067 int type;
1068 union
1069 {
1070 struct Declaration * decl;
1071 struct ClassFunction * function;
1072 struct __ecereNameSpace__ecere__sys__OldList *  defProperties;
1073 struct PropertyDef * propertyDef;
1074 struct PropertyWatch * propertyWatch;
1075 char *  designer;
1076 struct Identifier * defaultProperty;
1077 struct
1078 {
1079 struct Identifier * id;
1080 struct Initializer * initializer;
1081 } __attribute__ ((gcc_struct));
1082 } __attribute__ ((gcc_struct));
1083 int memberAccess;
1084 void *  object;
1085 } __attribute__ ((gcc_struct));
1086
1087 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1088
1089 struct DBTableEntry;
1090
1091 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1092
1093 struct DBIndexItem;
1094
1095 extern YYSTYPE yylval;
1096
1097 extern struct Location yylloc;
1098
1099 int outputLine;
1100
1101 unsigned int memoryGuard = 0x0;
1102
1103 void SetMemoryGuard(unsigned int b)
1104 {
1105 memoryGuard = b;
1106 }
1107
1108 unsigned int GetMemoryGuard()
1109 {
1110 return memoryGuard;
1111 }
1112
1113 extern int strcmp(const char * , const char * );
1114
1115 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts;
1116
1117 static void OutputIdentifier(struct Identifier * id, struct __ecereNameSpace__ecere__com__Instance * f)
1118 {
1119 if(id)
1120 {
1121 if(id->_class)
1122 {
1123 if(id->_class->type == 8)
1124 {
1125 if(id->_class->templateParameter && id->_class->templateParameter->identifier && id->_class->templateParameter->identifier->string)
1126 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, id->_class->templateParameter->identifier->string);
1127 }
1128 else
1129 {
1130 if(id->_class->name)
1131 {
1132 if(!strcmp(id->_class->name, "class"))
1133 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
1134 else
1135 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, id->_class->name);
1136 }
1137 }
1138 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "::");
1139 }
1140 }
1141 ((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)");
1142 }
1143
1144 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Putc;
1145
1146 static void OutputOperator(int op, struct __ecereNameSpace__ecere__com__Instance * f)
1147 {
1148 switch(op)
1149 {
1150 case INC_OP:
1151 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "++");
1152 break;
1153 case DEC_OP:
1154 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "--");
1155 break;
1156 case SIZEOF:
1157 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "sizeof ");
1158 break;
1159 case LEFT_OP:
1160 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<<");
1161 break;
1162 case RIGHT_OP:
1163 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">>");
1164 break;
1165 case LE_OP:
1166 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<=");
1167 break;
1168 case GE_OP:
1169 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">=");
1170 break;
1171 case EQ_OP:
1172 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "==");
1173 break;
1174 case NE_OP:
1175 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "!=");
1176 break;
1177 case AND_OP:
1178 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "&&");
1179 break;
1180 case OR_OP:
1181 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "||");
1182 break;
1183 case MUL_ASSIGN:
1184 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "*=");
1185 break;
1186 case DIV_ASSIGN:
1187 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "/=");
1188 break;
1189 case MOD_ASSIGN:
1190 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "%=");
1191 break;
1192 case ADD_ASSIGN:
1193 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "+=");
1194 break;
1195 case SUB_ASSIGN:
1196 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "-=");
1197 break;
1198 case LEFT_ASSIGN:
1199 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "<<=");
1200 break;
1201 case RIGHT_ASSIGN:
1202 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ">>=");
1203 break;
1204 case AND_ASSIGN:
1205 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "&=");
1206 break;
1207 case XOR_ASSIGN:
1208 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "^=");
1209 break;
1210 case OR_ASSIGN:
1211 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "|=");
1212 break;
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 case '=':
1226 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, char ch))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Putc])(f, (char)op);
1227 break;
1228 case DELETE:
1229 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "delete ");
1230 break;
1231 }
1232 }
1233
1234 static void OutputSpecifier(struct Specifier * spec, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName);
1235
1236 static void OutputDeclarator(struct Declarator * decl, struct __ecereNameSpace__ecere__com__Instance * f);
1237
1238 void OutputTypeName(struct TypeName * type, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName)
1239 {
1240 if(type->qualifiers)
1241 {
1242 struct Specifier * spec;
1243
1244 for(spec = (*type->qualifiers).first; spec; spec = spec->next)
1245 {
1246 OutputSpecifier(spec, f, typeName);
1247 if(spec->next)
1248 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1249 }
1250 }
1251 if(type->declarator)
1252 {
1253 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1254 OutputDeclarator(type->declarator, f);
1255 }
1256 if(!type->qualifiers && !type->declarator)
1257 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "...");
1258 }
1259
1260 static void OutputStatement(struct Statement * stmt, struct __ecereNameSpace__ecere__com__Instance * f);
1261
1262 static void OutputInstance(struct Instantiation * inst, struct __ecereNameSpace__ecere__com__Instance * f);
1263
1264 extern int printf(char * , ...);
1265
1266 static void OutputInitializer(struct Initializer * initializer, struct __ecereNameSpace__ecere__com__Instance * f);
1267
1268 void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f)
1269 {
1270 switch(exp->type)
1271 {
1272 case 26:
1273 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class(");
1274 if(exp->_classExp.specifiers)
1275 {
1276 struct Specifier * spec;
1277
1278 for(spec = (*exp->_classExp.specifiers).first; spec; spec = spec->next)
1279 {
1280 OutputSpecifier(spec, f, 0x0);
1281 if(spec->next)
1282 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1283 }
1284 if(exp->_classExp.decl)
1285 {
1286 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1287 OutputDeclarator(exp->_classExp.decl, f);
1288 }
1289 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1290 }
1291 break;
1292 case 25:
1293 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1294 OutputStatement(exp->compound, f);
1295 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1296 break;
1297 case 13:
1298 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "new ");
1299 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1300 OutputTypeName(exp->_renew.typeName, f, 0x0);
1301 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1302 OutputExpression(exp->_renew.size, f);
1303 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1304 break;
1305 case 28:
1306 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "new0 ");
1307 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1308 OutputTypeName(exp->_renew.typeName, f, 0x0);
1309 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1310 OutputExpression(exp->_renew.size, f);
1311 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1312 break;
1313 case 14:
1314 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "renew ");
1315 OutputExpression(exp->_renew.exp, f);
1316 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1317 OutputTypeName(exp->_renew.typeName, f, 0x0);
1318 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1319 OutputExpression(exp->_renew.size, f);
1320 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1321 break;
1322 case 29:
1323 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "renew0 ");
1324 OutputExpression(exp->_renew.exp, f);
1325 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1326 OutputTypeName(exp->_renew.typeName, f, 0x0);
1327 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1328 OutputExpression(exp->_renew.size, f);
1329 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1330 break;
1331 case 0:
1332 if(exp->identifier)
1333 OutputIdentifier(exp->identifier, f);
1334 break;
1335 case 1:
1336 if(exp->instance)
1337 OutputInstance(exp->instance, f);
1338 break;
1339 case 2:
1340 if(exp->constant)
1341 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, exp->constant);
1342 else
1343 printf("");
1344 break;
1345 case 3:
1346 if(exp->string)
1347 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, exp->string);
1348 break;
1349 case 4:
1350 if(exp->op.exp1)
1351 {
1352 OutputExpression(exp->op.exp1, f);
1353 if(exp->op.exp2)
1354 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1355 }
1356 OutputOperator(exp->op.op, f);
1357 if(exp->op.exp2)
1358 {
1359 if(exp->op.exp1 || (exp->op.exp2->type == 4 && !exp->op.exp2->op.exp1 && exp->op.exp2->op.op == exp->op.op))
1360 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1361 OutputExpression(exp->op.exp2, f);
1362 }
1363 break;
1364 case 34:
1365 case 5:
1366 {
1367 struct Expression * expression;
1368
1369 if(exp->type == 34)
1370 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1371 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1372 if(exp->list)
1373 {
1374 for(expression = (*exp->list).first; expression; expression = expression->next)
1375 {
1376 OutputExpression(expression, f);
1377 if(expression->next)
1378 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1379 }
1380 }
1381 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1382 break;
1383 }
1384 case 6:
1385 {
1386 struct Expression * expression;
1387
1388 if(exp->index.exp)
1389 OutputExpression(exp->index.exp, f);
1390 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1391 if(exp->index.index)
1392 for(expression = (*exp->index.index).first; expression; expression = expression->next)
1393 {
1394 OutputExpression(expression, f);
1395 if(expression->next)
1396 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1397 }
1398 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1399 break;
1400 }
1401 case 7:
1402 {
1403 OutputExpression(exp->call.exp, f);
1404 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1405 if(exp->call.arguments)
1406 {
1407 struct Expression * expression;
1408
1409 for(expression = (*exp->call.arguments).first; expression; expression = expression->next)
1410 {
1411 OutputExpression(expression, f);
1412 if(expression->next)
1413 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1414 }
1415 }
1416 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1417 break;
1418 }
1419 case 8:
1420 if(exp->member.exp)
1421 OutputExpression(exp->member.exp, f);
1422 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ".");
1423 if(exp->member.member)
1424 OutputIdentifier(exp->member.member, f);
1425 break;
1426 case 9:
1427 OutputExpression(exp->member.exp, f);
1428 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "->");
1429 OutputIdentifier(exp->member.member, f);
1430 break;
1431 case 10:
1432 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "sizeof(");
1433 OutputTypeName(exp->typeName, f, 0x0);
1434 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1435 break;
1436 case 38:
1437 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__alignof__(");
1438 OutputTypeName(exp->typeName, f, 0x0);
1439 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1440 break;
1441 case 35:
1442 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__extension__ (");
1443 if(exp->initializer.typeName)
1444 OutputTypeName(exp->initializer.typeName, f, 0x0);
1445 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1446 if(exp->initializer.initializer)
1447 OutputInitializer(exp->initializer.initializer, f);
1448 break;
1449 case 11:
1450 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1451 OutputTypeName(exp->cast.typeName, f, 0x0);
1452 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1453 if(exp->cast.exp)
1454 OutputExpression(exp->cast.exp, f);
1455 break;
1456 case 12:
1457 OutputExpression(exp->cond.cond, f);
1458 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ? ");
1459 {
1460 struct Expression * expression;
1461
1462 for(expression = (*exp->cond.exp).first; expression; expression = expression->next)
1463 {
1464 OutputExpression(expression, f);
1465 if(expression->next)
1466 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1467 }
1468 }
1469 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1470 OutputExpression(exp->cond.elseExp, f);
1471 break;
1472 case 36:
1473 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__builtin_va_arg(");
1474 OutputExpression(exp->vaArg.exp, f);
1475 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1476 OutputTypeName(exp->vaArg.typeName, f, 0x0);
1477 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1478 break;
1479 case 37:
1480 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
1481 if(exp->list)
1482 {
1483 struct Expression * expression;
1484
1485 for(expression = (*exp->list).first; expression; expression = expression->next)
1486 {
1487 OutputExpression(expression, f);
1488 if(expression->next)
1489 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1490 }
1491 }
1492 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
1493 break;
1494 }
1495 }
1496
1497 static void OutputAsmField(struct AsmField * field, struct __ecereNameSpace__ecere__com__Instance * f)
1498 {
1499 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, field->command);
1500 if(field->expression)
1501 {
1502 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1503 OutputExpression(field->expression, f);
1504 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1505 }
1506 }
1507
1508 extern char *  strchr(const char * , int);
1509
1510 extern char *  __ecereNameSpace__ecere__sys__StripLastDirectory(char *  string, char *  output);
1511
1512 extern char *  sourceFile;
1513
1514 extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
1515
1516 extern void __ecereNameSpace__ecere__sys__ChangeCh(char *  string, char ch1, char ch2);
1517
1518 static void GetSourceName(char * name, const char * src)
1519 {
1520 name[0] = (char)0;
1521 if(src)
1522 {
1523 if(!strchr(src, '/') && !strchr(src, '\\'))
1524 __ecereNameSpace__ecere__sys__StripLastDirectory(sourceFile, name);
1525 __ecereNameSpace__ecere__sys__PathCat(name, src);
1526 }
1527 else if(sourceFile)
1528 __ecereNameSpace__ecere__sys__PathCat(name, sourceFile);
1529 __ecereNameSpace__ecere__sys__ChangeCh(name, '\\', '/');
1530 }
1531
1532 extern unsigned int inCompiler;
1533
1534 extern char *  GetIncludeFileFromID(int id);
1535
1536 extern char *  outputFile;
1537
1538 extern unsigned int outputLineNumbers;
1539
1540 static void OutputDeclaration(struct Declaration * decl, struct __ecereNameSpace__ecere__com__Instance * f);
1541
1542 extern struct __ecereNameSpace__ecere__sys__OldList *  MkList(void);
1543
1544 extern struct Declarator * SpecDeclFromString(char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
1545
1546 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1547
1548 extern struct Identifier * MkIdentifier(char *  string);
1549
1550 extern struct __ecereNameSpace__ecere__sys__OldList *  CopyList(struct __ecereNameSpace__ecere__sys__OldList *  source, void *  (*  CopyFunction)(void * ));
1551
1552 extern struct Specifier * CopySpecifier(struct Specifier * spec);
1553
1554 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
1555
1556 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
1557
1558 extern struct Specifier * MkSpecifierName(char *  name);
1559
1560 extern void PrintTypeNoConst(struct Type * type, char *  string, unsigned int printName, unsigned int fullName);
1561
1562 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1563
1564 extern void InstDeclPassTypeName(struct TypeName * type, unsigned int param);
1565
1566 extern void FreeTypeName(struct TypeName * typeName);
1567
1568 int __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(struct __ecereNameSpace__ecere__com__Instance * this, char *  format, ...);
1569
1570 static void OutputStatement(struct Statement * stmt, struct __ecereNameSpace__ecere__com__Instance * f)
1571 {
1572 char name[274] = "";
1573 char origName[274] = "";
1574
1575 if(inCompiler)
1576 {
1577 GetSourceName(name, stmt->loc.start.included ? GetIncludeFileFromID(stmt->loc.start.included) : (((void *)0)));
1578 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
1579 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
1580 }
1581 if(inCompiler && outputLineNumbers && stmt->loc.start.line)
1582 {
1583 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.start.line, name);
1584 outputLine += 2;
1585 }
1586 switch(stmt->type)
1587 {
1588 case 14:
1589 OutputDeclaration(stmt->decl, f);
1590 break;
1591 case 0:
1592 OutputIdentifier(stmt->labeled.id, f);
1593 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":\n");
1594 outputLine++;
1595 OutputStatement(stmt->labeled.stmt, f);
1596 break;
1597 case 1:
1598 if(stmt->caseStmt.exp)
1599 {
1600 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "case ");
1601 OutputExpression(stmt->caseStmt.exp, f);
1602 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":\n");
1603 outputLine++;
1604 }
1605 else
1606 {
1607 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "default:\n");
1608 outputLine++;
1609 }
1610 if(stmt->caseStmt.stmt)
1611 OutputStatement(stmt->caseStmt.stmt, f);
1612 break;
1613 case 2:
1614 {
1615 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "{\n");
1616 outputLine++;
1617 if(stmt->compound.declarations)
1618 {
1619 struct Declaration * decl;
1620
1621 for(decl = (*stmt->compound.declarations).first; decl; decl = decl->next)
1622 {
1623 OutputDeclaration(decl, f);
1624 }
1625 }
1626 if(stmt->compound.statements)
1627 {
1628 struct Statement * statement;
1629
1630 if(stmt->compound.declarations)
1631 {
1632 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1633 outputLine++;
1634 }
1635 for(statement = (*stmt->compound.statements).first; statement; statement = statement->next)
1636 {
1637 OutputStatement(statement, f);
1638 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1639 outputLine++;
1640 }
1641 }
1642 if(inCompiler && outputLineNumbers && stmt->loc.end.line)
1643 {
1644 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.end.line, name);
1645 outputLine += 2;
1646 }
1647 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}");
1648 break;
1649 }
1650 case 3:
1651 {
1652 if(stmt->expressions)
1653 {
1654 struct Expression * exp;
1655
1656 for(exp = (*stmt->expressions).first; exp; exp = exp->next)
1657 {
1658 OutputExpression(exp, f);
1659 if(exp->next)
1660 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1661 }
1662 }
1663 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1664 break;
1665 }
1666 case 4:
1667 {
1668 struct Expression * exp;
1669
1670 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "if(");
1671 for(exp = (*stmt->ifStmt.exp).first; exp; exp = exp->next)
1672 {
1673 OutputExpression(exp, f);
1674 if(exp->next)
1675 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1676 }
1677 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1678 outputLine++;
1679 if(stmt->ifStmt.stmt)
1680 OutputStatement(stmt->ifStmt.stmt, f);
1681 if(stmt->ifStmt.elseStmt)
1682 {
1683 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1684 outputLine++;
1685 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "else");
1686 if(stmt->ifStmt.elseStmt->type != 4)
1687 {
1688 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
1689 outputLine++;
1690 }
1691 else
1692 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1693 OutputStatement(stmt->ifStmt.elseStmt, f);
1694 }
1695 break;
1696 }
1697 case 5:
1698 {
1699 struct Expression * exp;
1700
1701 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "switch(");
1702 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1703 {
1704 OutputExpression(exp, f);
1705 if(exp->next)
1706 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1707 }
1708 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1709 outputLine++;
1710 OutputStatement(stmt->switchStmt.stmt, f);
1711 break;
1712 }
1713 case 6:
1714 {
1715 struct Expression * exp;
1716
1717 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "while(");
1718 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1719 {
1720 OutputExpression(exp, f);
1721 if(exp->next)
1722 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1723 }
1724 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1725 outputLine++;
1726 OutputStatement(stmt->whileStmt.stmt, f);
1727 break;
1728 }
1729 case 7:
1730 {
1731 struct Expression * exp;
1732
1733 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "do\n");
1734 outputLine++;
1735 OutputStatement(stmt->whileStmt.stmt, f);
1736 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "while(");
1737 for(exp = (*stmt->switchStmt.exp).first; exp; exp = exp->next)
1738 {
1739 OutputExpression(exp, f);
1740 if(exp->next)
1741 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1742 }
1743 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ");");
1744 break;
1745 }
1746 case 8:
1747 {
1748 struct Expression * exp;
1749
1750 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "for(");
1751 OutputStatement(stmt->forStmt.init, f);
1752 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1753 OutputStatement(stmt->forStmt.check, f);
1754 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1755 if(stmt->forStmt.increment)
1756 {
1757 if(inCompiler && outputLineNumbers && stmt->loc.end.line)
1758 {
1759 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", stmt->loc.end.line, name);
1760 outputLine += 2;
1761 }
1762 for(exp = (*stmt->forStmt.increment).first; exp; exp = exp->next)
1763 {
1764 OutputExpression(exp, f);
1765 if(exp->next)
1766 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1767 }
1768 }
1769 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")\n");
1770 outputLine++;
1771 OutputStatement(stmt->forStmt.stmt, f);
1772 break;
1773 }
1774 case 9:
1775 {
1776 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "goto ");
1777 OutputIdentifier(stmt->gotoStmt.id, f);
1778 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1779 break;
1780 }
1781 case 10:
1782 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "continue;");
1783 break;
1784 case 11:
1785 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "break;");
1786 break;
1787 case 12:
1788 {
1789 struct Expression * exp;
1790
1791 if(inCompiler && memoryGuard)
1792 {
1793 struct Expression * exp = stmt->expressions ? (*stmt->expressions).last : (((void *)0));
1794
1795 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{ ");
1796 if(exp && exp->expType)
1797 {
1798 char string[1024] = "";
1799 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1800 struct Declarator * decl;
1801 struct TypeName * typeName;
1802
1803 if(exp->expType->kind == 20)
1804 {
1805 if(exp->expType->templateParameter->dataTypeString)
1806 decl = SpecDeclFromString(exp->expType->templateParameter->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1807 else if(exp->expType->templateParameter->dataType)
1808 {
1809 (__ecereNameSpace__ecere__com__eSystem_Delete(specs), specs = 0);
1810 specs = CopyList(exp->expType->templateParameter->dataType->specifiers, CopySpecifier);
1811 decl = PlugDeclarator(exp->expType->templateParameter->dataType->decl, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1812 }
1813 else
1814 {
1815 ListAdd(specs, MkSpecifierName("uint64"));
1816 decl = MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal"));
1817 }
1818 }
1819 else
1820 {
1821 PrintTypeNoConst(exp->expType, string, exp->expType->kind == 18 ? 0x1 : 0x0, 0x1);
1822 decl = SpecDeclFromString(string, specs, MkDeclaratorIdentifier(MkIdentifier("__ecereReturnVal")));
1823 }
1824 typeName = MkTypeName(specs, decl);
1825 InstDeclPassTypeName(typeName, 0x0);
1826 OutputTypeName(typeName, f, 0x0);
1827 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, ";");
1828 FreeTypeName(typeName);
1829 }
1830 }
1831 if(!memoryGuard)
1832 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "return ");
1833 else
1834 {
1835 struct Expression * exp = stmt->expressions ? (*stmt->expressions).last : (((void *)0));
1836
1837 if(exp && exp->expType)
1838 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "__ecereReturnVal = ");
1839 }
1840 if(stmt->expressions)
1841 {
1842 for(exp = (*stmt->expressions).first; exp; exp = exp->next)
1843 {
1844 OutputExpression(exp, f);
1845 if(exp->next)
1846 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
1847 }
1848 }
1849 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
1850 if(inCompiler && memoryGuard)
1851 {
1852 struct Expression * exp = stmt->expressions ? (struct Expression *)(*stmt->expressions).last : (((void *)0));
1853
1854 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, " __ecereNameSpace__ecere__com__MemoryGuard_PopLoc();");
1855 if(exp && exp->expType)
1856 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "return __ecereReturnVal;");
1857 else
1858 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "return;");
1859 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "}");
1860 }
1861 break;
1862 }
1863 case 13:
1864 {
1865 struct AsmField * field;
1866
1867 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__asm__ ");
1868 if(stmt->asmStmt.spec)
1869 OutputSpecifier(stmt->asmStmt.spec, f, 0x0);
1870 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1871 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, stmt->asmStmt.statements);
1872 if(stmt->asmStmt.inputFields || stmt->asmStmt.outputFields || stmt->asmStmt.clobberedFields)
1873 {
1874 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1875 if(stmt->asmStmt.inputFields)
1876 {
1877 for(field = (*stmt->asmStmt.inputFields).first; field; field = field->next)
1878 {
1879 if(field->prev)
1880 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1881 OutputAsmField(field, f);
1882 }
1883 }
1884 }
1885 if(stmt->asmStmt.outputFields || stmt->asmStmt.clobberedFields)
1886 {
1887 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1888 if(stmt->asmStmt.outputFields)
1889 {
1890 for(field = (*stmt->asmStmt.outputFields).first; field; field = field->next)
1891 {
1892 if(field->prev)
1893 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1894 OutputAsmField(field, f);
1895 }
1896 }
1897 }
1898 if(stmt->asmStmt.clobberedFields)
1899 {
1900 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ":");
1901 for(field = (*stmt->asmStmt.clobberedFields).first; field; field = field->next)
1902 {
1903 if(field->prev)
1904 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ",");
1905 OutputAsmField(field, f);
1906 }
1907 }
1908 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ");\n");
1909 outputLine++;
1910 break;
1911 }
1912 }
1913 if(inCompiler && outputLineNumbers && stmt->loc.start.line)
1914 {
1915 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", outputLine + 2, origName);
1916 outputLine += 2;
1917 }
1918 }
1919
1920 static void OutputPointer(struct Pointer * ptr, struct __ecereNameSpace__ecere__com__Instance * f)
1921 {
1922 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "*");
1923 if(ptr->qualifiers)
1924 {
1925 struct Specifier * spec;
1926
1927 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1928 for(spec = (*ptr->qualifiers).first; spec; spec = spec->next)
1929 {
1930 OutputSpecifier(spec, f, 0x0);
1931 if(spec->next)
1932 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1933 }
1934 }
1935 if(ptr->pointer)
1936 {
1937 OutputPointer(ptr->pointer, f);
1938 }
1939 }
1940
1941 static void OutputAttrib(struct Attrib * attr, struct __ecereNameSpace__ecere__com__Instance * f);
1942
1943 static void OutputExtDecl(struct ExtDecl * extDecl, struct __ecereNameSpace__ecere__com__Instance * f);
1944
1945 extern void ProcessExpressionType(struct Expression * exp);
1946
1947 extern void ComputeExpression(struct Expression * exp);
1948
1949 static void OutputDeclarator(struct Declarator * decl, struct __ecereNameSpace__ecere__com__Instance * f)
1950 {
1951 switch(decl->type)
1952 {
1953 case 0:
1954 if(decl->declarator)
1955 {
1956 OutputDeclarator(decl->declarator, f);
1957 }
1958 if(decl->structDecl.exp)
1959 {
1960 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1961 OutputExpression(decl->structDecl.exp, f);
1962 }
1963 if(decl->structDecl.posExp)
1964 {
1965 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
1966 OutputExpression(decl->structDecl.posExp, f);
1967 }
1968 if(decl->structDecl.attrib)
1969 {
1970 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1971 OutputAttrib(decl->structDecl.attrib, f);
1972 }
1973 break;
1974 case 1:
1975 OutputIdentifier(decl->identifier, f);
1976 break;
1977 case 2:
1978 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
1979 OutputDeclarator(decl->declarator, f);
1980 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
1981 break;
1982 case 6:
1983 if(decl->extended.extended)
1984 OutputExtDecl(decl->extended.extended, f);
1985 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1986 OutputDeclarator(decl->declarator, f);
1987 break;
1988 case 7:
1989 OutputDeclarator(decl->declarator, f);
1990 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
1991 if(decl->extended.extended)
1992 OutputExtDecl(decl->extended.extended, f);
1993 break;
1994 case 3:
1995 if(decl->declarator)
1996 {
1997 OutputDeclarator(decl->declarator, f);
1998 }
1999 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "[");
2000 if(decl->array.exp)
2001 {
2002 ProcessExpressionType(decl->array.exp);
2003 ComputeExpression(decl->array.exp);
2004 OutputExpression(decl->array.exp, f);
2005 }
2006 else if(decl->array.enumClass)
2007 {
2008 struct Symbol * _class = decl->array.enumClass->symbol;
2009
2010 if(_class && _class->registered)
2011 {
2012 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "%d", (int)__ecereNameSpace__ecere__com__eClass_GetProperty(_class->registered, "enumSize"));
2013 }
2014 }
2015 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "]");
2016 break;
2017 case 4:
2018 {
2019 struct TypeName * param;
2020
2021 if(decl->declarator)
2022 OutputDeclarator(decl->declarator, f);
2023 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "(");
2024 if(decl->function.parameters && (*decl->function.parameters).first)
2025 {
2026 for(param = (*decl->function.parameters).first; param; param = param->next)
2027 {
2028 OutputTypeName(param, f, 0x0);
2029 if(param->next)
2030 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2031 }
2032 }
2033 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2034 break;
2035 }
2036 case 5:
2037 if(decl->pointer.pointer)
2038 OutputPointer(decl->pointer.pointer, f);
2039 if(decl->declarator)
2040 {
2041 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2042 OutputDeclarator(decl->declarator, f);
2043 }
2044 break;
2045 }
2046 }
2047
2048 static void OutputEnumerator(struct Enumerator * enumerator, struct __ecereNameSpace__ecere__com__Instance * f)
2049 {
2050 OutputIdentifier(enumerator->id, f);
2051 if(enumerator->exp)
2052 {
2053 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2054 OutputExpression(enumerator->exp, f);
2055 }
2056 }
2057
2058 static void OutputAttribute(struct Attribute * attr, struct __ecereNameSpace__ecere__com__Instance * f)
2059 {
2060 if(attr->attr)
2061 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, attr->attr);
2062 if(attr->exp)
2063 {
2064 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2065 OutputExpression(attr->exp, f);
2066 }
2067 }
2068
2069 static void OutputAttrib(struct Attrib * attr, struct __ecereNameSpace__ecere__com__Instance * f)
2070 {
2071 switch(attr->type)
2072 {
2073 case ATTRIB:
2074 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute__((");
2075 break;
2076 case __ATTRIB:
2077 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute((");
2078 break;
2079 case ATTRIB_DEP:
2080 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__attribute_deprecated__((");
2081 break;
2082 }
2083 if(attr->attribs)
2084 {
2085 struct Attribute * attrib;
2086
2087 for(attrib = (*attr->attribs).first; attrib; attrib = attrib->next)
2088 {
2089 if(attrib->prev)
2090 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2091 OutputAttribute(attrib, f);
2092 }
2093 }
2094 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "))");
2095 }
2096
2097 static void OutputExtDecl(struct ExtDecl * extDecl, struct __ecereNameSpace__ecere__com__Instance * f)
2098 {
2099 if(extDecl->type == 0 && extDecl->s)
2100 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, extDecl->s);
2101 else if(extDecl->type == 1)
2102 OutputAttrib(extDecl->attr, f);
2103 }
2104
2105 extern struct Symbol * FindClass(char *  name);
2106
2107 static void OutputClassDef(struct ClassDef * def, struct __ecereNameSpace__ecere__com__Instance * f);
2108
2109 static void OutputSpecifier(struct Specifier * spec, struct __ecereNameSpace__ecere__com__Instance * f, unsigned int typeName)
2110 {
2111 switch(spec->type)
2112 {
2113 case 0:
2114 switch(spec->specifier)
2115 {
2116 case TYPEDEF:
2117 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typedef");
2118 break;
2119 case EXTERN:
2120 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "extern");
2121 break;
2122 case STATIC:
2123 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "static");
2124 break;
2125 case AUTO:
2126 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "auto");
2127 break;
2128 case REGISTER:
2129 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "register");
2130 break;
2131 case CONST:
2132 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "const");
2133 break;
2134 case VOLATILE:
2135 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "volatile");
2136 break;
2137 case VOID:
2138 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "void");
2139 break;
2140 case CHAR:
2141 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "char");
2142 break;
2143 case SHORT:
2144 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "short");
2145 break;
2146 case INT:
2147 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "int");
2148 break;
2149 case UINT:
2150 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, typeName ? "uint" : "unsigned int");
2151 break;
2152 case INT64:
2153 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, typeName ? "int64" : "long long");
2154 break;
2155 case VALIST:
2156 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__builtin_va_list");
2157 break;
2158 case LONG:
2159 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "long");
2160 break;
2161 case FLOAT:
2162 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "float");
2163 break;
2164 case DOUBLE:
2165 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "double");
2166 break;
2167 case SIGNED:
2168 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "signed");
2169 break;
2170 case UNSIGNED:
2171 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "unsigned");
2172 break;
2173 case TYPED_OBJECT:
2174 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
2175 break;
2176 case ANY_OBJECT:
2177 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "any_object");
2178 break;
2179 case CLASS:
2180 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class");
2181 break;
2182 case THISCLASS:
2183 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "thisclass");
2184 break;
2185 }
2186 break;
2187 case 5:
2188 if(spec->extDecl)
2189 OutputExtDecl(spec->extDecl, f);
2190 break;
2191 case 1:
2192 if(spec->name && !strcmp(spec->name, "class"))
2193 {
2194 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "typed_object");
2195 }
2196 else
2197 {
2198 struct Symbol * symbol = spec->symbol;
2199
2200 if(!symbol && spec->name)
2201 symbol = FindClass(spec->name);
2202 if(symbol)
2203 {
2204 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, symbol->string ? symbol->string : "(null)");
2205 }
2206 else if(spec->name)
2207 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, spec->name);
2208 }
2209 break;
2210 case 2:
2211 {
2212 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "enum");
2213 if(spec->id)
2214 {
2215 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2216 OutputIdentifier(spec->id, f);
2217 }
2218 if(spec->list)
2219 {
2220 struct Enumerator * enumerator;
2221
2222 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2223 outputLine += 2;
2224 for(enumerator = (*spec->list).first; enumerator; enumerator = enumerator->next)
2225 {
2226 OutputEnumerator(enumerator, f);
2227 if(enumerator->next)
2228 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2229 }
2230 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n}");
2231 outputLine++;
2232 }
2233 break;
2234 }
2235 case 3:
2236 case 4:
2237 {
2238 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, (spec->type == 3) ? "struct" : "union");
2239 if(spec->extDeclStruct)
2240 {
2241 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2242 OutputExtDecl(spec->extDeclStruct, f);
2243 }
2244 if(spec->id)
2245 {
2246 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2247 OutputIdentifier(spec->id, f);
2248 }
2249 if(spec->definitions)
2250 {
2251 struct ClassDef * def;
2252
2253 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2254 outputLine += 2;
2255 for(def = (*spec->definitions).first; def; def = def->next)
2256 {
2257 OutputClassDef(def, f);
2258 }
2259 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "} __attribute__ ((gcc_struct))");
2260 }
2261 break;
2262 }
2263 case 6:
2264 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "__typeof(");
2265 OutputExpression(spec->expression, f);
2266 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2267 break;
2268 case 7:
2269 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "subclass(");
2270 OutputSpecifier(spec->_class, f, 0x0);
2271 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ")");
2272 break;
2273 case 8:
2274 OutputIdentifier(spec->templateParameter->identifier, f);
2275 break;
2276 }
2277 }
2278
2279 static void OutputInitializer(struct Initializer * initializer, struct __ecereNameSpace__ecere__com__Instance * f)
2280 {
2281 char name[274] = "";
2282 char origName[274] = "";
2283
2284 if(inCompiler)
2285 {
2286 GetSourceName(name, initializer->loc.start.included ? GetIncludeFileFromID(initializer->loc.start.included) : (((void *)0)));
2287 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
2288 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
2289 }
2290 switch(initializer->type)
2291 {
2292 case 1:
2293 {
2294 struct Initializer * init;
2295
2296 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2297 outputLine += 2;
2298 if(inCompiler && outputLineNumbers && initializer->loc.start.line)
2299 {
2300 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", initializer->loc.start.line, name);
2301 outputLine += 2;
2302 }
2303 for(init = (*initializer->list).first; init; init = init->next)
2304 {
2305 OutputInitializer(init, f);
2306 if(init->next)
2307 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2308 }
2309 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n}");
2310 if(inCompiler && outputLineNumbers && initializer->loc.start.line)
2311 {
2312 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", initializer->loc.start.line, name);
2313 outputLine += 2;
2314 }
2315 outputLine++;
2316 break;
2317 }
2318 case 0:
2319 if(initializer->exp)
2320 OutputExpression(initializer->exp, f);
2321 break;
2322 }
2323 }
2324
2325 static void OutputInitDeclarator(struct InitDeclarator * decl, struct __ecereNameSpace__ecere__com__Instance * f)
2326 {
2327 OutputDeclarator(decl->declarator, f);
2328 if(decl->initializer)
2329 {
2330 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2331 OutputInitializer(decl->initializer, f);
2332 }
2333 }
2334
2335 static void OutputDeclaration(struct Declaration * decl, struct __ecereNameSpace__ecere__com__Instance * f)
2336 {
2337 struct Specifier * spec;
2338 char origName[274] = "";
2339
2340 switch(decl->type)
2341 {
2342 case 1:
2343 {
2344 struct InitDeclarator * d;
2345
2346 if(inCompiler)
2347 {
2348 __ecereNameSpace__ecere__sys__PathCat(origName, outputFile);
2349 __ecereNameSpace__ecere__sys__ChangeCh(origName, '\\', '/');
2350 }
2351 if(decl->declarators && (*decl->declarators).first)
2352 {
2353 for(d = (*decl->declarators).first; d; d = d->next)
2354 if(d->initializer)
2355 {
2356 char name[274] = "";
2357
2358 GetSourceName(name, decl->loc.start.included ? GetIncludeFileFromID(decl->loc.start.included) : (((void *)0)));
2359 if(inCompiler && outputLineNumbers && decl->loc.start.line)
2360 {
2361 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", decl->loc.start.line, name);
2362 outputLine += 2;
2363 }
2364 break;
2365 }
2366 }
2367 if(decl->specifiers)
2368 {
2369 unsigned int inTypeDef = 0x0;
2370
2371 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
2372 {
2373 if(spec->type == 0 && spec->specifier == TYPEDEF)
2374 inTypeDef = 0x1;
2375 OutputSpecifier(spec, f, inTypeDef && !spec->next);
2376 if(spec->next)
2377 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2378 }
2379 }
2380 if(decl->declarators && (*decl->declarators).first)
2381 {
2382 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2383 for(d = (*decl->declarators).first; d; d = d->next)
2384 {
2385 OutputInitDeclarator(d, f);
2386 if(d->next)
2387 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2388 }
2389 }
2390 break;
2391 }
2392 case 0:
2393 {
2394 if(decl->specifiers)
2395 {
2396 for(spec = (*decl->specifiers).first; spec; spec = spec->next)
2397 {
2398 OutputSpecifier(spec, f, 0x0);
2399 if(spec->next)
2400 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2401 }
2402 }
2403 if(decl->declarators)
2404 {
2405 struct Declarator * d;
2406
2407 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2408 for(d = (*decl->declarators).first; d; d = d->next)
2409 {
2410 OutputDeclarator(d, f);
2411 if(d->next)
2412 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2413 }
2414 }
2415 if(decl->extStorage)
2416 {
2417 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2418 OutputSpecifier(decl->extStorage, f, 0x0);
2419 }
2420 break;
2421 }
2422 case 2:
2423 if(decl->inst)
2424 {
2425 OutputInstance(decl->inst, f);
2426 }
2427 break;
2428 case 3:
2429 return ;
2430 }
2431 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n");
2432 outputLine++;
2433 if(inCompiler && outputLineNumbers && decl->loc.start.line && decl->type == 1)
2434 {
2435 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "\n#line %d \"%s\"\n", outputLine + 2, origName);
2436 outputLine += 2;
2437 }
2438 }
2439
2440 static struct FunctionDefinition * curFunction;
2441
2442 extern struct Identifier * GetDeclId(struct Declarator * decl);
2443
2444 static void OutputFunction(struct FunctionDefinition * func, struct __ecereNameSpace__ecere__com__Instance * f)
2445 {
2446 struct FunctionDefinition * oldFunc = curFunction;
2447
2448 curFunction = func;
2449 if(func->specifiers)
2450 {
2451 struct Specifier * spec;
2452
2453 for(spec = (*func->specifiers).first; spec; spec = spec->next)
2454 {
2455 OutputSpecifier(spec, f, 0x0);
2456 if(spec->next)
2457 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2458 }
2459 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2460 }
2461 if(func->declarator)
2462 OutputDeclarator(func->declarator, f);
2463 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2464 outputLine++;
2465 if(func->declarations)
2466 {
2467 struct Declaration * decl;
2468
2469 for(decl = (*func->declarations).first; decl; decl = decl->next)
2470 {
2471 OutputDeclaration(decl, f);
2472 }
2473 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2474 outputLine++;
2475 }
2476 if(func->body)
2477 {
2478 if(inCompiler && memoryGuard)
2479 {
2480 char name[1024] = "";
2481 struct Identifier * id = GetDeclId(func->declarator);
2482
2483 GetSourceName(name, func->loc.start.included ? GetIncludeFileFromID(func->loc.start.included) : (((void *)0)));
2484 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "{\n");
2485 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereNameSpace__ecere__com__MemoryGuard_PushLoc(\"%s:%s\");\n", name, id->string);
2486 outputLine += 2;
2487 }
2488 OutputStatement(func->body, f);
2489 if(inCompiler && memoryGuard)
2490 {
2491 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "   __ecereNameSpace__ecere__com__MemoryGuard_PopLoc();\n");
2492 __ecereMethod___ecereNameSpace__ecere__sys__File_Printf(f, "}\n");
2493 outputLine += 2;
2494 }
2495 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2496 outputLine++;
2497 }
2498 curFunction = oldFunc;
2499 }
2500
2501 static void OutputMemberInit(struct MemberInit * init, struct __ecereNameSpace__ecere__com__Instance * f)
2502 {
2503 if(init->identifiers)
2504 {
2505 if((*init->identifiers).count > 1)
2506 {
2507 struct Identifier * id;
2508
2509 for(id = (*init->identifiers).first; id; id = id->next)
2510 {
2511 OutputIdentifier(id, f);
2512 if(id->next)
2513 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ".");
2514 }
2515 }
2516 else if((*init->identifiers).first)
2517 OutputIdentifier((*init->identifiers).first, f);
2518 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " = ");
2519 }
2520 if(init->initializer)
2521 OutputInitializer(init->initializer, f);
2522 }
2523
2524 static void OutputClassFunction(struct ClassFunction * func, struct __ecereNameSpace__ecere__com__Instance * f);
2525
2526 static void OutputMembersInit(struct MembersInit * init, struct __ecereNameSpace__ecere__com__Instance * f)
2527 {
2528 switch(init->type)
2529 {
2530 case 0:
2531 {
2532 struct MemberInit * member;
2533
2534 if(init->dataMembers)
2535 {
2536 for(member = (*init->dataMembers).first; member; member = member->next)
2537 {
2538 OutputMemberInit(member, f);
2539 if(member->next)
2540 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2541 }
2542 }
2543 break;
2544 }
2545 case 1:
2546 OutputClassFunction(init->function, f);
2547 break;
2548 }
2549 }
2550
2551 static void OutputInstance(struct Instantiation * inst, struct __ecereNameSpace__ecere__com__Instance * f)
2552 {
2553 if(inst->_class)
2554 OutputSpecifier(inst->_class, f, 0x0);
2555 if(inst->exp)
2556 {
2557 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2558 OutputExpression(inst->exp, f);
2559 }
2560 if(inst->members && (*inst->members).count > 1)
2561 {
2562 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2563 outputLine += 2;
2564 }
2565 else if(inst->members)
2566 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " { ");
2567 else
2568 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "{");
2569 if(inst->members)
2570 {
2571 struct MembersInit * init;
2572
2573 for(init = (*inst->members).first; init; init = init->next)
2574 {
2575 OutputMembersInit(init, f);
2576 if(init->type == 0 && init->next)
2577 {
2578 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n");
2579 outputLine++;
2580 }
2581 }
2582 }
2583 if(inst->members)
2584 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " }");
2585 else
2586 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}");
2587 }
2588
2589 static void OutputClassFunction(struct ClassFunction * func, struct __ecereNameSpace__ecere__com__Instance * f)
2590 {
2591 if(func->specifiers)
2592 {
2593 struct Specifier * spec;
2594
2595 for(spec = (*func->specifiers).first; spec; spec = spec->next)
2596 {
2597 OutputSpecifier(spec, f, 0x0);
2598 if(spec->next)
2599 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2600 }
2601 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " ");
2602 }
2603 if(func->declarator)
2604 OutputDeclarator(func->declarator, f);
2605 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2606 outputLine++;
2607 if(func->declarations)
2608 {
2609 struct Declaration * decl;
2610
2611 for(decl = (*func->declarations).first; decl; decl = decl->next)
2612 {
2613 OutputDeclaration(decl, f);
2614 }
2615 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2616 outputLine++;
2617 }
2618 if(func->body)
2619 {
2620 OutputStatement(func->body, f);
2621 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2622 outputLine++;
2623 }
2624 else
2625 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
2626 }
2627
2628 static void OutputClassDef(struct ClassDef * def, struct __ecereNameSpace__ecere__com__Instance * f)
2629 {
2630 switch(def->type)
2631 {
2632 case 2:
2633 if(def->decl)
2634 {
2635 OutputDeclaration(def->decl, f);
2636 if(def->next && def->next->type != 2)
2637 {
2638 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2639 outputLine++;
2640 }
2641 }
2642 break;
2643 case 1:
2644 {
2645 struct MemberInit * init;
2646
2647 for(init = (*def->defProperties).first; init; init = init->next)
2648 {
2649 OutputMemberInit(init, f);
2650 if(init->next)
2651 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ", ");
2652 }
2653 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";\n\n");
2654 outputLine += 2;
2655 break;
2656 }
2657 case 0:
2658 OutputClassFunction(def->function, f);
2659 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2660 outputLine++;
2661 break;
2662 }
2663 }
2664
2665 static void OutputClass(struct ClassDefinition * _class, struct __ecereNameSpace__ecere__com__Instance * f)
2666 {
2667 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "class ");
2668 OutputSpecifier(_class->_class, f, 0x0);
2669 if(_class->baseSpecs)
2670 {
2671 struct Specifier * spec;
2672
2673 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, " : ");
2674 for(spec = (*_class->baseSpecs).first; spec; spec = spec->next)
2675 {
2676 OutputSpecifier(spec, f, 0x0);
2677 }
2678 }
2679 if(_class->definitions)
2680 {
2681 struct ClassDef * def;
2682
2683 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n{\n");
2684 outputLine += 2;
2685 for(def = (*_class->definitions).first; def; def = def->next)
2686 {
2687 OutputClassDef(def, f);
2688 }
2689 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "}\n");
2690 outputLine++;
2691 }
2692 else
2693 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, ";");
2694 }
2695
2696 void OutputTree(struct __ecereNameSpace__ecere__sys__OldList * ast, struct __ecereNameSpace__ecere__com__Instance * f)
2697 {
2698 struct External * external;
2699
2700 outputLine = 31;
2701 for(external = ast->first; external; external = external->next)
2702 {
2703 switch(external->type)
2704 {
2705 case 0:
2706 OutputFunction(external->function, f);
2707 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2708 outputLine++;
2709 break;
2710 case 1:
2711 OutputDeclaration(external->declaration, f);
2712 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2713 outputLine++;
2714 break;
2715 case 2:
2716 OutputClass(external->_class, f);
2717 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, const char *  string))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Puts])(f, "\n");
2718 outputLine++;
2719 break;
2720 }
2721 }
2722 }
2723
2724 extern char *  __ecereNameSpace__ecere__sys__TrimRSpaces(char *  string, char *  output);
2725
2726 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
2727
2728 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
2729
2730 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_GetSize;
2731
2732 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
2733
2734 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
2735
2736 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
2737
2738 char * StringFromSpecDecl(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl)
2739 {
2740 char * string;
2741 struct TypeName * typeName = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
2742 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
2743 unsigned int size;
2744
2745 typeName->qualifiers = specs;
2746 typeName->declarator = decl;
2747 OutputTypeName(typeName, f, 0x1);
2748 ((typeName ? (__ecereClass_TypeName->Destructor ? __ecereClass_TypeName->Destructor(typeName) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(typeName)) : 0), typeName = 0);
2749 size = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_GetSize])(f);
2750 string = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (size + 1));
2751 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
2752 ((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);
2753 string[size] = '\0';
2754 __ecereNameSpace__ecere__sys__TrimRSpaces(string, string);
2755 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
2756 return string;
2757 }
2758
2759 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
2760
2761 struct __ecereNameSpace__ecere__com__GlobalFunction;
2762
2763 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);
2764
2765 void __ecereRegisterModule_output(struct __ecereNameSpace__ecere__com__Instance * module)
2766 {
2767 struct __ecereNameSpace__ecere__com__Class * class;
2768
2769 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetMemoryGuard", "void SetMemoryGuard(bool b)", SetMemoryGuard, module, 1);
2770 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetMemoryGuard", "bool GetMemoryGuard(void)", GetMemoryGuard, module, 1);
2771 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputTypeName", "void OutputTypeName(TypeName type, ecere::sys::File f, bool typeName)", OutputTypeName, module, 1);
2772 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputExpression", "void OutputExpression(Expression exp, ecere::sys::File f)", OutputExpression, module, 1);
2773 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OutputTree", "void OutputTree(ecere::sys::OldList ast, ecere::sys::File f)", OutputTree, module, 1);
2774 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("StringFromSpecDecl", "char * StringFromSpecDecl(ecere::sys::OldList specs, Declarator decl)", StringFromSpecDecl, module, 1);
2775 }
2776
2777 void __ecereUnregisterModule_output(struct __ecereNameSpace__ecere__com__Instance * module)
2778 {
2779
2780 }
2781