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