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