compiler/libec: Added grammar rule for __builtin_offset
[sdk] / compiler / bootstrap / libec / bootstrap / pass16.c
1 /* Code generated from eC source file: pass16.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 #if defined(_WIN32)
39 #   if defined(__GNUC__) || defined(__TINYC__)
40 #      define ecere_stdcall __attribute__((__stdcall__))
41 #      define ecere_gcc_struct __attribute__((gcc_struct))
42 #   else
43 #      define ecere_stdcall __stdcall
44 #      define ecere_gcc_struct
45 #   endif
46 #else
47 #   define ecere_stdcall
48 #   define ecere_gcc_struct
49 #endif
50 #include <stdint.h>
51 #include <sys/types.h>
52 enum yytokentype
53 {
54 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, BUILTIN_OFFSETOF = 374
55 };
56
57 extern unsigned int inCompiler;
58
59 extern const char *  outputFile;
60
61 static int declTempCount;
62
63 struct __ecereNameSpace__ecere__sys__OldList
64 {
65 void *  first;
66 void *  last;
67 int count;
68 unsigned int offset;
69 unsigned int circ;
70 } ecere_gcc_struct;
71
72 struct __ecereNameSpace__ecere__sys__BTNode;
73
74 struct __ecereNameSpace__ecere__com__DataValue
75 {
76 union
77 {
78 char c;
79 unsigned char uc;
80 short s;
81 unsigned short us;
82 int i;
83 unsigned int ui;
84 void *  p;
85 float f;
86 double d;
87 long long i64;
88 uint64 ui64;
89 } ecere_gcc_struct __anon1;
90 } ecere_gcc_struct;
91
92 struct __ecereNameSpace__ecere__com__SerialBuffer
93 {
94 unsigned char *  _buffer;
95 unsigned int count;
96 unsigned int _size;
97 unsigned int pos;
98 } ecere_gcc_struct;
99
100 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
101
102 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
103
104 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
105
106 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
107
108 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void *  memory);
109
110 struct Pointer;
111
112 struct TypeName;
113
114 struct Attrib;
115
116 struct ExtDecl;
117
118 struct Attribute;
119
120 struct TemplateParameter;
121
122 struct TemplateArgument;
123
124 struct TemplateDatatype;
125
126 struct DBTableEntry;
127
128 struct DBIndexItem;
129
130 struct DBTableDef;
131
132 struct CodePosition
133 {
134 int line;
135 int charPos;
136 int pos;
137 int included;
138 } ecere_gcc_struct;
139
140 extern char *  __ecereNameSpace__ecere__sys__GetLastDirectory(const char *  string, char *  output);
141
142 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char *  string);
143
144 extern void FixModuleName(char *  moduleName);
145
146 extern int sprintf(char * , const char * , ...);
147
148 extern void *  memcpy(void * , const void * , size_t size);
149
150 extern char *  __ecereNameSpace__ecere__sys__CopyString(const char *  string);
151
152 extern char *  strcpy(char * , const char * );
153
154 extern void FullClassNameCat(char *  output, const char *  className, unsigned int includeTemplateParams);
155
156 struct __ecereNameSpace__ecere__com__LinkList
157 {
158 void * first;
159 void * last;
160 int count;
161 } ecere_gcc_struct;
162
163 extern int strcmp(const char * , const char * );
164
165 extern void Compiler_Error(const char *  format, ...);
166
167 extern const char *  __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char *  string, const char *  stringAndContext);
168
169 struct __ecereNameSpace__ecere__com__LinkElement
170 {
171 void * prev;
172 void * next;
173 } ecere_gcc_struct;
174
175 struct __ecereNameSpace__ecere__com__GlobalFunction;
176
177 struct __ecereNameSpace__ecere__com__IteratorPointer;
178
179 extern struct __ecereNameSpace__ecere__sys__OldList *  MkList(void);
180
181 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
182
183 extern struct __ecereNameSpace__ecere__sys__OldList *  ast;
184
185 extern struct __ecereNameSpace__ecere__sys__OldList *  MkListOne(void *  item);
186
187 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (*  FreeFunction)(void * ));
188
189 extern void ListAddFront(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
190
191 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
192
193 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
194
195 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
196
197 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void *  prevItem, void *  item);
198
199 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
200
201 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
202
203 struct Location
204 {
205 struct CodePosition start;
206 struct CodePosition end;
207 } ecere_gcc_struct;
208
209 extern struct Location yylloc;
210
211 struct External;
212
213 extern struct External * curExternal;
214
215 static struct External * createInstancesExternal;
216
217 static struct External * destroyInstancesExternal;
218
219 extern struct External * DeclareStruct(struct External * neededBy, const char *  name, unsigned int skipNoHead, unsigned int needDereference);
220
221 struct TopoEdge
222 {
223 struct __ecereNameSpace__ecere__com__LinkElement in;
224 struct __ecereNameSpace__ecere__com__LinkElement out;
225 struct External * from;
226 struct External * to;
227 unsigned int breakable;
228 } ecere_gcc_struct;
229
230 struct Statement;
231
232 static struct Statement * curCompound;
233
234 static struct Statement * createInstancesBody;
235
236 static struct Statement * destroyInstancesBody;
237
238 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
239
240 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
241
242 struct Context;
243
244 extern struct Context * globalContext;
245
246 extern struct Context * curContext;
247
248 extern struct Context * PushContext(void);
249
250 extern void PopContext(struct Context * ctx);
251
252 struct ModuleImport;
253
254 extern struct ModuleImport * mainModule;
255
256 struct ModuleImport
257 {
258 struct ModuleImport * prev;
259 struct ModuleImport * next;
260 char *  name;
261 struct __ecereNameSpace__ecere__sys__OldList classes;
262 struct __ecereNameSpace__ecere__sys__OldList functions;
263 int importType;
264 int importAccess;
265 } ecere_gcc_struct;
266
267 struct Expression;
268
269 extern struct Expression * CopyExpression(struct Expression * exp);
270
271 extern struct Expression * MkExpConstant(const char *  string);
272
273 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
274
275 extern void ProcessExpressionType(struct Expression * exp);
276
277 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
278
279 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
280
281 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
282
283 extern void FreeExpression(struct Expression * exp);
284
285 extern struct Expression * QMkExpId(const char *  id);
286
287 extern void CheckTemplateTypes(struct Expression * exp);
288
289 static void ProcessExpression(struct Expression *  exp);
290
291 void ProcessExpressionInstPass(struct Expression * exp)
292 {
293 ProcessExpression(exp);
294 }
295
296 struct Declaration;
297
298 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
299
300 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
301
302 static struct Declaration * curDecl;
303
304 struct __ecereNameSpace__ecere__com__Class;
305
306 struct __ecereNameSpace__ecere__com__Instance
307 {
308 void * *  _vTbl;
309 struct __ecereNameSpace__ecere__com__Class * _class;
310 int _refCount;
311 } ecere_gcc_struct;
312
313 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
314
315 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
316
317 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
318
319 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
320
321 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
322
323 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
324
325 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove;
326
327 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext;
328
329 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Add;
330
331 struct __ecereNameSpace__ecere__com__Property;
332
333 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
334
335 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);
336
337 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
338
339 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
340
341 extern void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char *  setName, char *  getName);
342
343 struct Specifier;
344
345 extern struct Specifier * MkSpecifier(int specifier);
346
347 extern struct Specifier * MkSpecifierName(const char *  name);
348
349 extern struct Specifier * CopySpecifier(struct Specifier * spec);
350
351 extern struct Expression * MkExpClassSize(struct Specifier * _class);
352
353 struct Identifier;
354
355 struct Statement
356 {
357 struct Statement * prev;
358 struct Statement * next;
359 struct Location loc;
360 int type;
361 union
362 {
363 struct __ecereNameSpace__ecere__sys__OldList *  expressions;
364 struct
365 {
366 struct Identifier * id;
367 struct Statement * stmt;
368 } ecere_gcc_struct labeled;
369 struct
370 {
371 struct Expression * exp;
372 struct Statement * stmt;
373 } ecere_gcc_struct caseStmt;
374 struct
375 {
376 struct __ecereNameSpace__ecere__sys__OldList * declarations;
377 struct __ecereNameSpace__ecere__sys__OldList * statements;
378 struct Context * context;
379 unsigned int isSwitch;
380 } ecere_gcc_struct compound;
381 struct
382 {
383 struct __ecereNameSpace__ecere__sys__OldList * exp;
384 struct Statement * stmt;
385 struct Statement * elseStmt;
386 } ecere_gcc_struct ifStmt;
387 struct
388 {
389 struct __ecereNameSpace__ecere__sys__OldList * exp;
390 struct Statement * stmt;
391 } ecere_gcc_struct switchStmt;
392 struct
393 {
394 struct __ecereNameSpace__ecere__sys__OldList * exp;
395 struct Statement * stmt;
396 } ecere_gcc_struct whileStmt;
397 struct
398 {
399 struct __ecereNameSpace__ecere__sys__OldList * exp;
400 struct Statement * stmt;
401 } ecere_gcc_struct doWhile;
402 struct
403 {
404 struct Statement * init;
405 struct Statement * check;
406 struct __ecereNameSpace__ecere__sys__OldList * increment;
407 struct Statement * stmt;
408 } ecere_gcc_struct forStmt;
409 struct
410 {
411 struct Identifier * id;
412 } ecere_gcc_struct gotoStmt;
413 struct
414 {
415 struct Specifier * spec;
416 char * statements;
417 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
418 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
419 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
420 } ecere_gcc_struct asmStmt;
421 struct
422 {
423 struct Expression * watcher;
424 struct Expression * object;
425 struct __ecereNameSpace__ecere__sys__OldList * watches;
426 } ecere_gcc_struct _watch;
427 struct
428 {
429 struct Identifier * id;
430 struct __ecereNameSpace__ecere__sys__OldList * exp;
431 struct __ecereNameSpace__ecere__sys__OldList * filter;
432 struct Statement * stmt;
433 } ecere_gcc_struct forEachStmt;
434 struct Declaration * decl;
435 } ecere_gcc_struct __anon1;
436 } ecere_gcc_struct;
437
438 extern struct Identifier * MkIdentifier(const char *  string);
439
440 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
441
442 extern struct Expression * MkExpIdentifier(struct Identifier * id);
443
444 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
445
446 extern struct Identifier * CopyIdentifier(struct Identifier * id);
447
448 extern void FreeIdentifier(struct Identifier * id);
449
450 struct Type;
451
452 struct __ecereNameSpace__ecere__com__Property
453 {
454 struct __ecereNameSpace__ecere__com__Property * prev;
455 struct __ecereNameSpace__ecere__com__Property * next;
456 const char *  name;
457 unsigned int isProperty;
458 int memberAccess;
459 int id;
460 struct __ecereNameSpace__ecere__com__Class * _class;
461 const char *  dataTypeString;
462 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
463 struct Type * dataType;
464 void (*  Set)(void * , int);
465 int (*  Get)(void * );
466 unsigned int (*  IsSet)(void * );
467 void *  data;
468 void *  symbol;
469 int vid;
470 unsigned int conversion;
471 unsigned int watcherOffset;
472 const char *  category;
473 unsigned int compiled;
474 unsigned int selfWatchable;
475 unsigned int isWatchable;
476 } ecere_gcc_struct;
477
478 extern void FreeType(struct Type * type);
479
480 extern struct Type * MkClassType(const char *  name);
481
482 extern void CopyTypeInto(struct Type * type, struct Type * src);
483
484 extern struct Type * ProcessTypeString(const char *  string, unsigned int staticMethod);
485
486 struct Initializer;
487
488 struct Initializer
489 {
490 struct Initializer * prev;
491 struct Initializer * next;
492 struct Location loc;
493 int type;
494 union
495 {
496 struct Expression * exp;
497 struct __ecereNameSpace__ecere__sys__OldList *  list;
498 } ecere_gcc_struct __anon1;
499 unsigned int isConstant;
500 struct Identifier * id;
501 } ecere_gcc_struct;
502
503 extern void FreeInitializer(struct Initializer * initializer);
504
505 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
506
507 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
508
509 struct Symbol;
510
511 struct Specifier
512 {
513 struct Specifier * prev;
514 struct Specifier * next;
515 struct Location loc;
516 int type;
517 union
518 {
519 int specifier;
520 struct
521 {
522 struct ExtDecl * extDecl;
523 char *  name;
524 struct Symbol * symbol;
525 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
526 struct Specifier * nsSpec;
527 } ecere_gcc_struct __anon1;
528 struct
529 {
530 struct Identifier * id;
531 struct __ecereNameSpace__ecere__sys__OldList *  list;
532 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
533 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
534 unsigned int addNameSpace;
535 struct Context * ctx;
536 struct ExtDecl * extDeclStruct;
537 } ecere_gcc_struct __anon2;
538 struct Expression * expression;
539 struct Specifier * _class;
540 struct TemplateParameter * templateParameter;
541 } ecere_gcc_struct __anon1;
542 } ecere_gcc_struct;
543
544 struct Identifier
545 {
546 struct Identifier * prev;
547 struct Identifier * next;
548 struct Location loc;
549 struct Symbol * classSym;
550 struct Specifier * _class;
551 char *  string;
552 struct Identifier * badID;
553 } ecere_gcc_struct;
554
555 extern struct Symbol * FindClass(const char *  name);
556
557 extern struct Specifier * _MkSpecifierName(const char *  name, struct Symbol * symbol, struct __ecereNameSpace__ecere__sys__OldList * templateArgs);
558
559 extern struct Type * MkClassTypeSymbol(struct Symbol * symbol);
560
561 extern void FreeSymbol(struct Symbol * symbol);
562
563 struct Instantiation;
564
565 struct Instantiation
566 {
567 struct Instantiation * prev;
568 struct Instantiation * next;
569 struct Location loc;
570 struct Specifier * _class;
571 struct Expression * exp;
572 struct __ecereNameSpace__ecere__sys__OldList *  members;
573 struct Symbol * symbol;
574 unsigned int fullSet;
575 unsigned int isConstant;
576 unsigned char *  data;
577 struct Location nameLoc;
578 struct Location insideLoc;
579 unsigned int built;
580 } ecere_gcc_struct;
581
582 struct Declaration
583 {
584 struct Declaration * prev;
585 struct Declaration * next;
586 struct Location loc;
587 int type;
588 union
589 {
590 struct
591 {
592 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
593 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
594 } ecere_gcc_struct __anon1;
595 struct Instantiation * inst;
596 struct
597 {
598 struct Identifier * id;
599 struct Expression * exp;
600 } ecere_gcc_struct __anon2;
601 } ecere_gcc_struct __anon1;
602 struct Specifier * extStorage;
603 struct Symbol * symbol;
604 int declMode;
605 } ecere_gcc_struct;
606
607 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
608
609 extern struct Instantiation * MkInstantiation(struct Specifier * _class, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
610
611 extern void FreeInstance(struct Instantiation * inst);
612
613 extern struct Expression * MkExpInstance(struct Instantiation * inst);
614
615 struct __ecereNameSpace__ecere__com__Method;
616
617 struct __ecereNameSpace__ecere__com__Method
618 {
619 const char *  name;
620 struct __ecereNameSpace__ecere__com__Method * parent;
621 struct __ecereNameSpace__ecere__com__Method * left;
622 struct __ecereNameSpace__ecere__com__Method * right;
623 int depth;
624 int (*  function)();
625 int vid;
626 int type;
627 struct __ecereNameSpace__ecere__com__Class * _class;
628 void *  symbol;
629 const char *  dataTypeString;
630 struct Type * dataType;
631 int memberAccess;
632 } ecere_gcc_struct;
633
634 struct Type
635 {
636 struct Type * prev;
637 struct Type * next;
638 int refCount;
639 union
640 {
641 struct Symbol * _class;
642 struct
643 {
644 struct __ecereNameSpace__ecere__sys__OldList members;
645 char *  enumName;
646 } ecere_gcc_struct __anon1;
647 struct
648 {
649 struct Type * returnType;
650 struct __ecereNameSpace__ecere__sys__OldList params;
651 struct Symbol * thisClass;
652 unsigned int staticMethod;
653 struct TemplateParameter * thisClassTemplate;
654 } ecere_gcc_struct __anon2;
655 struct
656 {
657 struct __ecereNameSpace__ecere__com__Method * method;
658 struct __ecereNameSpace__ecere__com__Class * methodClass;
659 struct __ecereNameSpace__ecere__com__Class * usedClass;
660 } ecere_gcc_struct __anon3;
661 struct
662 {
663 struct Type * arrayType;
664 int arraySize;
665 struct Expression * arraySizeExp;
666 unsigned int freeExp;
667 struct Symbol * enumClass;
668 } ecere_gcc_struct __anon4;
669 struct Type * type;
670 struct TemplateParameter * templateParameter;
671 } ecere_gcc_struct __anon1;
672 int kind;
673 unsigned int size;
674 char *  name;
675 char *  typeName;
676 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
677 int promotedFrom;
678 int classObjectType;
679 int alignment;
680 unsigned int offset;
681 int bitFieldCount;
682 int count;
683 int bitMemberSize;
684 unsigned int isSigned : 1;
685 unsigned int constant : 1;
686 unsigned int truth : 1;
687 unsigned int byReference : 1;
688 unsigned int extraParam : 1;
689 unsigned int directClassAccess : 1;
690 unsigned int computing : 1;
691 unsigned int keepCast : 1;
692 unsigned int passAsTemplate : 1;
693 unsigned int dllExport : 1;
694 unsigned int attrStdcall : 1;
695 unsigned int declaredWithStruct : 1;
696 unsigned int typedByReference : 1;
697 unsigned int casted : 1;
698 unsigned int pointerAlignment : 1;
699 unsigned int isLong : 1;
700 unsigned int signedBeforePromotion : 1;
701 } ecere_gcc_struct;
702
703 extern void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
704
705 struct Declarator;
706
707 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
708
709 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
710
711 struct Expression
712 {
713 struct Expression * prev;
714 struct Expression * next;
715 struct Location loc;
716 int type;
717 union
718 {
719 struct
720 {
721 char *  constant;
722 struct Identifier * identifier;
723 } ecere_gcc_struct __anon1;
724 struct Statement * compound;
725 struct Instantiation * instance;
726 struct
727 {
728 char *  string;
729 unsigned int intlString;
730 unsigned int wideString;
731 } ecere_gcc_struct __anon2;
732 struct __ecereNameSpace__ecere__sys__OldList *  list;
733 struct
734 {
735 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
736 struct Declarator * decl;
737 } ecere_gcc_struct _classExp;
738 struct
739 {
740 struct Identifier * id;
741 } ecere_gcc_struct classData;
742 struct
743 {
744 struct Expression * exp;
745 struct __ecereNameSpace__ecere__sys__OldList * arguments;
746 struct Location argLoc;
747 } ecere_gcc_struct call;
748 struct
749 {
750 struct Expression * exp;
751 struct __ecereNameSpace__ecere__sys__OldList * index;
752 } ecere_gcc_struct index;
753 struct
754 {
755 struct Expression * exp;
756 struct Identifier * member;
757 int memberType;
758 unsigned int thisPtr;
759 } ecere_gcc_struct member;
760 struct
761 {
762 int op;
763 struct Expression * exp1;
764 struct Expression * exp2;
765 } ecere_gcc_struct op;
766 struct TypeName * typeName;
767 struct Specifier * _class;
768 struct
769 {
770 struct TypeName * typeName;
771 struct Expression * exp;
772 } ecere_gcc_struct cast;
773 struct
774 {
775 struct Expression * cond;
776 struct __ecereNameSpace__ecere__sys__OldList * exp;
777 struct Expression * elseExp;
778 } ecere_gcc_struct cond;
779 struct
780 {
781 struct TypeName * typeName;
782 struct Expression * size;
783 } ecere_gcc_struct _new;
784 struct
785 {
786 struct TypeName * typeName;
787 struct Expression * size;
788 struct Expression * exp;
789 } ecere_gcc_struct _renew;
790 struct
791 {
792 char * table;
793 struct Identifier * id;
794 } ecere_gcc_struct db;
795 struct
796 {
797 struct Expression * ds;
798 struct Expression * name;
799 } ecere_gcc_struct dbopen;
800 struct
801 {
802 struct TypeName * typeName;
803 struct Initializer * initializer;
804 } ecere_gcc_struct initializer;
805 struct
806 {
807 struct Expression * exp;
808 struct TypeName * typeName;
809 } ecere_gcc_struct vaArg;
810 struct
811 {
812 struct TypeName * typeName;
813 struct Identifier * id;
814 } ecere_gcc_struct offset;
815 } ecere_gcc_struct __anon1;
816 unsigned int debugValue;
817 struct __ecereNameSpace__ecere__com__DataValue val;
818 uint64 address;
819 unsigned int hasAddress;
820 struct Type * expType;
821 struct Type * destType;
822 unsigned int usage;
823 int tempCount;
824 unsigned int byReference;
825 unsigned int isConstant;
826 unsigned int addedThis;
827 unsigned int needCast;
828 unsigned int thisPtr;
829 unsigned int opDestType;
830 unsigned int needTemplateCast;
831 } ecere_gcc_struct;
832
833 extern struct Declarator * SpecDeclFromString(const char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
834
835 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
836
837 extern struct TypeName * QMkClass(const char *  spec, struct Declarator * decl);
838
839 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
840
841 struct Declarator
842 {
843 struct Declarator * prev;
844 struct Declarator * next;
845 struct Location loc;
846 int type;
847 struct Symbol * symbol;
848 struct Declarator * declarator;
849 union
850 {
851 struct Identifier * identifier;
852 struct
853 {
854 struct Expression * exp;
855 struct Expression * posExp;
856 struct Attrib * attrib;
857 } ecere_gcc_struct structDecl;
858 struct
859 {
860 struct Expression * exp;
861 struct Specifier * enumClass;
862 } ecere_gcc_struct array;
863 struct
864 {
865 struct __ecereNameSpace__ecere__sys__OldList * parameters;
866 } ecere_gcc_struct function;
867 struct
868 {
869 struct Pointer * pointer;
870 } ecere_gcc_struct pointer;
871 struct
872 {
873 struct ExtDecl * extended;
874 } ecere_gcc_struct extended;
875 } ecere_gcc_struct __anon1;
876 } ecere_gcc_struct;
877
878 static void ProcessInitializer(struct Initializer * init)
879 {
880 switch(init->type)
881 {
882 case 0:
883 init->__anon1.exp->usage = (init->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
884 ProcessExpression(init->__anon1.exp);
885 break;
886 case 1:
887 {
888 struct Initializer * i;
889
890 for(i = (*init->__anon1.list).first; i; i = i->next)
891 ProcessInitializer(i);
892 break;
893 }
894 }
895 }
896
897 struct ClassImport;
898
899 struct Symbol
900 {
901 char *  string;
902 struct Symbol * parent;
903 struct Symbol * left;
904 struct Symbol * right;
905 int depth;
906 struct Type * type;
907 union
908 {
909 struct __ecereNameSpace__ecere__com__Method * method;
910 struct __ecereNameSpace__ecere__com__Property * _property;
911 struct __ecereNameSpace__ecere__com__Class * registered;
912 } ecere_gcc_struct __anon1;
913 unsigned int notYetDeclared;
914 union
915 {
916 struct
917 {
918 struct External * pointerExternal;
919 struct External * structExternal;
920 } ecere_gcc_struct __anon1;
921 struct
922 {
923 struct External * externalGet;
924 struct External * externalSet;
925 struct External * externalPtr;
926 struct External * externalIsSet;
927 } ecere_gcc_struct __anon2;
928 struct
929 {
930 struct External * methodExternal;
931 struct External * methodCodeExternal;
932 } ecere_gcc_struct __anon3;
933 } ecere_gcc_struct __anon2;
934 unsigned int imported;
935 unsigned int declaredStructSym;
936 struct __ecereNameSpace__ecere__com__Class * _class;
937 unsigned int declaredStruct;
938 unsigned int needConstructor;
939 unsigned int needDestructor;
940 char *  constructorName;
941 char *  structName;
942 char *  className;
943 char *  destructorName;
944 struct ModuleImport * module;
945 struct ClassImport * _import;
946 struct Location nameLoc;
947 unsigned int isParam;
948 unsigned int isRemote;
949 unsigned int isStruct;
950 unsigned int fireWatchersDone;
951 int declaring;
952 unsigned int classData;
953 unsigned int isStatic;
954 char *  shortName;
955 struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
956 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
957 struct Context * ctx;
958 int isIterator;
959 struct Expression * propCategory;
960 unsigned int mustRegister;
961 } ecere_gcc_struct;
962
963 struct ClassImport
964 {
965 struct ClassImport * prev;
966 struct ClassImport * next;
967 char *  name;
968 struct __ecereNameSpace__ecere__sys__OldList methods;
969 struct __ecereNameSpace__ecere__sys__OldList properties;
970 unsigned int itself;
971 int isRemote;
972 } ecere_gcc_struct;
973
974 struct MembersInit;
975
976 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
977
978 struct __ecereNameSpace__ecere__sys__BinaryTree;
979
980 struct __ecereNameSpace__ecere__sys__BinaryTree
981 {
982 struct __ecereNameSpace__ecere__sys__BTNode * root;
983 int count;
984 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
985 void (*  FreeKey)(void *  key);
986 } ecere_gcc_struct;
987
988 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
989
990 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
991
992 struct FunctionDefinition;
993
994 extern struct FunctionDefinition * _MkFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * declarationList, unsigned int errorOnOmit);
995
996 extern void ProcessFunctionBody(struct FunctionDefinition * func, struct Statement * body);
997
998 extern struct External * MkExternalFunction(struct FunctionDefinition * function);
999
1000 struct FunctionDefinition
1001 {
1002 struct FunctionDefinition * prev;
1003 struct FunctionDefinition * next;
1004 struct Location loc;
1005 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1006 struct Declarator * declarator;
1007 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1008 struct Statement * body;
1009 struct __ecereNameSpace__ecere__com__Class * _class;
1010 struct __ecereNameSpace__ecere__sys__OldList attached;
1011 int declMode;
1012 struct Type * type;
1013 struct Symbol * propSet;
1014 int tempCount;
1015 unsigned int propertyNoThis;
1016 } ecere_gcc_struct;
1017
1018 struct PropertyWatch;
1019
1020 struct PropertyWatch
1021 {
1022 struct PropertyWatch * prev;
1023 struct PropertyWatch * next;
1024 struct Location loc;
1025 struct Statement * compound;
1026 struct __ecereNameSpace__ecere__sys__OldList *  properties;
1027 unsigned int deleteWatch;
1028 } ecere_gcc_struct;
1029
1030 struct InitDeclarator;
1031
1032 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1033
1034 extern struct Declaration * QMkDeclaration(const char *  name, struct InitDeclarator * initDecl);
1035
1036 struct InitDeclarator
1037 {
1038 struct InitDeclarator * prev;
1039 struct InitDeclarator * next;
1040 struct Location loc;
1041 struct Declarator * declarator;
1042 struct Initializer * initializer;
1043 } ecere_gcc_struct;
1044
1045 struct __ecereNameSpace__ecere__com__DataMember;
1046
1047 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1048 {
1049 union
1050 {
1051 struct
1052 {
1053 const char *  dataTypeString;
1054 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1055 } ecere_gcc_struct __anon1;
1056 struct __ecereNameSpace__ecere__com__DataValue expression;
1057 struct
1058 {
1059 const char *  memberString;
1060 union
1061 {
1062 struct __ecereNameSpace__ecere__com__DataMember * member;
1063 struct __ecereNameSpace__ecere__com__Property * prop;
1064 struct __ecereNameSpace__ecere__com__Method * method;
1065 } ecere_gcc_struct __anon1;
1066 } ecere_gcc_struct __anon2;
1067 } ecere_gcc_struct __anon1;
1068 } ecere_gcc_struct;
1069
1070 struct __ecereNameSpace__ecere__com__DataMember
1071 {
1072 struct __ecereNameSpace__ecere__com__DataMember * prev;
1073 struct __ecereNameSpace__ecere__com__DataMember * next;
1074 const char *  name;
1075 unsigned int isProperty;
1076 int memberAccess;
1077 int id;
1078 struct __ecereNameSpace__ecere__com__Class * _class;
1079 const char *  dataTypeString;
1080 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1081 struct Type * dataType;
1082 int type;
1083 int offset;
1084 int memberID;
1085 struct __ecereNameSpace__ecere__sys__OldList members;
1086 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
1087 int memberOffset;
1088 short structAlignment;
1089 short pointerAlignment;
1090 } ecere_gcc_struct;
1091
1092 extern void __ecereNameSpace__ecere__com__eClass_FindNextMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class **  curClass, struct __ecereNameSpace__ecere__com__DataMember **  curMember, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
1093
1094 struct __ecereNameSpace__ecere__com__Module;
1095
1096 extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_FindProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
1097
1098 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
1099
1100 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
1101
1102 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_FindMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, struct __ecereNameSpace__ecere__com__Instance * module);
1103
1104 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);
1105
1106 struct Enumerator;
1107
1108 struct Enumerator
1109 {
1110 struct Enumerator * prev;
1111 struct Enumerator * next;
1112 struct Location loc;
1113 struct Identifier * id;
1114 struct Expression * exp;
1115 } ecere_gcc_struct;
1116
1117 struct AsmField;
1118
1119 struct AsmField
1120 {
1121 struct AsmField * prev;
1122 struct AsmField * next;
1123 struct Location loc;
1124 char *  command;
1125 struct Expression * expression;
1126 struct Identifier * symbolic;
1127 } ecere_gcc_struct;
1128
1129 struct __ecereNameSpace__ecere__com__BitMember;
1130
1131 struct __ecereNameSpace__ecere__com__BitMember
1132 {
1133 struct __ecereNameSpace__ecere__com__BitMember * prev;
1134 struct __ecereNameSpace__ecere__com__BitMember * next;
1135 const char *  name;
1136 unsigned int isProperty;
1137 int memberAccess;
1138 int id;
1139 struct __ecereNameSpace__ecere__com__Class * _class;
1140 const char *  dataTypeString;
1141 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1142 struct Type * dataType;
1143 int type;
1144 int size;
1145 int pos;
1146 uint64 mask;
1147 } ecere_gcc_struct;
1148
1149 struct MemberInit;
1150
1151 struct MemberInit
1152 {
1153 struct MemberInit * prev;
1154 struct MemberInit * next;
1155 struct Location loc;
1156 struct Location realLoc;
1157 struct __ecereNameSpace__ecere__sys__OldList *  identifiers;
1158 struct Initializer * initializer;
1159 unsigned int used;
1160 unsigned int variable;
1161 unsigned int takeOutExp;
1162 } ecere_gcc_struct;
1163
1164 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
1165
1166 static void ProcessMemberInitData(struct MemberInit * member)
1167 {
1168 if(member->initializer)
1169 ProcessInitializer(member->initializer);
1170 }
1171
1172 struct ClassDefinition;
1173
1174 struct Context
1175 {
1176 struct Context * parent;
1177 struct __ecereNameSpace__ecere__sys__BinaryTree types;
1178 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1179 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
1180 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
1181 int nextID;
1182 int simpleID;
1183 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
1184 struct ClassDefinition * classDef;
1185 unsigned int templateTypesOnly;
1186 unsigned int hasNameSpace;
1187 } ecere_gcc_struct;
1188
1189 struct External
1190 {
1191 struct External * prev;
1192 struct External * next;
1193 struct Location loc;
1194 int type;
1195 struct Symbol * symbol;
1196 union
1197 {
1198 struct FunctionDefinition * function;
1199 struct ClassDefinition * _class;
1200 struct Declaration * declaration;
1201 char *  importString;
1202 struct Identifier * id;
1203 struct DBTableDef * table;
1204 } ecere_gcc_struct __anon1;
1205 int importType;
1206 struct External * fwdDecl;
1207 struct __ecereNameSpace__ecere__com__Instance * outgoing;
1208 struct __ecereNameSpace__ecere__com__Instance * incoming;
1209 int nonBreakableIncoming;
1210 } ecere_gcc_struct;
1211
1212 struct ClassDefinition
1213 {
1214 struct ClassDefinition * prev;
1215 struct ClassDefinition * next;
1216 struct Location loc;
1217 struct Specifier * _class;
1218 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
1219 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
1220 struct Symbol * symbol;
1221 struct Location blockStart;
1222 struct Location nameLoc;
1223 int declMode;
1224 unsigned int deleteWatchable;
1225 } ecere_gcc_struct;
1226
1227 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
1228
1229 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
1230
1231 struct ClassFunction;
1232
1233 struct MembersInit
1234 {
1235 struct MembersInit * prev;
1236 struct MembersInit * next;
1237 struct Location loc;
1238 int type;
1239 union
1240 {
1241 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
1242 struct ClassFunction * function;
1243 } ecere_gcc_struct __anon1;
1244 } ecere_gcc_struct;
1245
1246 struct ClassFunction
1247 {
1248 struct ClassFunction * prev;
1249 struct ClassFunction * next;
1250 struct Location loc;
1251 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1252 struct Declarator * declarator;
1253 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1254 struct Statement * body;
1255 struct __ecereNameSpace__ecere__com__Class * _class;
1256 struct __ecereNameSpace__ecere__sys__OldList attached;
1257 int declMode;
1258 struct Type * type;
1259 struct Symbol * propSet;
1260 unsigned int isVirtual;
1261 unsigned int isConstructor;
1262 unsigned int isDestructor;
1263 unsigned int dontMangle;
1264 int id;
1265 int idCode;
1266 } ecere_gcc_struct;
1267
1268 static unsigned int ProcessInstMembers_SimpleMemberEnsure(struct __ecereNameSpace__ecere__com__DataMember * parentMember, struct Instantiation * inst, struct Expression * instExp, struct __ecereNameSpace__ecere__sys__OldList * list, unsigned int zeroOut)
1269 {
1270 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1271 unsigned int fullSet = 1;
1272 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1273
1274 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
1275 {
1276 if(!dataMember->isProperty)
1277 {
1278 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1279 {
1280 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1281 fullSet = 0;
1282 }
1283 else
1284 {
1285 unsigned int memberFilled = 0;
1286
1287 if(inst->members && (*inst->members).first)
1288 {
1289 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1290 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1291 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1292 int subMemberStackPos = 0;
1293 struct MembersInit * members;
1294
1295 for(members = (*inst->members).first; members; members = members->next)
1296 {
1297 if(members->type == 0)
1298 {
1299 struct MemberInit * member = (((void *)0));
1300
1301 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1302 {
1303 if(member->identifiers)
1304 {
1305 struct Identifier * firstID = (*member->identifiers).first;
1306 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1307 int _subMemberStackPos = 0;
1308 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1309
1310 if(!thisMember)
1311 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1312 if(thisMember)
1313 {
1314 if(thisMember && thisMember->memberAccess == 1)
1315 {
1316 curMember = thisMember;
1317 curClass = curMember->_class;
1318 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1319 subMemberStackPos = _subMemberStackPos;
1320 }
1321 if(!firstID->next && thisMember == dataMember)
1322 {
1323 memberFilled = 1;
1324 break;
1325 }
1326 }
1327 }
1328 else
1329 {
1330 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1331 if(curMember == dataMember)
1332 {
1333 memberFilled = 1;
1334 break;
1335 }
1336 }
1337 }
1338 if(memberFilled)
1339 break;
1340 }
1341 if(memberFilled)
1342 break;
1343 }
1344 }
1345 if(!memberFilled)
1346 {
1347 if(zeroOut)
1348 {
1349 struct Expression * instExpCopy = CopyExpression(instExp);
1350 struct Expression * memberExp;
1351 struct Expression * setExp;
1352 struct Expression * value = MkExpConstant("0");
1353
1354 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1355 memberExp->__anon1.member.memberType = 3;
1356 value->usage = (value->usage & ~0x1) | (((unsigned int)(1)) << 0);
1357 setExp = MkExpOp(memberExp, '=', value);
1358 value->loc = inst->loc;
1359 setExp->loc = inst->loc;
1360 FreeType(instExpCopy->expType);
1361 instExpCopy->expType = instExp->expType;
1362 if(instExp->expType)
1363 instExp->expType->refCount++;
1364 ProcessExpressionType(setExp);
1365 ProcessExpression(setExp);
1366 ListAdd(list, setExp);
1367 }
1368 fullSet = 0;
1369 }
1370 }
1371 }
1372 }
1373 return fullSet;
1374 }
1375
1376 struct PropertyDef;
1377
1378 struct PropertyDef
1379 {
1380 struct PropertyDef * prev;
1381 struct PropertyDef * next;
1382 struct Location loc;
1383 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1384 struct Declarator * declarator;
1385 struct Identifier * id;
1386 struct Statement * getStmt;
1387 struct Statement * setStmt;
1388 struct Statement * issetStmt;
1389 struct Symbol * symbol;
1390 struct Expression * category;
1391 struct
1392 {
1393 unsigned int conversion : 1;
1394 unsigned int isWatchable : 1;
1395 unsigned int isDBProp : 1;
1396 } ecere_gcc_struct __anon1;
1397 } ecere_gcc_struct;
1398
1399 struct __ecereNameSpace__ecere__com__NameSpace;
1400
1401 struct __ecereNameSpace__ecere__com__NameSpace
1402 {
1403 const char *  name;
1404 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
1405 struct __ecereNameSpace__ecere__com__NameSpace *  left;
1406 struct __ecereNameSpace__ecere__com__NameSpace *  right;
1407 int depth;
1408 struct __ecereNameSpace__ecere__com__NameSpace *  parent;
1409 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
1410 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
1411 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
1412 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
1413 } ecere_gcc_struct;
1414
1415 struct __ecereNameSpace__ecere__com__Class
1416 {
1417 struct __ecereNameSpace__ecere__com__Class * prev;
1418 struct __ecereNameSpace__ecere__com__Class * next;
1419 const char *  name;
1420 int offset;
1421 int structSize;
1422 void * *  _vTbl;
1423 int vTblSize;
1424 unsigned int (*  Constructor)(void * );
1425 void (*  Destructor)(void * );
1426 int offsetClass;
1427 int sizeClass;
1428 struct __ecereNameSpace__ecere__com__Class * base;
1429 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
1430 struct __ecereNameSpace__ecere__sys__BinaryTree members;
1431 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
1432 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
1433 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
1434 struct __ecereNameSpace__ecere__sys__OldList derivatives;
1435 int memberID;
1436 int startMemberID;
1437 int type;
1438 struct __ecereNameSpace__ecere__com__Instance * module;
1439 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
1440 const char *  dataTypeString;
1441 struct Type * dataType;
1442 int typeSize;
1443 int defaultAlignment;
1444 void (*  Initialize)();
1445 int memberOffset;
1446 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
1447 const char *  designerClass;
1448 unsigned int noExpansion;
1449 const char *  defaultProperty;
1450 unsigned int comRedefinition;
1451 int count;
1452 int isRemote;
1453 unsigned int internalDecl;
1454 void *  data;
1455 unsigned int computeSize;
1456 short structAlignment;
1457 short pointerAlignment;
1458 int destructionWatchOffset;
1459 unsigned int fixed;
1460 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
1461 int inheritanceAccess;
1462 const char *  fullName;
1463 void *  symbol;
1464 struct __ecereNameSpace__ecere__sys__OldList conversions;
1465 struct __ecereNameSpace__ecere__sys__OldList templateParams;
1466 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
1467 struct __ecereNameSpace__ecere__com__Class * templateClass;
1468 struct __ecereNameSpace__ecere__sys__OldList templatized;
1469 int numParams;
1470 unsigned int isInstanceClass;
1471 unsigned int byValueSystemClass;
1472 } ecere_gcc_struct;
1473
1474 struct __ecereNameSpace__ecere__com__Application
1475 {
1476 int argc;
1477 const char * *  argv;
1478 int exitCode;
1479 unsigned int isGUIApp;
1480 struct __ecereNameSpace__ecere__sys__OldList allModules;
1481 char *  parsedCommand;
1482 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
1483 } ecere_gcc_struct;
1484
1485 static unsigned int ProcessInstMembers(struct Instantiation * inst, struct Expression * instExp, struct __ecereNameSpace__ecere__sys__OldList * list, unsigned int zeroOut)
1486 {
1487 struct MembersInit * members;
1488 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
1489 unsigned int fullSet = 1, convert = 0;
1490
1491 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
1492 {
1493 struct Expression * exp = (((void *)0));
1494
1495 if(inst->members && (*inst->members).first)
1496 {
1497 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1498
1499 while(_class != classSym->__anon1.registered)
1500 {
1501 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (((void *)0));
1502 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1503
1504 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1505 ;
1506 for(bitMember = _class->membersAndProperties.first; bitMember; bitMember = bitMember->next)
1507 {
1508 struct __ecereNameSpace__ecere__com__BitMember * curMember = (((void *)0));
1509 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1510 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1511 int subMemberStackPos = 0;
1512 struct MemberInit * member = (((void *)0));
1513 unsigned int found = 0;
1514
1515 for(members = (*inst->members).first; members; members = members->next)
1516 {
1517 if(members->type == 0)
1518 {
1519 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1520 {
1521 if(member->identifiers)
1522 {
1523 struct Identifier * firstID = (*member->identifiers).first;
1524 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1525 int _subMemberStackPos = 0;
1526 struct __ecereNameSpace__ecere__com__BitMember * thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindDataMember(_class, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1527
1528 if(!thisMember)
1529 {
1530 thisMember = (struct __ecereNameSpace__ecere__com__BitMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1531 }
1532 if(thisMember && thisMember->memberAccess == 1)
1533 {
1534 curMember = thisMember;
1535 curClass = curMember->_class;
1536 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1537 subMemberStackPos = _subMemberStackPos;
1538 }
1539 if(thisMember == bitMember)
1540 {
1541 found = 1;
1542 break;
1543 }
1544 }
1545 else
1546 {
1547 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, (struct __ecereNameSpace__ecere__com__DataMember **)&curMember, subMemberStack, &subMemberStackPos);
1548 if(curMember == bitMember)
1549 {
1550 found = 1;
1551 break;
1552 }
1553 }
1554 }
1555 }
1556 if(found)
1557 break;
1558 }
1559 if(member)
1560 {
1561 if(!bitMember->isProperty)
1562 {
1563 struct Expression * part = (((void *)0));
1564 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1565 struct Declarator * decl;
1566
1567 decl = SpecDeclFromString(_class->dataTypeString, specs, (((void *)0)));
1568 ProcessInitializer(member->initializer);
1569 if(member->initializer && member->initializer->type == 0)
1570 {
1571 if(bitMember->pos)
1572 {
1573 char pos[10];
1574
1575 sprintf(pos, "%d", bitMember->pos);
1576 part = MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp))))), LEFT_OP, MkExpConstant(pos))));
1577 }
1578 else
1579 part = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(specs, decl), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)))));
1580 member->initializer->__anon1.exp = (((void *)0));
1581 FreeInitializer(member->initializer);
1582 member->initializer = (((void *)0));
1583 }
1584 if(exp)
1585 exp = MkExpOp(exp, '|', part);
1586 else
1587 exp = part;
1588 }
1589 else
1590 {
1591 char setName[1024], getName[1024];
1592
1593 DeclareProperty(curExternal, (struct __ecereNameSpace__ecere__com__Property *)bitMember, setName, getName);
1594 if(member->initializer && member->initializer->type == 0)
1595 {
1596 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1597 member->initializer->__anon1.exp = (((void *)0));
1598 FreeInitializer(member->initializer);
1599 member->initializer = (((void *)0));
1600 }
1601 }
1602 }
1603 }
1604 }
1605 }
1606 if(exp)
1607 exp = MkExpBrackets(MkListOne(exp));
1608 else
1609 exp = MkExpConstant("0");
1610 exp->expType = MkClassType(classSym->string);
1611 ProcessExpression(exp);
1612 ListAdd(list, exp);
1613 }
1614 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
1615 {
1616 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
1617 struct Expression * exp = (((void *)0));
1618
1619 if(inst->members && (*inst->members).first)
1620 {
1621 struct MemberInit * member = (((void *)0));
1622 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
1623 unsigned int found = 0;
1624
1625 for(members = (*inst->members).first; members; members = members->next)
1626 {
1627 if(members->type == 0)
1628 {
1629 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1630 {
1631 if(member->identifiers)
1632 {
1633 struct Identifier * firstID = (*member->identifiers).first;
1634
1635 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, firstID->string, privateModule);
1636 if(prop)
1637 {
1638 found = 1;
1639 break;
1640 }
1641 prop = (((void *)0));
1642 }
1643 else
1644 {
1645 found = 1;
1646 break;
1647 }
1648 }
1649 }
1650 if(found)
1651 break;
1652 }
1653 if(member)
1654 {
1655 if(prop)
1656 {
1657 char setName[1024], getName[1024];
1658
1659 DeclareProperty(curExternal, prop, setName, getName);
1660 if(member->initializer && member->initializer->type == 0)
1661 {
1662 exp = MkExpCall(MkExpIdentifier(MkIdentifier(setName)), MkListOne(member->initializer->__anon1.exp));
1663 member->initializer->__anon1.exp = (((void *)0));
1664 FreeInitializer(member->initializer);
1665 member->initializer = (((void *)0));
1666 }
1667 }
1668 else
1669 {
1670 ProcessInitializer(member->initializer);
1671 if(member->initializer && member->initializer->type == 0)
1672 {
1673 exp = MkExpCast(QMkClass(_class->fullName, (((void *)0))), MkExpBrackets(MkListOne(member->initializer->__anon1.exp)));
1674 member->initializer->__anon1.exp = (((void *)0));
1675 FreeInitializer(member->initializer);
1676 member->initializer = (((void *)0));
1677 }
1678 }
1679 }
1680 }
1681 if(exp)
1682 exp = MkExpBrackets(MkListOne(exp));
1683 else
1684 exp = MkExpConstant("0");
1685 ProcessExpression(exp);
1686 ListAdd(list, exp);
1687 }
1688 else if(classSym && classSym->__anon1.registered)
1689 {
1690 if(classSym->__anon1.registered->type == 1)
1691 {
1692 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
1693
1694 while(_class != classSym->__anon1.registered)
1695 {
1696 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
1697 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
1698
1699 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
1700 ;
1701 if(_class->structSize != _class->memberOffset)
1702 fullSet = 0;
1703 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
1704 {
1705 if(!dataMember->isProperty)
1706 {
1707 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
1708 {
1709 if(!ProcessInstMembers_SimpleMemberEnsure(dataMember, inst, instExp, list, zeroOut))
1710 fullSet = 0;
1711 }
1712 else
1713 {
1714 unsigned int memberFilled = 0;
1715
1716 if(inst->members && (*inst->members).first)
1717 {
1718 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1719 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1720 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1721 int subMemberStackPos = 0;
1722
1723 for(members = (*inst->members).first; members; members = members->next)
1724 {
1725 if(members->type == 0 && members->__anon1.dataMembers)
1726 {
1727 struct MemberInit * member = (((void *)0));
1728
1729 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1730 {
1731 if(member->identifiers)
1732 {
1733 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1734 int _subMemberStackPos = 0;
1735 struct Identifier * firstID = (*member->identifiers).first;
1736 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1737
1738 if(!thisMember)
1739 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1740 if(thisMember)
1741 {
1742 if(thisMember->memberAccess == 1)
1743 {
1744 curMember = thisMember;
1745 curClass = curMember->_class;
1746 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1747 subMemberStackPos = _subMemberStackPos;
1748 }
1749 if(!firstID->next && curMember == dataMember)
1750 {
1751 memberFilled = 1;
1752 break;
1753 }
1754 }
1755 }
1756 else
1757 {
1758 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1759 if(curMember == dataMember)
1760 {
1761 memberFilled = 1;
1762 break;
1763 }
1764 }
1765 }
1766 if(memberFilled)
1767 break;
1768 }
1769 if(memberFilled)
1770 break;
1771 }
1772 }
1773 if(!memberFilled)
1774 {
1775 if(zeroOut)
1776 {
1777 struct Expression * instExpCopy = CopyExpression(instExp);
1778 struct Expression * memberExp;
1779 struct Expression * setExp;
1780 struct Expression * value = MkExpConstant("0");
1781
1782 memberExp = MkExpMember(instExpCopy, MkIdentifier(dataMember->name));
1783 memberExp->__anon1.member.memberType = 3;
1784 value->usage = (value->usage & ~0x1) | (((unsigned int)(1)) << 0);
1785 setExp = MkExpOp(memberExp, '=', value);
1786 value->loc = inst->loc;
1787 setExp->loc = inst->loc;
1788 FreeType(instExpCopy->expType);
1789 instExpCopy->expType = instExp->expType;
1790 if(instExp->expType)
1791 instExp->expType->refCount++;
1792 ProcessExpressionType(setExp);
1793 ProcessExpression(setExp);
1794 ListAdd(list, setExp);
1795 }
1796 fullSet = 0;
1797 }
1798 }
1799 }
1800 }
1801 }
1802 }
1803 if(inst->members && (*inst->members).first)
1804 {
1805 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
1806 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
1807 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
1808 int subMemberStackPos = 0;
1809
1810 for(members = (*inst->members).first; members; members = members->next)
1811 {
1812 if(members->type == 0 && members->__anon1.dataMembers)
1813 {
1814 struct MemberInit * member = (((void *)0));
1815 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
1816
1817 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
1818 {
1819 struct Identifier * ident = (((void *)0));
1820 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (((void *)0));
1821
1822 if(member->identifiers)
1823 {
1824 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
1825 int _subMemberStackPos = 0;
1826 struct Identifier * firstID = (*member->identifiers).first;
1827
1828 thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
1829 if(!thisMember)
1830 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
1831 ident = firstID;
1832 if(thisMember)
1833 {
1834 if(thisMember->memberAccess == 1)
1835 {
1836 curMember = thisMember;
1837 curClass = curMember->_class;
1838 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
1839 subMemberStackPos = _subMemberStackPos;
1840 }
1841 }
1842 else if(classSym->__anon1.registered->type != 1)
1843 {
1844 method = __ecereNameSpace__ecere__com__eClass_FindMethod(classSym->__anon1.registered, ident->string, privateModule);
1845 if(!method || method->type != 1)
1846 method = (((void *)0));
1847 }
1848 }
1849 else
1850 {
1851 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
1852 thisMember = curMember;
1853 }
1854 if(instExp && (thisMember || method))
1855 {
1856 struct Expression * instExpCopy = CopyExpression(instExp);
1857 struct Expression * setExp = (((void *)0));
1858
1859 instExpCopy->tempCount = instExp->tempCount;
1860 if(!ident)
1861 ident = MkIdentifier(thisMember->name);
1862 if(ident)
1863 {
1864 struct Expression * memberExp;
1865 unsigned int freeMemberExp = 0;
1866
1867 if(thisMember && thisMember->isProperty && ((struct __ecereNameSpace__ecere__com__Property *)thisMember)->conversion)
1868 convert = 1;
1869 if(member->identifiers && (*member->identifiers).count > 1)
1870 {
1871 struct Identifier * id = (*member->identifiers).first;
1872
1873 memberExp = MkExpMember(instExpCopy, id);
1874 for(id = id->next; id; id = id->next)
1875 memberExp = MkExpMember(memberExp, id);
1876 }
1877 else
1878 memberExp = MkExpMember(instExpCopy, ident);
1879 if(member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
1880 {
1881 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
1882 setExp = MkExpOp(memberExp, '=', member->initializer->__anon1.exp);
1883 member->initializer->__anon1.exp = (((void *)0));
1884 FreeInitializer(member->initializer);
1885 member->initializer = (((void *)0));
1886 }
1887 else
1888 {
1889 freeMemberExp = 1;
1890 }
1891 memberExp->loc = inst->loc;
1892 if(member->identifiers)
1893 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*member->identifiers));
1894 if(setExp)
1895 setExp->loc = inst->loc;
1896 FreeType(instExpCopy->expType);
1897 instExpCopy->expType = instExp->expType;
1898 if(instExp->expType)
1899 instExp->expType->refCount++;
1900 if(setExp)
1901 {
1902 ProcessExpressionType(setExp);
1903 ProcessExpression(setExp);
1904 ListAdd(list, setExp);
1905 }
1906 if(freeMemberExp)
1907 FreeExpression(memberExp);
1908 }
1909 }
1910 }
1911 }
1912 }
1913 }
1914 }
1915 return fullSet || convert;
1916 }
1917
1918 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
1919
1920 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
1921
1922 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
1923
1924 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
1925
1926 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
1927
1928 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
1929
1930 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
1931
1932 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
1933
1934 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TopoEdge;
1935
1936 struct __ecereNameSpace__ecere__com__Module
1937 {
1938 struct __ecereNameSpace__ecere__com__Instance * application;
1939 struct __ecereNameSpace__ecere__sys__OldList classes;
1940 struct __ecereNameSpace__ecere__sys__OldList defines;
1941 struct __ecereNameSpace__ecere__sys__OldList functions;
1942 struct __ecereNameSpace__ecere__sys__OldList modules;
1943 struct __ecereNameSpace__ecere__com__Instance * prev;
1944 struct __ecereNameSpace__ecere__com__Instance * next;
1945 const char *  name;
1946 void *  library;
1947 void *  Unload;
1948 int importType;
1949 int origImportType;
1950 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1951 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1952 } ecere_gcc_struct;
1953
1954 static void CreateInstancesBody()
1955 {
1956 if(inCompiler && !createInstancesBody)
1957 {
1958 char registerName[1024], moduleName[274];
1959 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1960 struct Declarator * declarator;
1961
1962 createInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1963 createInstancesBody->__anon1.compound.context = __extension__ ({
1964 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1965
1966 __ecereInstance1->parent = globalContext, __ecereInstance1;
1967 });
1968 specifiers = MkList();
1969 ListAdd(specifiers, MkSpecifier(VOID));
1970 __ecereNameSpace__ecere__sys__GetLastDirectory(outputFile, moduleName);
1971 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1972 FixModuleName(moduleName);
1973 sprintf(registerName, "__ecereCreateModuleInstances_%s", moduleName);
1974 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1975 {
1976 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0);
1977
1978 ProcessFunctionBody(function, createInstancesBody);
1979 ListAdd(ast, createInstancesExternal = MkExternalFunction(function));
1980 }
1981 destroyInstancesBody = MkCompoundStmt((((void *)0)), MkList());
1982 destroyInstancesBody->__anon1.compound.context = __extension__ ({
1983 struct Context * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
1984
1985 __ecereInstance1->parent = globalContext, __ecereInstance1;
1986 });
1987 specifiers = MkList();
1988 ListAdd(specifiers, MkSpecifier(VOID));
1989 sprintf(registerName, "__ecereDestroyModuleInstances_%s", moduleName);
1990 declarator = MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(registerName)), (((void *)0)));
1991 {
1992 struct FunctionDefinition * function = _MkFunction(specifiers, declarator, (((void *)0)), 0);
1993
1994 ProcessFunctionBody(function, destroyInstancesBody);
1995 ListAdd(ast, destroyInstancesExternal = MkExternalFunction(function));
1996 }
1997 }
1998 }
1999
2000 void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char * className)
2001 {
2002 if(classSym && classSym->notYetDeclared)
2003 {
2004 if(!classSym->mustRegister)
2005 {
2006 if(!classSym->_import)
2007 {
2008 if(!classSym->module)
2009 classSym->module = mainModule;
2010 if(!classSym->module)
2011 return ;
2012 classSym->_import = __extension__ ({
2013 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
2014
2015 __ecereInstance1->isRemote = classSym->__anon1.registered ? classSym->__anon1.registered->isRemote : 0, __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(classSym->string), __ecereInstance1;
2016 });
2017 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->module->classes, classSym->_import);
2018 }
2019 classSym->_import->itself = 1;
2020 }
2021 classSym->notYetDeclared = 0;
2022 if(!classSym->__anon2.__anon1.pointerExternal && inCompiler)
2023 {
2024 struct Declaration * decl;
2025 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
2026 struct Declarator * d;
2027
2028 specifiers = MkList();
2029 declarators = MkList();
2030 ListAdd(specifiers, MkSpecifier(EXTERN));
2031 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
2032 d = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier(className)));
2033 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
2034 decl = MkDeclaration(specifiers, declarators);
2035 classSym->__anon2.__anon1.pointerExternal = MkExternalDeclaration(decl);
2036 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), classSym->__anon2.__anon1.pointerExternal);
2037 DeclareStruct(classSym->__anon2.__anon1.pointerExternal, "ecere::com::Class", 0, 1);
2038 }
2039 }
2040 if(inCompiler && classSym && classSym->__anon2.__anon1.pointerExternal && neededFor)
2041 __ecereMethod_External_CreateUniqueEdge(neededFor, classSym->__anon2.__anon1.pointerExternal, 0);
2042 }
2043
2044 void __ecereUnregisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)
2045 {
2046
2047 }
2048
2049 static void ProcessStatement(struct Statement *  stmt);
2050
2051 static void ProcessFunction(struct FunctionDefinition * function)
2052 {
2053 if(function->body)
2054 {
2055 yylloc = function->loc;
2056 ProcessStatement(function->body);
2057 }
2058 }
2059
2060 static void ProcessInstantiation(struct Instantiation * inst)
2061 {
2062 if(inst->members && (*inst->members).first)
2063 {
2064 struct MembersInit * members;
2065
2066 for(members = (*inst->members).first; members; members = members->next)
2067 {
2068 if(members->type == 0)
2069 {
2070 if(members->__anon1.dataMembers)
2071 {
2072 struct MemberInit * member;
2073
2074 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2075 ProcessMemberInitData(member);
2076 }
2077 }
2078 else if(members->type == 1)
2079 {
2080 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
2081 }
2082 }
2083 }
2084 }
2085
2086 static void ProcessDeclaration(struct Declaration *  decl);
2087
2088 static void ProcessStatement(struct Statement * stmt)
2089 {
2090 yylloc = stmt->loc;
2091 switch(stmt->type)
2092 {
2093 case 0:
2094 if(stmt->__anon1.labeled.stmt)
2095 ProcessStatement(stmt->__anon1.labeled.stmt);
2096 break;
2097 case 1:
2098 if(stmt->__anon1.caseStmt.exp)
2099 ProcessExpression(stmt->__anon1.caseStmt.exp);
2100 if(stmt->__anon1.caseStmt.stmt)
2101 ProcessStatement(stmt->__anon1.caseStmt.stmt);
2102 break;
2103 case 2:
2104 {
2105 if(stmt->__anon1.compound.context)
2106 {
2107 struct Declaration * decl;
2108 struct Statement * s;
2109 struct Statement * prevCompound = curCompound;
2110 struct Context * prevContext = curContext;
2111
2112 if(!stmt->__anon1.compound.isSwitch)
2113 {
2114 curCompound = stmt;
2115 curContext = stmt->__anon1.compound.context;
2116 }
2117 if(stmt->__anon1.compound.declarations)
2118 {
2119 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
2120 ProcessDeclaration(decl);
2121 }
2122 if(stmt->__anon1.compound.statements)
2123 {
2124 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
2125 {
2126 ProcessStatement(s);
2127 }
2128 }
2129 curCompound = prevCompound;
2130 curContext = prevContext;
2131 }
2132 break;
2133 }
2134 case 3:
2135 {
2136 struct Expression * exp;
2137
2138 if(stmt->__anon1.expressions)
2139 {
2140 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
2141 {
2142 ProcessExpression(exp);
2143 }
2144 }
2145 break;
2146 }
2147 case 4:
2148 {
2149 struct Expression * exp;
2150
2151 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2152 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
2153 {
2154 ProcessExpression(exp);
2155 }
2156 if(stmt->__anon1.ifStmt.stmt)
2157 ProcessStatement(stmt->__anon1.ifStmt.stmt);
2158 if(stmt->__anon1.ifStmt.elseStmt)
2159 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
2160 break;
2161 }
2162 case 5:
2163 {
2164 struct Expression * exp;
2165
2166 ((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.switchStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2167 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
2168 ProcessExpression(exp);
2169 ProcessStatement(stmt->__anon1.switchStmt.stmt);
2170 break;
2171 }
2172 case 6:
2173 {
2174 if(stmt->__anon1.whileStmt.exp)
2175 {
2176 struct Expression * exp;
2177
2178 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2179 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
2180 {
2181 ProcessExpression(exp);
2182 }
2183 }
2184 if(stmt->__anon1.whileStmt.stmt)
2185 ProcessStatement(stmt->__anon1.whileStmt.stmt);
2186 break;
2187 }
2188 case 7:
2189 {
2190 if(stmt->__anon1.doWhile.exp)
2191 {
2192 struct Expression * exp;
2193
2194 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage = (((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2195 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
2196 {
2197 ProcessExpression(exp);
2198 }
2199 }
2200 if(stmt->__anon1.doWhile.stmt)
2201 ProcessStatement(stmt->__anon1.doWhile.stmt);
2202 break;
2203 }
2204 case 8:
2205 {
2206 struct Expression * exp;
2207
2208 if(stmt->__anon1.forStmt.init)
2209 ProcessStatement(stmt->__anon1.forStmt.init);
2210 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
2211 {
2212 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2213 }
2214 if(stmt->__anon1.forStmt.check)
2215 ProcessStatement(stmt->__anon1.forStmt.check);
2216 if(stmt->__anon1.forStmt.increment)
2217 {
2218 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
2219 ProcessExpression(exp);
2220 }
2221 if(stmt->__anon1.forStmt.stmt)
2222 ProcessStatement(stmt->__anon1.forStmt.stmt);
2223 break;
2224 }
2225 case 9:
2226 break;
2227 case 10:
2228 break;
2229 case 11:
2230 break;
2231 case 12:
2232 {
2233 struct Expression * exp;
2234
2235 if(stmt->__anon1.expressions && (*stmt->__anon1.expressions).last)
2236 {
2237 ((struct Expression *)(*stmt->__anon1.expressions).last)->usage = (((struct Expression *)(*stmt->__anon1.expressions).last)->usage & ~0x1) | (((unsigned int)(1)) << 0);
2238 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
2239 {
2240 ProcessExpression(exp);
2241 }
2242 }
2243 break;
2244 }
2245 case 14:
2246 {
2247 ProcessDeclaration(stmt->__anon1.decl);
2248 break;
2249 }
2250 case 13:
2251 {
2252 struct AsmField * field;
2253
2254 if(stmt->__anon1.asmStmt.inputFields)
2255 {
2256 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
2257 if(field->expression)
2258 ProcessExpression(field->expression);
2259 }
2260 if(stmt->__anon1.asmStmt.outputFields)
2261 {
2262 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
2263 if(field->expression)
2264 ProcessExpression(field->expression);
2265 }
2266 if(stmt->__anon1.asmStmt.clobberedFields)
2267 {
2268 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
2269 if(field->expression)
2270 ProcessExpression(field->expression);
2271 }
2272 break;
2273 }
2274 }
2275 }
2276
2277 struct ClassDef;
2278
2279 typedef union YYSTYPE
2280 {
2281 int specifierType;
2282 int i;
2283 int declMode;
2284 struct Identifier * id;
2285 struct Expression * exp;
2286 struct Specifier * specifier;
2287 struct __ecereNameSpace__ecere__sys__OldList * list;
2288 struct Enumerator * enumerator;
2289 struct Declarator * declarator;
2290 struct Pointer * pointer;
2291 struct Initializer * initializer;
2292 struct InitDeclarator * initDeclarator;
2293 struct TypeName * typeName;
2294 struct Declaration * declaration;
2295 struct Statement * stmt;
2296 struct FunctionDefinition * function;
2297 struct External * external;
2298 struct Context * context;
2299 struct AsmField * asmField;
2300 struct Attrib * attrib;
2301 struct ExtDecl * extDecl;
2302 struct Attribute * attribute;
2303 struct Instantiation * instance;
2304 struct MembersInit * membersInit;
2305 struct MemberInit * memberInit;
2306 struct ClassFunction * classFunction;
2307 struct ClassDefinition * _class;
2308 struct ClassDef * classDef;
2309 struct PropertyDef * prop;
2310 char * string;
2311 struct Symbol * symbol;
2312 struct PropertyWatch * propertyWatch;
2313 struct TemplateParameter * templateParameter;
2314 struct TemplateArgument * templateArgument;
2315 struct TemplateDatatype * templateDatatype;
2316 struct DBTableEntry * dbtableEntry;
2317 struct DBIndexItem * dbindexItem;
2318 struct DBTableDef * dbtableDef;
2319 } ecere_gcc_struct YYSTYPE;
2320
2321 extern YYSTYPE yylval;
2322
2323 struct ClassDef
2324 {
2325 struct ClassDef * prev;
2326 struct ClassDef * next;
2327 struct Location loc;
2328 int type;
2329 union
2330 {
2331 struct Declaration * decl;
2332 struct ClassFunction * function;
2333 struct __ecereNameSpace__ecere__sys__OldList *  defProperties;
2334 struct PropertyDef * propertyDef;
2335 struct PropertyWatch * propertyWatch;
2336 char *  designer;
2337 struct Identifier * defaultProperty;
2338 struct
2339 {
2340 struct Identifier * id;
2341 struct Initializer * initializer;
2342 } ecere_gcc_struct __anon1;
2343 } ecere_gcc_struct __anon1;
2344 int memberAccess;
2345 void *  object;
2346 } ecere_gcc_struct;
2347
2348 static void ProcessSpecifier(struct Specifier * spec)
2349 {
2350 switch(spec->type)
2351 {
2352 case 0:
2353 break;
2354 case 1:
2355 {
2356 break;
2357 }
2358 case 2:
2359 {
2360 struct Enumerator * e;
2361
2362 if(spec->__anon1.__anon2.list)
2363 {
2364 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
2365 {
2366 if(e->exp)
2367 ProcessExpression(e->exp);
2368 }
2369 }
2370 break;
2371 }
2372 case 3:
2373 case 4:
2374 {
2375 if(spec->__anon1.__anon2.definitions)
2376 {
2377 struct ClassDef * def;
2378
2379 for(def = (*spec->__anon1.__anon2.definitions).first; def; def = def->next)
2380 {
2381 if(def->type == 2 && def->__anon1.decl && def->__anon1.decl->type == 0)
2382 ProcessDeclaration(def->__anon1.decl);
2383 }
2384 }
2385 break;
2386 }
2387 }
2388 }
2389
2390 void ProcessInstantiations()
2391 {
2392 struct External * external;
2393
2394 for(external = (*ast).first; external; external = external->next)
2395 {
2396 curExternal = external;
2397 if(external->type == 1)
2398 {
2399 if(external->__anon1.declaration)
2400 {
2401 unsigned int isInstance = external->__anon1.declaration->type == 2;
2402 struct Symbol * sym = isInstance ? FindClass(external->__anon1.declaration->__anon1.inst->_class->__anon1.__anon1.name) : (((void *)0));
2403
2404 ProcessDeclaration(external->__anon1.declaration);
2405 if(isInstance)
2406 {
2407 struct TopoEdge * e, * next;
2408
2409 for(e = ((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)external->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->first; e; e = next)
2410 {
2411 struct External * from = e->from;
2412
2413 next = e->in.next;
2414 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)from->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
2415 {
2416 unsigned int reroute = 1;
2417
2418 if(sym && sym->__anon1.registered && sym->__anon1.registered->type == 1)
2419 reroute = 0;
2420 else if(from->type == 1 && from->__anon1.declaration && (!from->__anon1.declaration->__anon1.__anon1.declarators || !(*from->__anon1.declaration->__anon1.__anon1.declarators).count) && from->__anon1.declaration->__anon1.__anon1.specifiers)
2421 {
2422 struct Specifier * spec = (((void *)0));
2423
2424 for(spec = (*from->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
2425 {
2426 if(spec->type == 3 || spec->type == 4)
2427 break;
2428 }
2429 if(sym->__anon1.registered && spec && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
2430 {
2431 char className[1024];
2432 struct __ecereNameSpace__ecere__com__Class * c = sym->__anon1.registered;
2433
2434 strcpy(className, "__ecereClass_");
2435 if(c->type == 5 && c->templateClass)
2436 FullClassNameCat(className, c->templateClass->name, 1);
2437 else
2438 FullClassNameCat(className, c->name, 1);
2439 if(!strcmp(c->name, spec->__anon1.__anon2.id->string))
2440 reroute = 0;
2441 }
2442 }
2443 if(reroute)
2444 {
2445 unsigned int skip = 0;
2446
2447 e->to = createInstancesExternal;
2448 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
2449 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = external->incoming;
2450
2451 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2452 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(external->incoming, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
2453 {
2454 struct TopoEdge * i;
2455 struct __ecereNameSpace__ecere__com__Instance * __internalLinkList = createInstancesExternal->incoming;
2456
2457 for(i = ((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)__internalLinkList + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->first; i; i = (struct TopoEdge *)((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * pointer))__extension__ ({
2458 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = __internalLinkList;
2459
2460 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2461 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_GetNext])(__internalLinkList, (struct __ecereNameSpace__ecere__com__IteratorPointer *)i))
2462 {
2463 if(i->from == from)
2464 {
2465 skip = 1;
2466 if(i->breakable && !e->breakable)
2467 {
2468 i->breakable = 1;
2469 createInstancesExternal->nonBreakableIncoming++;
2470 }
2471 break;
2472 }
2473 }
2474 }
2475 if(skip)
2476 {
2477 external->nonBreakableIncoming--;
2478 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__extension__ ({
2479 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = e->from->outgoing;
2480
2481 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2482 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(e->from->outgoing, (struct __ecereNameSpace__ecere__com__IteratorPointer *)e);
2483 ((e ? (__ecereClass_TopoEdge->Destructor ? __ecereClass_TopoEdge->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
2484 }
2485 else
2486 {
2487 ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))__extension__ ({
2488 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = createInstancesExternal->incoming;
2489
2490 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__com__LinkList->_vTbl;
2491 })[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(createInstancesExternal->incoming, (uint64)(uintptr_t)(e));
2492 if(!e->breakable)
2493 {
2494 external->nonBreakableIncoming--;
2495 createInstancesExternal->nonBreakableIncoming++;
2496 }
2497 }
2498 }
2499 }
2500 }
2501 }
2502 }
2503 }
2504 else if(external->type == 0)
2505 {
2506 ProcessFunction(external->__anon1.function);
2507 }
2508 else if(external->type == 2)
2509 {
2510 struct ClassDefinition * _class = external->__anon1._class;
2511
2512 if(_class->definitions)
2513 {
2514 struct ClassDef * def;
2515
2516 for(def = (*_class->definitions).first; def; def = def->next)
2517 {
2518 if(def->type == 0)
2519 {
2520 curExternal = def->__anon1.function->declarator ? def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal : external;
2521 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
2522 }
2523 else if(def->type == 2 && def->__anon1.decl->type == 2)
2524 {
2525 ProcessInstantiation(def->__anon1.decl->__anon1.inst);
2526 }
2527 else if(def->type == 1 && def->__anon1.defProperties)
2528 {
2529 struct MemberInit * defProperty;
2530 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2531
2532 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2533 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
2534 {
2535 ProcessMemberInitData(defProperty);
2536 }
2537 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2538 FreeSymbol(thisSymbol);
2539 }
2540 else if(def->type == 3 && def->__anon1.propertyDef)
2541 {
2542 struct PropertyDef * prop = def->__anon1.propertyDef;
2543 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2544
2545 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2546 if(prop->setStmt)
2547 {
2548 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
2549 ProcessStatement(prop->setStmt);
2550 }
2551 if(prop->getStmt)
2552 {
2553 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
2554 ProcessStatement(prop->getStmt);
2555 }
2556 if(prop->issetStmt)
2557 {
2558 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
2559 ProcessStatement(prop->issetStmt);
2560 }
2561 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2562 FreeSymbol(thisSymbol);
2563 }
2564 else if(def->type == 4 && def->__anon1.propertyWatch)
2565 {
2566 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
2567 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassTypeSymbol(_class->symbol), thisSymbol);
2568
2569 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2570 if(propertyWatch->compound)
2571 {
2572 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2573 curExternal = (((void *)0));
2574 ProcessStatement(propertyWatch->compound);
2575 }
2576 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
2577 FreeSymbol(thisSymbol);
2578 }
2579 }
2580 }
2581 }
2582 }
2583 }
2584
2585 void __ecereRegisterModule_pass16(struct __ecereNameSpace__ecere__com__Instance * module)
2586 {
2587 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
2588
2589 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareClass", "void DeclareClass(External neededFor, Symbol classSym, const char * className)", DeclareClass, module, 1);
2590 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionInstPass", "void ProcessExpressionInstPass(Expression exp)", ProcessExpressionInstPass, module, 2);
2591 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiations", "void ProcessInstantiations(void)", ProcessInstantiations, module, 1);
2592 }
2593
2594 static unsigned int ProcessBracketInst_DataMember(struct __ecereNameSpace__ecere__com__DataMember *  parentMember, struct Instantiation *  inst, struct __ecereNameSpace__ecere__sys__OldList *  list, struct __ecereNameSpace__ecere__com__DataMember *  namedParentMember, unsigned int parentMemberSet);
2595
2596 static unsigned int ProcessBracketInst(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list)
2597 {
2598 static int recursionCount = 0;
2599 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2600 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
2601 int anonID = 1;
2602
2603 if(recursionCount > 500)
2604 return 0;
2605 recursionCount++;
2606 while(_class != classSym->__anon1.registered)
2607 {
2608 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
2609 struct __ecereNameSpace__ecere__com__Class * lastClass = _class;
2610
2611 for(_class = classSym->__anon1.registered; _class->base != lastClass && _class->base->type != 1000; _class = _class->base)
2612 ;
2613 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
2614 {
2615 if(!dataMember->isProperty && !dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
2616 {
2617 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2618
2619 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember, 0))
2620 {
2621 if(subList)
2622 FreeList(subList, (void *)(FreeInitializer));
2623 recursionCount--;
2624 return 0;
2625 }
2626 if(dataMember->type == 2 || (subList && (*subList).count))
2627 {
2628 struct Initializer * init = MkInitializerList(subList);
2629 char id[100];
2630
2631 sprintf(id, "__anon%d", anonID);
2632 init->id = MkIdentifier(id);
2633 ListAdd(list, init);
2634 }
2635 else
2636 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
2637 anonID++;
2638 }
2639 else
2640 {
2641 struct MembersInit * members;
2642 struct MemberInit * member = (((void *)0));
2643 unsigned int found = 0;
2644
2645 if(inst->members && (*inst->members).first)
2646 {
2647 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
2648 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
2649 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
2650 int subMemberStackPos = 0;
2651
2652 for(members = (*inst->members).first; members; members = members->next)
2653 {
2654 if(members->type == 0)
2655 {
2656 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2657 {
2658 struct Identifier * firstID = member->identifiers ? (*member->identifiers).first : (((void *)0));
2659
2660 if(firstID)
2661 {
2662 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
2663 int _subMemberStackPos = 0;
2664 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule);
2665
2666 if(!thisMember)
2667 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
2668 if(thisMember)
2669 {
2670 curMember = thisMember;
2671 curClass = curMember->_class;
2672 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
2673 subMemberStackPos = _subMemberStackPos;
2674 }
2675 if(curMember == dataMember)
2676 {
2677 if(dataMember->isProperty)
2678 {
2679 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
2680 {
2681 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
2682 continue;
2683 }
2684 recursionCount--;
2685 return 0;
2686 }
2687 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
2688 {
2689 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
2690 struct Specifier * spec;
2691 struct MembersInit * nextMembers;
2692 struct MemberInit * next = member->next;
2693 struct Symbol * symbol;
2694
2695 if(!dataMember->dataType)
2696 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
2697 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2698 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
2699 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*member->identifiers), firstID);
2700 ListAdd(partList, MkMemberInit(member->identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
2701 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
2702 {
2703 if(!nextMembers->__anon1.dataMembers)
2704 continue;
2705 if(members != nextMembers)
2706 next = (*nextMembers->__anon1.dataMembers).first;
2707 if(nextMembers->type == 0)
2708 {
2709 struct MemberInit * nextMember;
2710
2711 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
2712 {
2713 struct Identifier * nextID = (*nextMember->identifiers).first;
2714
2715 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
2716 {
2717 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
2718 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
2719 ListAdd(partList, nextMember);
2720 FreeIdentifier(nextID);
2721 }
2722 }
2723 }
2724 }
2725 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
2726 FreeIdentifier(firstID);
2727 member->identifiers = (((void *)0));
2728 }
2729 found = 1;
2730 break;
2731 }
2732 }
2733 else
2734 {
2735 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
2736 if(curMember == dataMember)
2737 {
2738 if(dataMember->isProperty)
2739 {
2740 if(!((struct __ecereNameSpace__ecere__com__Property *)dataMember)->Set)
2741 {
2742 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No set defined for property %s\n", (((void *)0))), dataMember->name);
2743 continue;
2744 }
2745 recursionCount--;
2746 return 0;
2747 }
2748 found = 1;
2749 break;
2750 }
2751 }
2752 }
2753 }
2754 if(found)
2755 break;
2756 }
2757 }
2758 if(dataMember->isProperty)
2759 continue;
2760 if(member && member->initializer && member->initializer->type == 0)
2761 {
2762 if(member->initializer->__anon1.exp->type == 1 && member->initializer->__anon1.exp->expType && member->initializer->__anon1.exp->expType->__anon1._class && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered->type == 1)
2763 {
2764 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2765
2766 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
2767 FreeExpression(member->initializer->__anon1.exp);
2768 member->initializer->__anon1.exp = (((void *)0));
2769 ListAdd(list, MkInitializerList(subList));
2770 }
2771 else
2772 {
2773 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
2774 ProcessExpression(member->initializer->__anon1.exp);
2775 ListAdd(list, MkInitializerAssignment(CopyExpression(member->initializer->__anon1.exp)));
2776 }
2777 member->takeOutExp = 1;
2778 }
2779 else if(member && member->initializer && member->initializer->type == 1)
2780 {
2781 ListAdd(list, member->initializer);
2782 member->initializer = (((void *)0));
2783 }
2784 else if(dataMember && dataMember->dataTypeString)
2785 {
2786 struct Symbol * classSym;
2787
2788 if(!dataMember->dataType)
2789 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
2790 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
2791 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2792 {
2793 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2794 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
2795 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2796
2797 ProcessBracketInst(inst, subList);
2798 FreeInstance(inst);
2799 ListAdd(list, MkInitializerList(subList));
2800 }
2801 else if(dataMember->dataType->kind == 12)
2802 {
2803 struct Type * t = dataMember->dataType->__anon1.type;
2804 struct Initializer * inner = MkInitializerAssignment((((void *)0))), * i = inner;
2805
2806 while(t && t->kind == 12)
2807 {
2808 i = MkInitializerList(MkListOne(i));
2809 t = t->__anon1.type;
2810 }
2811 if(t && t->kind == 8 && t->__anon1._class && t->__anon1._class->__anon1.registered && t->__anon1._class->__anon1.registered->type == 1)
2812 {
2813 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
2814 struct Specifier * spec = _MkSpecifierName(t->__anon1._class->__anon1.registered->name, classSym, (((void *)0)));
2815 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
2816
2817 ProcessBracketInst(inst, subList);
2818 FreeInstance(inst);
2819 inner->type = 1;
2820 inner->__anon1.list = subList;
2821 }
2822 else
2823 inner->__anon1.exp = MkExpConstant("0");
2824 ListAdd(list, MkInitializerList(MkListOne(i)));
2825 }
2826 else
2827 ListAdd(list, MkInitializerAssignment(MkExpConstant("0")));
2828 }
2829 }
2830 }
2831 }
2832 if(inst->members && (*inst->members).first)
2833 {
2834 struct MembersInit * members;
2835 struct MemberInit * member = (((void *)0));
2836
2837 for(members = (*inst->members).first; members; members = members->next)
2838 {
2839 if(members->type == 0)
2840 {
2841 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
2842 {
2843 if(member->takeOutExp)
2844 {
2845 FreeInitializer(member->initializer);
2846 member->initializer = (((void *)0));
2847 }
2848 }
2849 }
2850 }
2851 }
2852 recursionCount--;
2853 return 1;
2854 }
2855
2856 static void ProcessExpression(struct Expression * exp)
2857 {
2858 switch(exp->type)
2859 {
2860 case 0:
2861 break;
2862 case 1:
2863 {
2864 struct Instantiation * inst = exp->__anon1.instance;
2865
2866 if(inCompiler && inst->_class)
2867 {
2868 char className[1024];
2869 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
2870 struct Expression * instExp;
2871
2872 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
2873 {
2874 if(inst->exp)
2875 {
2876 struct __ecereNameSpace__ecere__sys__OldList list =
2877 {
2878 0
2879 };
2880
2881 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2882 ProcessExpression(inst->exp);
2883 exp->type = 4;
2884 exp->__anon1.op.op = '=';
2885 exp->__anon1.op.exp1 = inst->exp;
2886 exp->__anon1.op.exp2 = list.first;
2887 inst->exp = (((void *)0));
2888 }
2889 else
2890 {
2891 struct Type * expType = exp->expType;
2892 struct Expression * prev = exp->prev, * next = exp->next;
2893 struct __ecereNameSpace__ecere__sys__OldList list =
2894 {
2895 0, 0, 0, 0, 0
2896 };
2897
2898 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2899 FreeType(exp->destType);
2900 *exp = *(struct Expression *)list.first;
2901 {
2902 struct Expression * firstExp = list.first;
2903
2904 ((firstExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)firstExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(firstExp)) : 0), firstExp = 0);
2905 }
2906 FreeType(exp->destType);
2907 exp->destType = expType;
2908 exp->prev = prev;
2909 exp->next = next;
2910 }
2911 }
2912 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
2913 {
2914 if(inst->exp)
2915 {
2916 struct __ecereNameSpace__ecere__sys__OldList list =
2917 {
2918 0
2919 };
2920 struct Expression * e;
2921
2922 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2923 ProcessExpression(inst->exp);
2924 exp->type = 4;
2925 exp->__anon1.op.op = '=';
2926 exp->__anon1.op.exp1 = inst->exp;
2927 exp->__anon1.op.exp2 = list.first;
2928 inst->exp = (((void *)0));
2929 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, list.first);
2930 while((e = list.first))
2931 {
2932 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2933 FreeExpression(e);
2934 }
2935 }
2936 else
2937 {
2938 struct Expression * prev = exp->prev, * next = exp->next;
2939 struct Type * expType = exp->expType;
2940 struct __ecereNameSpace__ecere__sys__OldList list =
2941 {
2942 0
2943 };
2944
2945 ProcessInstMembers(inst, (((void *)0)), &list, 0);
2946 if(list.first)
2947 {
2948 struct Expression * e = list.first;
2949
2950 FreeType(exp->destType);
2951 *exp = *e;
2952 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2953 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
2954 exp->expType = expType;
2955 exp->prev = prev;
2956 exp->next = next;
2957 while((e = list.first))
2958 {
2959 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&list, e);
2960 FreeExpression(e);
2961 }
2962 }
2963 else
2964 {
2965 exp->type = 2;
2966 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString("0");
2967 }
2968 }
2969 }
2970 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
2971 {
2972 if(inst->exp)
2973 {
2974 exp->type = 5;
2975 exp->__anon1.list = MkList();
2976 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
2977 ProcessExpression(inst->exp);
2978 if(!(*exp->__anon1.list).count)
2979 {
2980 exp->type = 16;
2981 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
2982 }
2983 }
2984 else
2985 {
2986 struct Declaration * decl;
2987 struct Declaration * dummyDecl;
2988
2989 {
2990 dummyDecl = MkDeclaration((((void *)0)), (((void *)0)));
2991 if(!curCompound->__anon1.compound.declarations)
2992 curCompound->__anon1.compound.declarations = MkList();
2993 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), dummyDecl);
2994 sprintf(className, "__simpleStruct%d", curContext->simpleID++);
2995 {
2996 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
2997
2998 if(inst->isConstant && ProcessBracketInst(inst, list))
2999 {
3000 decl = MkDeclaration(MkList(), MkList());
3001 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3002 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(className)), MkInitializerList(list)));
3003 exp->type = 0;
3004 exp->__anon1.__anon1.identifier = MkIdentifier(className);
3005 }
3006 else
3007 {
3008 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free((&*list), (((void *)0)));
3009 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
3010 decl = MkDeclarationInst(MkInstantiation(CopySpecifier(inst->_class), MkExpIdentifier(MkIdentifier(className)), (((void *)0))));
3011 exp->type = 5;
3012 exp->__anon1.list = MkList();
3013 instExp = QMkExpId(className);
3014 instExp->loc = exp->loc;
3015 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3016 decl->__anon1.inst->fullSet = ProcessInstMembers(inst, instExp, exp->__anon1.list, 0);
3017 ListAdd(exp->__anon1.list, instExp);
3018 }
3019 }
3020 FreeType(exp->expType);
3021 exp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3022 {
3023 void * prev = dummyDecl->prev, * next = dummyDecl->next;
3024
3025 *dummyDecl = *decl;
3026 dummyDecl->prev = prev;
3027 dummyDecl->next = next;
3028 ((decl ? (__ecereClass_Declaration->Destructor ? __ecereClass_Declaration->Destructor((void *)decl) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(decl)) : 0), decl = 0);
3029 decl = dummyDecl;
3030 }
3031 ProcessDeclaration(decl);
3032 }
3033 }
3034 }
3035 else
3036 {
3037 struct Expression * newCall;
3038
3039 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
3040 {
3041 char size[256];
3042 struct __ecereNameSpace__ecere__com__Class * c = classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass : classSym->__anon1.registered;
3043 struct Expression * e = MkExpClassSize(MkSpecifierName(c->name));
3044
3045 ProcessExpressionType(e);
3046 sprintf(size, "%d", c->structSize);
3047 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(e));
3048 newCall->byReference = 1;
3049 }
3050 else
3051 {
3052 strcpy(className, "__ecereClass_");
3053 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
3054 {
3055 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
3056 FullClassNameCat(className, classSym->string, 1);
3057 }
3058 else
3059 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 1);
3060 DeclareClass(curExternal, classSym, className);
3061 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
3062 newCall->usage = exp->usage;
3063 ProcessExpressionType(newCall);
3064 if(newCall->expType && exp->expType)
3065 newCall->expType->passAsTemplate = exp->expType->passAsTemplate;
3066 newCall->byReference = 1;
3067 }
3068 if(inst->exp)
3069 {
3070 if(inst->members && (*inst->members).first)
3071 {
3072 exp->type = 5;
3073 exp->__anon1.list = MkList();
3074 if(!inst->built)
3075 {
3076 ListAdd(exp->__anon1.list, MkExpOp(inst->exp, '=', newCall));
3077 }
3078 else
3079 FreeExpression(newCall);
3080 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
3081 if(inst->built)
3082 FreeExpression(inst->exp);
3083 }
3084 else
3085 {
3086 exp->type = 4;
3087 exp->__anon1.op.op = '=';
3088 exp->__anon1.op.exp1 = inst->exp;
3089 exp->__anon1.op.exp2 = newCall;
3090 ProcessExpression(inst->exp);
3091 }
3092 inst->exp = (((void *)0));
3093 }
3094 else
3095 {
3096 if(inst->members && (*inst->members).first)
3097 {
3098 int __simpleStruct0;
3099 char ecereTemp[100];
3100 struct MembersInit * members;
3101 int tempCount = exp->tempCount;
3102 struct __ecereNameSpace__ecere__sys__OldList * expList;
3103
3104 for(members = (*inst->members).first; members; members = members->next)
3105 {
3106 if(members->type == 0 && members->__anon1.dataMembers)
3107 {
3108 struct MemberInit * member;
3109
3110 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3111 {
3112 if(member->initializer && member->initializer->type == 0)
3113 {
3114 int __simpleStruct0;
3115
3116 ProcessMemberInitData(member);
3117 tempCount = (__simpleStruct0 = member->initializer->__anon1.exp->tempCount, (tempCount > __simpleStruct0) ? tempCount : __simpleStruct0);
3118 }
3119 }
3120 }
3121 }
3122 if(curDecl)
3123 tempCount = ((tempCount > declTempCount) ? tempCount : declTempCount);
3124 tempCount++;
3125 curExternal->__anon1.function->tempCount = (__simpleStruct0 = curExternal->__anon1.function->tempCount, (__simpleStruct0 > tempCount) ? __simpleStruct0 : tempCount);
3126 sprintf(ecereTemp, "__ecereInstance%d", tempCount);
3127 exp->type = 23;
3128 exp->__anon1.compound = MkCompoundStmt((((void *)0)), (((void *)0)));
3129 exp->__anon1.compound->__anon1.compound.context = PushContext();
3130 exp->__anon1.compound->__anon1.compound.context->simpleID = exp->__anon1.compound->__anon1.compound.context->parent->simpleID;
3131 exp->__anon1.compound->__anon1.compound.declarations = MkListOne(QMkDeclaration(inst->_class->__anon1.__anon1.name, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(ecereTemp)), MkInitializerAssignment(newCall))));
3132 exp->__anon1.compound->__anon1.compound.statements = MkListOne(MkExpressionStmt((expList = MkList())));
3133 instExp = QMkExpId(ecereTemp);
3134 instExp->tempCount = tempCount;
3135 instExp->expType = MkClassType(inst->_class->__anon1.__anon1.name);
3136 instExp->byReference = 1;
3137 ProcessInstMembers(inst, instExp, expList, 0);
3138 FreeExpression(instExp);
3139 if(exp->usage)
3140 {
3141 struct Expression * tmpExp = QMkExpId(ecereTemp);
3142
3143 tmpExp->byReference = 1;
3144 ListAdd(expList, tmpExp);
3145 }
3146 exp->tempCount = tempCount;
3147 if(curDecl)
3148 declTempCount = ((declTempCount > tempCount) ? declTempCount : tempCount);
3149 PopContext(exp->__anon1.compound->__anon1.compound.context);
3150 }
3151 else
3152 {
3153 struct Expression * prev = exp->prev, * next = exp->next;
3154
3155 FreeType(newCall->destType);
3156 FreeType(newCall->expType);
3157 newCall->destType = exp->destType;
3158 newCall->expType = exp->expType;
3159 *exp = *newCall;
3160 exp->prev = prev;
3161 exp->next = next;
3162 ((newCall ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newCall) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newCall)) : 0), newCall = 0);
3163 }
3164 }
3165 }
3166 if(exp->type != 1)
3167 FreeInstance(inst);
3168 }
3169 else
3170 ProcessInstantiation(inst);
3171 break;
3172 }
3173 case 2:
3174 break;
3175 case 3:
3176 break;
3177 case 13:
3178 case 26:
3179 ProcessExpression(exp->__anon1._new.size);
3180 break;
3181 case 14:
3182 case 27:
3183 ProcessExpression(exp->__anon1._renew.size);
3184 ProcessExpression(exp->__anon1._renew.exp);
3185 break;
3186 case 4:
3187 {
3188 switch(exp->__anon1.op.op)
3189 {
3190 case '=':
3191 if(exp->__anon1.op.exp2)
3192 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3193 if(exp->__anon1.op.exp1)
3194 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3195 break;
3196 case MUL_ASSIGN:
3197 case DIV_ASSIGN:
3198 case MOD_ASSIGN:
3199 case ADD_ASSIGN:
3200 case SUB_ASSIGN:
3201 case LEFT_ASSIGN:
3202 case RIGHT_ASSIGN:
3203 case AND_ASSIGN:
3204 case XOR_ASSIGN:
3205 case OR_ASSIGN:
3206 if(exp->__anon1.op.exp2)
3207 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3208 if(exp->__anon1.op.exp1)
3209 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3210 break;
3211 case INC_OP:
3212 case DEC_OP:
3213 if(exp->__anon1.op.exp1)
3214 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x2) | (((unsigned int)(1)) << 1);
3215 case '&':
3216 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2)
3217 {
3218 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3219 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3220 }
3221 break;
3222 case '*':
3223 case '+':
3224 case '-':
3225 if(exp->__anon1.op.exp1)
3226 {
3227 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3228 }
3229 case '~':
3230 case '!':
3231 if(exp->__anon1.op.exp2)
3232 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3233 break;
3234 case '/':
3235 case '%':
3236 case LEFT_OP:
3237 case RIGHT_OP:
3238 case '<':
3239 case '>':
3240 case LE_OP:
3241 case GE_OP:
3242 case EQ_OP:
3243 case NE_OP:
3244 case '|':
3245 case '^':
3246 case AND_OP:
3247 case OR_OP:
3248 if(exp->__anon1.op.exp1)
3249 exp->__anon1.op.exp1->usage = (exp->__anon1.op.exp1->usage & ~0x1) | (((unsigned int)(1)) << 0);
3250 if(exp->__anon1.op.exp2)
3251 exp->__anon1.op.exp2->usage = (exp->__anon1.op.exp2->usage & ~0x1) | (((unsigned int)(1)) << 0);
3252 break;
3253 }
3254 if(exp->__anon1.op.exp1)
3255 {
3256 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp1->destType && exp->__anon1.op.exp1->destType->passAsTemplate && exp->__anon1.op.exp1->expType && !exp->__anon1.op.exp1->expType->passAsTemplate && !((unsigned int)((exp->__anon1.op.exp1->usage & 0x2) >> 1)))
3257 {
3258 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3259
3260 CopyTypeInto(type, exp->__anon1.op.exp1->destType);
3261 type->passAsTemplate = 0;
3262 FreeType(exp->__anon1.op.exp1->destType);
3263 exp->__anon1.op.exp1->destType = type;
3264 }
3265 ProcessExpression(exp->__anon1.op.exp1);
3266 }
3267 if(exp->__anon1.op.exp2)
3268 {
3269 if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->destType && exp->__anon1.op.exp2->destType->passAsTemplate && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->passAsTemplate && !((unsigned int)((exp->__anon1.op.exp1->usage & 0x2) >> 1)))
3270 {
3271 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3272
3273 CopyTypeInto(type, exp->__anon1.op.exp2->destType);
3274 type->passAsTemplate = 0;
3275 FreeType(exp->__anon1.op.exp2->destType);
3276 exp->__anon1.op.exp2->destType = type;
3277 }
3278 if(exp->__anon1.op.exp1)
3279 exp->__anon1.op.exp2->tempCount = exp->__anon1.op.exp1->tempCount;
3280 ProcessExpression(exp->__anon1.op.exp2);
3281 }
3282 break;
3283 }
3284 case 32:
3285 case 5:
3286 {
3287 struct Expression * e;
3288
3289 for(e = (*exp->__anon1.list).first; e; e = e->next)
3290 {
3291 int __simpleStruct2, __simpleStruct3;
3292 int __simpleStruct0, __simpleStruct1;
3293
3294 e->tempCount = (__simpleStruct0 = e->tempCount, __simpleStruct1 = exp->tempCount, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
3295 if(!e->next)
3296 {
3297 e->usage |= (exp->usage & ((((unsigned int)(1)) | (((unsigned int)(1)) << 2))));
3298 }
3299 ProcessExpression(e);
3300 exp->tempCount = (__simpleStruct2 = exp->tempCount, __simpleStruct3 = e->tempCount, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
3301 }
3302 break;
3303 }
3304 case 6:
3305 {
3306 struct Expression * e;
3307
3308 exp->__anon1.index.exp->usage = (exp->__anon1.index.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3309 ProcessExpression(exp->__anon1.index.exp);
3310 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
3311 {
3312 if(!e->next)
3313 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3314 ProcessExpression(e);
3315 }
3316 exp->tempCount = exp->__anon1.index.exp->tempCount;
3317 break;
3318 }
3319 case 7:
3320 {
3321 struct Expression * e;
3322
3323 ProcessExpression(exp->__anon1.call.exp);
3324 if(exp->__anon1.call.arguments)
3325 {
3326 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
3327 {
3328 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3329 e->usage = (e->usage & ~0x4) | (((unsigned int)(1)) << 2);
3330 ProcessExpression(e);
3331 }
3332 }
3333 break;
3334 }
3335 case 8:
3336 {
3337 exp->__anon1.member.exp->usage = (exp->__anon1.member.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3338 if(exp->__anon1.member.memberType == 3 && exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->thisClassFrom && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && !__ecereNameSpace__ecere__com__eClass_IsDerived(exp->__anon1.member.exp->expType->thisClassFrom, exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered))
3339 exp->__anon1.member.exp->expType->passAsTemplate = 1;
3340 ProcessExpression(exp->__anon1.member.exp);
3341 if(!exp->__anon1.member.memberType)
3342 {
3343 struct Type * type = exp->__anon1.member.exp->expType;
3344
3345 if((type && type->kind == 8 && exp->__anon1.member.member))
3346 {
3347 struct __ecereNameSpace__ecere__com__Class * _class = (exp->__anon1.member.member->_class && exp->__anon1.member.member->classSym) ? exp->__anon1.member.member->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)));
3348 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
3349 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
3350 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
3351 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
3352
3353 if(exp->__anon1.member.thisPtr)
3354 {
3355 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
3356 if(!member)
3357 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
3358 }
3359 else
3360 {
3361 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, (((void *)0)));
3362 if(!prop)
3363 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, (((void *)0)), (((void *)0)), (((void *)0)));
3364 if(!prop && !member)
3365 {
3366 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, (((void *)0)));
3367 if(!method)
3368 {
3369 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
3370 if(!prop)
3371 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
3372 }
3373 }
3374 }
3375 if(!prop && !member && !method)
3376 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, exp->__anon1.member.member->string, privateModule);
3377 if(!prop && !member && !method)
3378 {
3379 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
3380
3381 if(classSym)
3382 {
3383 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
3384
3385 if(convertClass)
3386 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
3387 }
3388 }
3389 if(prop)
3390 {
3391 exp->__anon1.member.memberType = 1;
3392 if(!prop->dataType)
3393 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
3394 FreeType(exp->expType);
3395 exp->expType = prop->dataType;
3396 if(prop->dataType)
3397 prop->dataType->refCount++;
3398 }
3399 else if(method)
3400 {
3401 exp->__anon1.member.memberType = 2;
3402 if(!method->dataType)
3403 ProcessMethodType(method);
3404 FreeType(exp->expType);
3405 exp->expType = method->dataType;
3406 if(method->dataType)
3407 method->dataType->refCount++;
3408 }
3409 else if(member)
3410 {
3411 exp->__anon1.member.memberType = 3;
3412 DeclareStruct(curExternal, _class->fullName, 0, 1);
3413 if(!member->dataType)
3414 member->dataType = ProcessTypeString(member->dataTypeString, 0);
3415 FreeType(exp->expType);
3416 exp->expType = member->dataType;
3417 if(member->dataType)
3418 member->dataType->refCount++;
3419 }
3420 else if(revConvert)
3421 {
3422 exp->__anon1.member.memberType = 4;
3423 FreeType(exp->expType);
3424 exp->expType = MkClassType(revConvert->_class->fullName);
3425 }
3426 }
3427 }
3428 break;
3429 }
3430 case 10:
3431 break;
3432 case 11:
3433 {
3434 exp->__anon1.cast.exp->usage |= exp->usage;
3435 ProcessExpression(exp->__anon1.cast.exp);
3436 break;
3437 }
3438 case 12:
3439 {
3440 struct Expression * e;
3441
3442 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3443 exp->__anon1.cond.cond->usage = (exp->__anon1.cond.cond->usage & ~0x1) | (((unsigned int)(1)) << 0);
3444 ProcessExpression(exp->__anon1.cond.cond);
3445 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
3446 {
3447 if(!e->next && ((unsigned int)((exp->usage & 0x1) >> 0)))
3448 e->usage = (e->usage & ~0x1) | (((unsigned int)(1)) << 0);
3449 ProcessExpression(e);
3450 }
3451 if(exp->__anon1.cond.elseExp)
3452 {
3453 if(((unsigned int)((exp->usage & 0x1) >> 0)))
3454 exp->__anon1.cond.elseExp->usage = (exp->__anon1.cond.elseExp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3455 ProcessExpression(exp->__anon1.cond.elseExp);
3456 }
3457 break;
3458 }
3459 case 23:
3460 {
3461 if(exp->__anon1.compound->__anon1.compound.statements && ((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->type == 3 && ((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions && (*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last)
3462 {
3463 ((struct Expression *)(*((struct Statement *)(*exp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last)->usage = exp->usage;
3464 }
3465 ProcessStatement(exp->__anon1.compound);
3466 break;
3467 }
3468 case 34:
3469 {
3470 ProcessExpression(exp->__anon1.vaArg.exp);
3471 break;
3472 }
3473 case 33:
3474 {
3475 ProcessInitializer(exp->__anon1.initializer.initializer);
3476 break;
3477 }
3478 }
3479 CheckTemplateTypes(exp);
3480 }
3481
3482 static unsigned int ProcessBracketInst_DataMember(struct __ecereNameSpace__ecere__com__DataMember * parentMember, struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * list, struct __ecereNameSpace__ecere__com__DataMember * namedParentMember, unsigned int parentMemberSet)
3483 {
3484 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
3485 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
3486 unsigned int someMemberSet = 0;
3487 int anonID = 1;
3488
3489 for(dataMember = parentMember->members.first; dataMember; dataMember = dataMember->next)
3490 {
3491 struct MembersInit * members;
3492 struct MemberInit * member = (((void *)0));
3493
3494 if(!dataMember->name && (dataMember->type == 1 || dataMember->type == 2))
3495 {
3496 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3497
3498 if(!ProcessBracketInst_DataMember(dataMember, inst, subList ? subList : list, dataMember->name ? dataMember : namedParentMember, someMemberSet || parentMemberSet || dataMember->prev))
3499 {
3500 if(subList)
3501 FreeList(subList, (void *)(FreeInitializer));
3502 return 0;
3503 }
3504 if(subList && (*subList).count)
3505 {
3506 struct Initializer * init = MkInitializerList(subList);
3507 char id[100];
3508
3509 sprintf(id, "__anon%d", anonID);
3510 init->id = MkIdentifier(id);
3511 ListAdd(list, init);
3512 someMemberSet = 1;
3513 }
3514 else
3515 {
3516 if(list->count)
3517 someMemberSet = 1;
3518 (__ecereNameSpace__ecere__com__eSystem_Delete(subList), subList = 0);
3519 }
3520 anonID++;
3521 }
3522 else
3523 {
3524 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
3525 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
3526 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
3527 int subMemberStackPos = 0;
3528 unsigned int found = 0;
3529
3530 if(inst->members && (*inst->members).first)
3531 {
3532 for(members = (*inst->members).first; members; members = members->next)
3533 {
3534 if(members->type == 0)
3535 {
3536 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
3537 {
3538 if(member->identifiers)
3539 {
3540 struct Identifier * firstID = (*member->identifiers).first;
3541 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
3542 int _subMemberStackPos = 0;
3543 struct __ecereNameSpace__ecere__com__DataMember * thisMember;
3544
3545 thisMember = firstID ? (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(classSym->__anon1.registered, firstID->string, privateModule) : (((void *)0));
3546 if(!thisMember && firstID)
3547 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(classSym->__anon1.registered, firstID->string, privateModule, _subMemberStack, &_subMemberStackPos);
3548 if(thisMember && thisMember->memberAccess == 1)
3549 {
3550 curMember = thisMember;
3551 curClass = curMember->_class;
3552 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
3553 subMemberStackPos = _subMemberStackPos;
3554 }
3555 if(dataMember == thisMember)
3556 {
3557 if((*member->identifiers).count > 1 && member->initializer && member->initializer->type == 0)
3558 {
3559 struct __ecereNameSpace__ecere__sys__OldList * partList = MkList();
3560 struct Symbol * symbol;
3561 struct Specifier * spec;
3562 struct MembersInit * nextMembers;
3563 struct MemberInit * next = member->next;
3564
3565 if(!dataMember->dataType)
3566 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3567 symbol = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3568 spec = _MkSpecifierName(dataMember->dataTypeString, symbol, (((void *)0)));
3569 {
3570 struct __ecereNameSpace__ecere__sys__OldList * identifiers = MkList();
3571 struct Identifier * id;
3572
3573 for(id = ((struct Identifier *)(*member->identifiers).first)->next; id; id = id->next)
3574 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*identifiers), CopyIdentifier(id));
3575 ListAdd(partList, MkMemberInit(identifiers, MkInitializerAssignment(member->initializer->__anon1.exp)));
3576 }
3577 for(nextMembers = members; nextMembers; nextMembers = nextMembers->next)
3578 {
3579 if(!nextMembers->__anon1.dataMembers)
3580 continue;
3581 if(members != nextMembers)
3582 next = (*nextMembers->__anon1.dataMembers).first;
3583 if(nextMembers->type == 0)
3584 {
3585 struct MemberInit * nextMember;
3586
3587 for(nextMember = next; nextMember; nextMember = next, next = nextMember ? nextMember->next : (((void *)0)))
3588 {
3589 struct Identifier * nextID = (*nextMember->identifiers).first;
3590
3591 if(nextMember->identifiers && (*nextMember->identifiers).count > 1 && !strcmp(firstID->string, nextID->string))
3592 {
3593 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMembers->__anon1.dataMembers), nextMember);
3594 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*nextMember->identifiers), nextID);
3595 ListAdd(partList, nextMember);
3596 FreeIdentifier(nextID);
3597 }
3598 }
3599 }
3600 }
3601 member->initializer->__anon1.exp = MkExpInstance(MkInstantiation(spec, (((void *)0)), MkListOne(MkMembersInitList(partList))));
3602 }
3603 found = 1;
3604 break;
3605 }
3606 }
3607 else
3608 {
3609 __ecereNameSpace__ecere__com__eClass_FindNextMember(classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
3610 if(curMember == dataMember)
3611 {
3612 found = 1;
3613 break;
3614 }
3615 }
3616 }
3617 }
3618 if(found)
3619 break;
3620 }
3621 }
3622 if(member && member->initializer && member->initializer->type == 0)
3623 {
3624 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3625
3626 if(namedParentMember->type == 1 && dataMember->name)
3627 init->id = MkIdentifier(dataMember->name);
3628 if(member->initializer->__anon1.exp->type == 1 && member->initializer->__anon1.exp->expType && member->initializer->__anon1.exp->expType->__anon1._class->__anon1.registered->type == 1)
3629 {
3630 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3631
3632 ProcessBracketInst(member->initializer->__anon1.exp->__anon1.instance, subList);
3633 FreeExpression(member->initializer->__anon1.exp);
3634 if((*subList).count)
3635 {
3636 init->type = 1;
3637 init->__anon1.list = subList;
3638 }
3639 else
3640 {
3641 FreeInitializer(init);
3642 init = (((void *)0));
3643 }
3644 }
3645 else
3646 {
3647 member->initializer->__anon1.exp->usage = (member->initializer->__anon1.exp->usage & ~0x1) | (((unsigned int)(1)) << 0);
3648 ProcessExpression(member->initializer->__anon1.exp);
3649 init->type = 0;
3650 init->__anon1.exp = member->initializer->__anon1.exp;
3651 }
3652 if(init)
3653 ListAdd(list, init);
3654 member->initializer->__anon1.exp = (((void *)0));
3655 FreeInitializer(member->initializer);
3656 member->initializer = (((void *)0));
3657 someMemberSet = 1;
3658 }
3659 else if(member && member->initializer && member->initializer->type == 1)
3660 {
3661 if(namedParentMember->type == 1 && dataMember->name)
3662 member->initializer->id = MkIdentifier(dataMember->name);
3663 ListAdd(list, member->initializer);
3664 member->initializer = (((void *)0));
3665 someMemberSet = 1;
3666 }
3667 else if(dataMember && dataMember->dataTypeString && parentMember->type != 1 && namedParentMember->type != 1)
3668 {
3669 struct Symbol * classSym;
3670 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3671
3672 if(namedParentMember->type == 1 && dataMember->name)
3673 init->id = MkIdentifier(dataMember->name);
3674 if(!dataMember->dataType)
3675 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3676 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3677 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3678 {
3679 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3680 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
3681 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
3682
3683 ProcessBracketInst(inst, subList);
3684 FreeInstance(inst);
3685 if((*subList).count)
3686 {
3687 init->type = 1;
3688 init->__anon1.list = subList;
3689 }
3690 else
3691 {
3692 FreeInitializer(init);
3693 init = (((void *)0));
3694 }
3695 }
3696 else
3697 {
3698 init->type = 0;
3699 init->__anon1.exp = MkExpConstant("0");
3700 }
3701 someMemberSet = 1;
3702 if(init)
3703 ListAdd(list, init);
3704 }
3705 }
3706 }
3707 if(!someMemberSet && !parentMemberSet)
3708 {
3709 struct Symbol * classSym;
3710 struct Initializer * init = (init = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Initializer), init->loc = yylloc, init);
3711
3712 dataMember = parentMember->members.first;
3713 if(namedParentMember->type == 1 && dataMember->name)
3714 init->id = MkIdentifier(dataMember->name);
3715 if(!dataMember->dataType && dataMember->dataTypeString)
3716 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3717 classSym = (dataMember->dataType && dataMember->dataType->kind == 8) ? dataMember->dataType->__anon1._class : (((void *)0));
3718 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3719 {
3720 struct __ecereNameSpace__ecere__sys__OldList * subList = MkList();
3721 struct Specifier * spec = _MkSpecifierName(dataMember->dataTypeString, classSym, (((void *)0)));
3722 struct Instantiation * inst = MkInstantiation(spec, (((void *)0)), (((void *)0)));
3723
3724 ProcessBracketInst(inst, subList);
3725 FreeInstance(inst);
3726 init->type = 1;
3727 init->__anon1.list = subList;
3728 }
3729 else if(dataMember->dataType && (dataMember->dataType->kind == 12 || dataMember->dataType->kind == 9))
3730 {
3731 struct Type * t = dataMember->dataType->kind == 12 ? dataMember->dataType->__anon1.type : dataMember->dataType->__anon1.__anon1.members.first;
3732 struct Initializer * i = MkInitializerAssignment(MkExpConstant("0"));
3733
3734 while(t && (t->kind == 12 || t->kind == 9))
3735 {
3736 i = MkInitializerList(MkListOne(i));
3737 if(t->kind == 12)
3738 t = t->__anon1.type;
3739 else if(t->kind == 9)
3740 t = t->__anon1.__anon1.members.first;
3741 }
3742 init->type = 1;
3743 init->__anon1.list = MkListOne(i);
3744 }
3745 else
3746 {
3747 init->type = 0;
3748 init->__anon1.exp = MkExpConstant("0");
3749 }
3750 ListAdd(list, init);
3751 }
3752 return 1;
3753 }
3754
3755 static void ProcessDeclaration(struct Declaration * decl)
3756 {
3757 yylloc = decl->loc;
3758 switch(decl->type)
3759 {
3760 case 1:
3761 {
3762 if(!curDecl)
3763 {
3764 curDecl = decl;
3765 declTempCount = 0;
3766 }
3767 if(decl->__anon1.__anon1.specifiers)
3768 {
3769 struct Specifier * s;
3770
3771 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
3772 {
3773 ProcessSpecifier(s);
3774 }
3775 }
3776 if(decl->__anon1.__anon1.declarators)
3777 {
3778 struct InitDeclarator * d;
3779
3780 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
3781 {
3782 if(d->initializer)
3783 ProcessInitializer(d->initializer);
3784 }
3785 }
3786 if(curDecl == decl)
3787 {
3788 curDecl = (((void *)0));
3789 declTempCount = 0;
3790 }
3791 break;
3792 }
3793 case 2:
3794 {
3795 struct Instantiation * inst = decl->__anon1.inst;
3796
3797 if(inCompiler)
3798 {
3799 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
3800
3801 if(!curCompound)
3802 {
3803 struct Statement * stmt;
3804
3805 if(!inst->isConstant || (classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0 || classSym->__anon1.registered->type == 5)))
3806 {
3807 decl->type = 1;
3808 decl->__anon1.__anon1.specifiers = MkListOne(MkSpecifierName(inst->_class->__anon1.__anon1.name));
3809 if(decl->declMode == 3)
3810 {
3811 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.__anon1.specifiers), (((void *)0)), MkSpecifier(STATIC));
3812 }
3813 decl->__anon1.__anon1.declarators = MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(inst->exp->__anon1.__anon1.identifier->string)), (((void *)0))));
3814 ProcessDeclaration(decl);
3815 CreateInstancesBody();
3816 {
3817 struct Expression * exp = MkExpInstance(inst);
3818
3819 stmt = MkExpressionStmt(MkListOne(exp));
3820 ListAdd(createInstancesBody->__anon1.compound.statements, stmt);
3821 ProcessExpressionType(exp);
3822 }
3823 if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 0))
3824 {
3825 ListAdd(createInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_IncRef")), MkListOne(CopyExpression(inst->exp))))));
3826 {
3827 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3828
3829 ListAddFront(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3830 ProcessExpressionType(exp);
3831 }
3832 }
3833 else if(classSym && classSym->__anon1.registered && (classSym->__anon1.registered->type == 5))
3834 {
3835 struct Expression * exp = MkExpOp((((void *)0)), DELETE, CopyExpression(inst->exp));
3836
3837 ListAddFront(destroyInstancesBody->__anon1.compound.statements, MkExpressionStmt(MkListOne(exp)));
3838 ProcessExpressionType(exp);
3839 }
3840 __ecereMethod_External_CreateEdge(createInstancesExternal, curExternal, 0);
3841 __ecereMethod_External_CreateEdge(destroyInstancesExternal, curExternal, 0);
3842 break;
3843 }
3844 else
3845 {
3846 CreateInstancesBody();
3847 }
3848 }
3849 {
3850 char className[1024];
3851
3852 className[0] = 0;
3853 decl->type = 1;
3854 decl->__anon1.__anon1.specifiers = MkList();
3855 decl->__anon1.__anon1.declarators = MkList();
3856 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 2)
3857 {
3858 struct __ecereNameSpace__ecere__sys__OldList list =
3859 {
3860 0
3861 };
3862
3863 ProcessInstMembers(inst, inst->exp, &list, 0);
3864 ProcessExpression(inst->exp);
3865 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3866 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3867 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3868 }
3869 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 3)
3870 {
3871 struct __ecereNameSpace__ecere__sys__OldList list =
3872 {
3873 0
3874 };
3875
3876 ProcessInstMembers(inst, inst->exp, &list, 0);
3877 ProcessExpression(inst->exp);
3878 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3879 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(list.first)));
3880 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3881 }
3882 else if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3883 {
3884 struct Expression * exp;
3885
3886 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
3887 ProcessExpression(inst->exp);
3888 {
3889 if(inst->fullSet)
3890 {
3891 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3892 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), (((void *)0))));
3893 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3894 }
3895 else
3896 {
3897 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
3898
3899 if(ProcessBracketInst(inst, list))
3900 {
3901 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3902 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerList(list)));
3903 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3904 }
3905 else
3906 {
3907 FreeList(list, (void *)(FreeInitializer));
3908 exp = MkExpBrackets(MkList());
3909 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 1);
3910 ListAdd(exp->__anon1.list, CopyExpression(inst->exp));
3911 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3912 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(inst->exp->__anon1.__anon1.identifier), MkInitializerAssignment(exp)));
3913 inst->exp->__anon1.__anon1.identifier = (((void *)0));
3914 }
3915 }
3916 }
3917 }
3918 else
3919 {
3920 struct Expression * newCall;
3921
3922 strcpy(className, "__ecereClass_");
3923 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && classSym->__anon1.registered->templateClass)
3924 {
3925 classSym = FindClass(classSym->__anon1.registered->templateClass->fullName);
3926 FullClassNameCat(className, classSym->string, 1);
3927 }
3928 else
3929 FullClassNameCat(className, inst->_class->__anon1.__anon1.name, 1);
3930 if(classSym)
3931 DeclareClass(curExternal, classSym, className);
3932 if(classSym && classSym->__anon1.registered && classSym->__anon1.registered->type == 5 && (classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->fixed : classSym->__anon1.registered->fixed))
3933 {
3934 char size[256];
3935 struct __ecereNameSpace__ecere__com__Class * c = classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass : classSym->__anon1.registered;
3936 struct Expression * e = MkExpClassSize(MkSpecifierName(c->name));
3937
3938 ProcessExpressionType(e);
3939 sprintf(size, "%d", c->structSize);
3940 newCall = MkExpCall(QMkExpId("ecere::com::eSystem_New0"), MkListOne(e));
3941 }
3942 else
3943 {
3944 newCall = MkExpCall(QMkExpId("ecere::com::eInstance_New"), MkListOne(QMkExpId(className)));
3945 ProcessExpressionType(newCall);
3946 newCall->byReference = 1;
3947 }
3948 if(inst->exp)
3949 {
3950 struct Expression * exp, * newExp;
3951 struct Identifier * id = CopyIdentifier(inst->exp->__anon1.__anon1.identifier);
3952
3953 if(inst->members && (*inst->members).first)
3954 {
3955 newExp = MkExpOp(CopyExpression(inst->exp), '=', newCall);
3956 exp = MkExpBrackets(MkList());
3957 ListAdd(exp->__anon1.list, newExp);
3958 ProcessInstMembers(inst, inst->exp, exp->__anon1.list, 0);
3959 ListAdd(exp->__anon1.list, inst->exp);
3960 ProcessExpression(inst->exp);
3961 inst->exp = (((void *)0));
3962 }
3963 else
3964 exp = newCall;
3965 ListAdd(decl->__anon1.__anon1.specifiers, MkSpecifierName(inst->_class->__anon1.__anon1.name));
3966 ListAdd(decl->__anon1.__anon1.declarators, MkInitDeclarator(MkDeclaratorIdentifier(id), MkInitializerAssignment(exp)));
3967 }
3968 else
3969 FreeExpression(newCall);
3970 }
3971 }
3972 FreeInstance(inst);
3973 }
3974 else
3975 ProcessInstantiation(inst);
3976 break;
3977 }
3978 case 0:
3979 {
3980 if(decl->__anon1.__anon1.specifiers)
3981 {
3982 struct Specifier * spec;
3983
3984 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3985 ProcessSpecifier(spec);
3986 }
3987 break;
3988 }
3989 }
3990 }
3991