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