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