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