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