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