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