compiler/libec; ecere; ide: (Emscripten WIP) Address virtual method issues
[sdk] / compiler / bootstrap / libec / bootstrap / pass15.c
1 /* Code generated from eC source file: pass15.ec */
2 #if defined(_WIN32)
3 #define __runtimePlatform 1
4 #elif defined(__APPLE__)
5 #define __runtimePlatform 3
6 #else
7 #define __runtimePlatform 2
8 #endif
9 #if defined(__GNUC__)
10 typedef long long int64;
11 typedef unsigned long long uint64;
12 #ifndef _WIN32
13 #define __declspec(x)
14 #endif
15 #elif defined(__TINYC__)
16 #include <stdarg.h>
17 #define __builtin_va_list va_list
18 #define __builtin_va_start va_start
19 #define __builtin_va_end va_end
20 #ifdef _WIN32
21 #define strcasecmp stricmp
22 #define strncasecmp strnicmp
23 #define __declspec(x) __attribute__((x))
24 #else
25 #define __declspec(x)
26 #endif
27 typedef long long int64;
28 typedef unsigned long long uint64;
29 #else
30 typedef __int64 int64;
31 typedef unsigned __int64 uint64;
32 #endif
33 #ifdef __BIG_ENDIAN__
34 #define __ENDIAN_PAD(x) (8 - (x))
35 #else
36 #define __ENDIAN_PAD(x) 0
37 #endif
38 #if defined(_WIN32)
39 #   if defined(__GNUC__) || defined(__TINYC__)
40 #      define ecere_stdcall __attribute__((__stdcall__))
41 #      define ecere_gcc_struct __attribute__((gcc_struct))
42 #   else
43 #      define ecere_stdcall __stdcall
44 #      define ecere_gcc_struct
45 #   endif
46 #else
47 #   define ecere_stdcall
48 #   define ecere_gcc_struct
49 #endif
50 #include <stdint.h>
51 #include <sys/types.h>
52 enum yytokentype
53 {
54 IDENTIFIER = 258, CONSTANT = 259, STRING_LITERAL = 260, SIZEOF = 261, PTR_OP = 262, INC_OP = 263, DEC_OP = 264, LEFT_OP = 265, RIGHT_OP = 266, LE_OP = 267, GE_OP = 268, EQ_OP = 269, NE_OP = 270, AND_OP = 271, OR_OP = 272, MUL_ASSIGN = 273, DIV_ASSIGN = 274, MOD_ASSIGN = 275, ADD_ASSIGN = 276, SUB_ASSIGN = 277, LEFT_ASSIGN = 278, RIGHT_ASSIGN = 279, AND_ASSIGN = 280, XOR_ASSIGN = 281, OR_ASSIGN = 282, TYPE_NAME = 283, TYPEDEF = 284, EXTERN = 285, STATIC = 286, AUTO = 287, REGISTER = 288, CHAR = 289, SHORT = 290, INT = 291, UINT = 292, INT64 = 293, LONG = 294, SIGNED = 295, UNSIGNED = 296, FLOAT = 297, DOUBLE = 298, CONST = 299, VOLATILE = 300, VOID = 301, VALIST = 302, STRUCT = 303, UNION = 304, ENUM = 305, ELLIPSIS = 306, CASE = 307, DEFAULT = 308, IF = 309, SWITCH = 310, WHILE = 311, DO = 312, FOR = 313, GOTO = 314, CONTINUE = 315, BREAK = 316, RETURN = 317, IFX = 318, ELSE = 319, CLASS = 320, THISCLASS = 321, CLASS_NAME = 322, PROPERTY = 323, SETPROP = 324, GETPROP = 325, NEWOP = 326, RENEW = 327, DELETE = 328, EXT_DECL = 329, EXT_STORAGE = 330, IMPORT = 331, DEFINE = 332, VIRTUAL = 333, ATTRIB = 334, PUBLIC = 335, PRIVATE = 336, TYPED_OBJECT = 337, ANY_OBJECT = 338, _INCREF = 339, EXTENSION = 340, ASM = 341, TYPEOF = 342, WATCH = 343, STOPWATCHING = 344, FIREWATCHERS = 345, WATCHABLE = 346, CLASS_DESIGNER = 347, CLASS_NO_EXPANSION = 348, CLASS_FIXED = 349, ISPROPSET = 350, CLASS_DEFAULT_PROPERTY = 351, PROPERTY_CATEGORY = 352, CLASS_DATA = 353, CLASS_PROPERTY = 354, SUBCLASS = 355, NAMESPACE = 356, NEW0OP = 357, RENEW0 = 358, VAARG = 359, DBTABLE = 360, DBFIELD = 361, DBINDEX = 362, DATABASE_OPEN = 363, ALIGNOF = 364, ATTRIB_DEP = 365, __ATTRIB = 366, BOOL = 367, _BOOL = 368, _COMPLEX = 369, _IMAGINARY = 370, RESTRICT = 371, THREAD = 372, WIDE_STRING_LITERAL = 373, BUILTIN_OFFSETOF = 374
55 };
56
57 extern int returnCode;
58
59 extern unsigned int yydebug;
60
61 extern unsigned int echoOn;
62
63 void resetScanner();
64
65 int propWatcherID;
66
67 int expression_yyparse();
68
69 static char * thisNameSpace;
70
71 unsigned int thisClassParams = 1;
72
73 unsigned int internalValueCounter;
74
75 extern unsigned int outputLineNumbers;
76
77 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isInf;
78
79 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_signBit;
80
81 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isNan;
82
83 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isInf;
84
85 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_signBit;
86
87 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isNan;
88
89 extern int targetBits;
90
91 extern unsigned int inCompiler;
92
93 extern unsigned int inPreCompiler;
94
95 extern unsigned int inDebugger;
96
97 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
98
99 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
100
101 int UnescapeString(char * d, char * s, int len)
102 {
103 int j = 0, k = 0;
104 char ch;
105
106 while(j < len && (ch = s[j]))
107 {
108 switch(ch)
109 {
110 case '\\':
111 switch((ch = s[++j]))
112 {
113 case 'n':
114 d[k] = '\n';
115 break;
116 case 't':
117 d[k] = '\t';
118 break;
119 case 'a':
120 d[k] = '\a';
121 break;
122 case 'b':
123 d[k] = '\b';
124 break;
125 case 'f':
126 d[k] = '\f';
127 break;
128 case 'r':
129 d[k] = '\r';
130 break;
131 case 'v':
132 d[k] = '\v';
133 break;
134 case '\\':
135 d[k] = '\\';
136 break;
137 case '\"':
138 d[k] = '\"';
139 break;
140 case '\'':
141 d[k] = '\'';
142 break;
143 default:
144 d[k] = '\\';
145 d[k] = ch;
146 }
147 break;
148 default:
149 d[k] = ch;
150 }
151 j++, k++;
152 }
153 d[k] = '\0';
154 return k;
155 }
156
157 char * OffsetEscapedString(char * s, int len, int offset)
158 {
159 char ch;
160 int j = 0, k = 0;
161
162 while(j < len && k < offset && (ch = s[j]))
163 {
164 if(ch == '\\')
165 ++j;
166 j++, k++;
167 }
168 return (k == offset) ? s + j : (((void *)0));
169 }
170
171 extern int __ecereVMethodID_class_OnGetString;
172
173 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_isPointerType;
174
175 extern unsigned int parseError;
176
177 static int definedExpStackPos;
178
179 static void * definedExpStack[512];
180
181 extern const char *  sourceFile;
182
183 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
184
185 unsigned int reachedPass15;
186
187 extern unsigned int memoryGuard;
188
189 struct __ecereNameSpace__ecere__sys__OldList
190 {
191 void *  first;
192 void *  last;
193 int count;
194 unsigned int offset;
195 unsigned int circ;
196 } ecere_gcc_struct;
197
198 struct __ecereNameSpace__ecere__com__DataValue
199 {
200 union
201 {
202 char c;
203 unsigned char uc;
204 short s;
205 unsigned short us;
206 int i;
207 unsigned int ui;
208 void *  p;
209 float f;
210 double d;
211 long long i64;
212 uint64 ui64;
213 } ecere_gcc_struct __anon1;
214 } ecere_gcc_struct;
215
216 struct __ecereNameSpace__ecere__com__SerialBuffer
217 {
218 unsigned char *  _buffer;
219 unsigned int count;
220 unsigned int _size;
221 unsigned int pos;
222 } ecere_gcc_struct;
223
224 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
225
226 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
227
228 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
229
230 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
231
232 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void *  memory);
233
234 struct Pointer;
235
236 struct Attrib;
237
238 struct Attribute;
239
240 struct TemplateArgument;
241
242 struct DBTableEntry;
243
244 struct DBIndexItem;
245
246 struct DBTableDef;
247
248 struct CodePosition
249 {
250 int line;
251 int charPos;
252 int pos;
253 int included;
254 } ecere_gcc_struct;
255
256 extern size_t strlen(const char * );
257
258 extern int strcmp(const char * , const char * );
259
260 extern int sprintf(char * , const char * , ...);
261
262 extern char *  strcat(char * , const char * );
263
264 extern char *  __ecereNameSpace__ecere__sys__CopyString(const char *  string);
265
266 extern int isprint(int c);
267
268 extern char *  strcpy(char * , const char * );
269
270 extern void Compiler_Error(const char *  format, ...);
271
272 extern const char *  __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char *  string, const char *  stringAndContext);
273
274 struct __ecereNameSpace__ecere__com__LinkList
275 {
276 void * first;
277 void * last;
278 int count;
279 } ecere_gcc_struct;
280
281 extern char *  strchr(const char * , int);
282
283 extern void FullClassNameCat(char *  output, const char *  className, unsigned int includeTemplateParams);
284
285 extern void *  memcpy(void * , const void * , size_t size);
286
287 extern void __ecereNameSpace__ecere__sys__ChangeCh(char *  string, char ch1, char ch2);
288
289 extern void Compiler_Warning(const char *  format, ...);
290
291 extern unsigned long strtoul(const char *  nptr, char * *  endptr, int base);
292
293 extern long long strtoll(const char *  nptr, char * *  endptr, int base);
294
295 extern uint64 strtoull(const char *  nptr, char * *  endptr, int base);
296
297 extern int strtol(const char * , char * * , int base);
298
299 extern long long __ecereNameSpace__ecere__com___strtoi64(const char *  string, const char * *  endString, int base);
300
301 extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char *  string, const char * *  endString, int base);
302
303 extern double strtod(const char * , char * * );
304
305 extern int strncmp(const char * , const char * , size_t n);
306
307 extern char *  __ecereNameSpace__ecere__sys__RSearchString(const char *  buffer, const char *  subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
308
309 extern char *  QMkString(const char *  source);
310
311 extern char *  strncpy(char * , const char * , size_t n);
312
313 extern int printf(const char * , ...);
314
315 extern char *  strstr(const char * , const char * );
316
317 extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char *  string, int *  numBytes);
318
319 extern unsigned int (* __ecereProp_float_Get_isInf)(float this);
320
321 extern int (* __ecereProp_float_Get_signBit)(float this);
322
323 extern unsigned int (* __ecereProp_float_Get_isNan)(float this);
324
325 extern unsigned int (* __ecereProp_double_Get_isInf)(double this);
326
327 extern int (* __ecereProp_double_Get_signBit)(double this);
328
329 extern unsigned int (* __ecereProp_double_Get_isNan)(double this);
330
331 extern float (* __ecereMethod_float_inf)(void);
332
333 extern float (* __ecereMethod_float_nan)(void);
334
335 extern double (* __ecereMethod_double_inf)(void);
336
337 extern double (* __ecereMethod_double_nan)(void);
338
339 int __ecereVMethodID_class_OnGetString;
340
341 void SetYydebug(unsigned int b)
342 {
343 yydebug = b;
344 }
345
346 unsigned int GetParseError()
347 {
348 return parseError;
349 }
350
351 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
352
353 extern struct __ecereNameSpace__ecere__sys__OldList *  MkList(void);
354
355 extern struct __ecereNameSpace__ecere__sys__OldList *  MkListOne(void *  item);
356
357 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void *  item);
358
359 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (*  FreeFunction)(void * ));
360
361 struct __ecereNameSpace__ecere__com__EnumClassData
362 {
363 struct __ecereNameSpace__ecere__sys__OldList values;
364 long long largest;
365 } ecere_gcc_struct;
366
367 extern struct __ecereNameSpace__ecere__sys__OldList *  CopyList(struct __ecereNameSpace__ecere__sys__OldList *  source, void *  (*  CopyFunction)(void * ));
368
369 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
370
371 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void *  prevItem, void *  item);
372
373 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
374
375 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
376
377 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
378
379 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
380
381 extern struct Attrib * MkAttrib(int type, struct __ecereNameSpace__ecere__sys__OldList *  attribs);
382
383 struct Location
384 {
385 struct CodePosition start;
386 struct CodePosition end;
387 } ecere_gcc_struct;
388
389 void ReadString(char * output, char * string)
390 {
391 int len = strlen(string);
392 int c, d = 0;
393 unsigned int quoted = 0, escaped = 0;
394
395 for(c = 0; c < len; c++)
396 {
397 char ch = string[c];
398
399 if(escaped)
400 {
401 switch(ch)
402 {
403 case 'n':
404 output[d] = '\n';
405 break;
406 case 't':
407 output[d] = '\t';
408 break;
409 case 'a':
410 output[d] = '\a';
411 break;
412 case 'b':
413 output[d] = '\b';
414 break;
415 case 'f':
416 output[d] = '\f';
417 break;
418 case 'r':
419 output[d] = '\r';
420 break;
421 case 'v':
422 output[d] = '\v';
423 break;
424 case '\\':
425 output[d] = '\\';
426 break;
427 case '\"':
428 output[d] = '\"';
429 break;
430 case '\'':
431 output[d] = '\'';
432 break;
433 default:
434 output[d] = ch;
435 }
436 d++;
437 escaped = 0;
438 }
439 else
440 {
441 if(ch == '\"')
442 quoted ^= 1;
443 else if(quoted)
444 {
445 if(ch == '\\')
446 escaped = 1;
447 else
448 output[d++] = ch;
449 }
450 }
451 }
452 output[d] = '\0';
453 }
454
455 char * PrintInt(long long result)
456 {
457 char temp[100];
458
459 if(result > (((int)0x7fffffff)))
460 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
461 else
462 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
463 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
464 strcat(temp, "LL");
465 return __ecereNameSpace__ecere__sys__CopyString(temp);
466 }
467
468 char * PrintUInt(uint64 result)
469 {
470 char temp[100];
471
472 if(result > (0xffffffff))
473 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
474 else if(result > (((int)0x7fffffff)))
475 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
476 else
477 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
478 return __ecereNameSpace__ecere__sys__CopyString(temp);
479 }
480
481 char * PrintInt64(long long result)
482 {
483 char temp[100];
484
485 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
486 sprintf(temp, ((__runtimePlatform == 1) ? "%I64dLL" : "%lldLL"), result);
487 else
488 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
489 return __ecereNameSpace__ecere__sys__CopyString(temp);
490 }
491
492 char * PrintUInt64(uint64 result)
493 {
494 char temp[100];
495
496 if(result > (0xffffffff))
497 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
498 else if(result > (((int)0x7fffffff)))
499 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
500 else
501 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
502 return __ecereNameSpace__ecere__sys__CopyString(temp);
503 }
504
505 char * PrintHexUInt(uint64 result)
506 {
507 char temp[100];
508
509 if(result > (0xffffffff))
510 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
511 else
512 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
513 if(result > (0xffffffff))
514 strcat(temp, "LL");
515 return __ecereNameSpace__ecere__sys__CopyString(temp);
516 }
517
518 char * PrintHexUInt64(uint64 result)
519 {
520 char temp[100];
521
522 if(result > (0xffffffff))
523 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
524 else
525 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
526 return __ecereNameSpace__ecere__sys__CopyString(temp);
527 }
528
529 char * PrintShort(short result)
530 {
531 char temp[100];
532
533 sprintf(temp, "%d", (unsigned short)result);
534 return __ecereNameSpace__ecere__sys__CopyString(temp);
535 }
536
537 char * PrintUShort(unsigned short result)
538 {
539 char temp[100];
540
541 if(result > 32767)
542 sprintf(temp, "0x%X", (int)result);
543 else
544 sprintf(temp, "%d", (int)result);
545 return __ecereNameSpace__ecere__sys__CopyString(temp);
546 }
547
548 char * PrintUChar(unsigned char result)
549 {
550 char temp[100];
551
552 sprintf(temp, "0x%X", result);
553 return __ecereNameSpace__ecere__sys__CopyString(temp);
554 }
555
556 char * PrintChar(char result)
557 {
558 char temp[100];
559
560 if(result > 0 && isprint(result))
561 sprintf(temp, "'%c'", result);
562 else if(result < 0)
563 sprintf(temp, "%d", (int)result);
564 else
565 sprintf(temp, "0x%X", (unsigned char)result);
566 return __ecereNameSpace__ecere__sys__CopyString(temp);
567 }
568
569 char * PrintFloat(float result)
570 {
571 char temp[350];
572
573 if(__ecereProp_float_Get_isInf(result))
574 {
575 if(__ecereProp_float_Get_signBit(result))
576 strcpy(temp, "-inf");
577 else
578 strcpy(temp, "inf");
579 }
580 else if(__ecereProp_float_Get_isNan(result))
581 {
582 if(__ecereProp_float_Get_signBit(result))
583 strcpy(temp, "-nan");
584 else
585 strcpy(temp, "nan");
586 }
587 else
588 sprintf(temp, "%.16ff", result);
589 return __ecereNameSpace__ecere__sys__CopyString(temp);
590 }
591
592 char * PrintDouble(double result)
593 {
594 char temp[350];
595
596 if(__ecereProp_double_Get_isInf(result))
597 {
598 if(__ecereProp_double_Get_signBit(result))
599 strcpy(temp, "-inf");
600 else
601 strcpy(temp, "inf");
602 }
603 else if(__ecereProp_double_Get_isNan(result))
604 {
605 if(__ecereProp_double_Get_signBit(result))
606 strcpy(temp, "-nan");
607 else
608 strcpy(temp, "nan");
609 }
610 else
611 sprintf(temp, "%.16f", result);
612 return __ecereNameSpace__ecere__sys__CopyString(temp);
613 }
614
615 extern struct Location yylloc;
616
617 struct ExtDecl
618 {
619 struct Location loc;
620 int type;
621 union
622 {
623 char * s;
624 struct Attrib * attr;
625 } ecere_gcc_struct __anon1;
626 } ecere_gcc_struct;
627
628 extern struct ExtDecl * MkExtDeclAttrib(struct Attrib * attr);
629
630 struct Expression;
631
632 extern struct Expression * parsedExpression;
633
634 extern struct Expression * QMkExpId(const char *  id);
635
636 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
637
638 void ComputeExpression(struct Expression * exp);
639
640 extern struct Expression * MkExpConstant(const char *  string);
641
642 extern struct Attribute * MkAttribute(char * attr, struct Expression * exp);
643
644 extern void FreeExpression(struct Expression * exp);
645
646 extern void FreeExpContents(struct Expression * exp);
647
648 extern struct Expression * GetNonBracketsExp(struct Expression * exp);
649
650 extern struct Expression * CopyExpression(struct Expression * exp);
651
652 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
653
654 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
655
656 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
657
658 extern struct Expression * MoveExpContents(struct Expression * exp);
659
660 extern struct Expression * QBrackets(struct Expression * exp);
661
662 extern struct Expression * QMkExpCond(struct Expression * cond, struct Expression * exp, struct Expression * elseExp);
663
664 struct Statement;
665
666 static struct Statement * curCompound;
667
668 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
669
670 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
671
672 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
673
674 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
675
676 extern struct Statement * MkWhileStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement);
677
678 extern struct Statement * MkFireWatchersStmt(struct Expression * object, struct __ecereNameSpace__ecere__sys__OldList * watches);
679
680 struct External;
681
682 struct External * curExternal, * afterExternal;
683
684 extern void FreeExternal(struct External * external);
685
686 struct Type;
687
688 static struct Type * curSwitchType;
689
690 extern struct Type * ProcessTypeString(const char *  string, unsigned int staticMethod);
691
692 extern void FreeType(struct Type * type);
693
694 extern struct Type * MkClassType(const char *  name);
695
696 extern void CopyTypeInto(struct Type * type, struct Type * src);
697
698 struct __ecereNameSpace__ecere__com__Class;
699
700 struct __ecereNameSpace__ecere__com__Instance
701 {
702 void * *  _vTbl;
703 struct __ecereNameSpace__ecere__com__Class * _class;
704 int _refCount;
705 } ecere_gcc_struct;
706
707 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
708
709 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
710
711 static struct __ecereNameSpace__ecere__com__Class * currentClass;
712
713 struct __ecereNameSpace__ecere__com__Class * thisClass;
714
715 struct __ecereNameSpace__ecere__com__Class * containerClass;
716
717 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
718
719 extern struct Expression * GetTemplateArgExpByName(const char *  paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
720
721 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
722
723 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
724
725 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
726
727 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
728
729 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
730
731 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
732
733 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
734
735 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
736
737 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
738
739 void SetThisClass(struct __ecereNameSpace__ecere__com__Class * c)
740 {
741 thisClass = c;
742 }
743
744 struct __ecereNameSpace__ecere__com__Class * GetThisClass()
745 {
746 return thisClass;
747 }
748
749 struct Context;
750
751 extern struct Context * curContext;
752
753 extern struct Context * topContext;
754
755 extern struct Context * PushContext(void);
756
757 extern void PopContext(struct Context * ctx);
758
759 extern void FreeContext(struct Context * context);
760
761 extern struct Context * globalContext;
762
763 struct ModuleImport;
764
765 extern struct ModuleImport * mainModule;
766
767 struct ModuleImport
768 {
769 struct ModuleImport * prev;
770 struct ModuleImport * next;
771 char *  name;
772 struct __ecereNameSpace__ecere__sys__OldList classes;
773 struct __ecereNameSpace__ecere__sys__OldList functions;
774 int importType;
775 int importAccess;
776 } ecere_gcc_struct;
777
778 struct __ecereNameSpace__ecere__com__NameSpace;
779
780 extern struct __ecereNameSpace__ecere__com__NameSpace *  globalData;
781
782 struct FunctionDefinition;
783
784 static struct FunctionDefinition * curFunction;
785
786 struct __ecereNameSpace__ecere__sys__BTNode;
787
788 struct __ecereNameSpace__ecere__sys__BTNode
789 {
790 uintptr_t key;
791 struct __ecereNameSpace__ecere__sys__BTNode * parent;
792 struct __ecereNameSpace__ecere__sys__BTNode * left;
793 struct __ecereNameSpace__ecere__sys__BTNode * right;
794 int depth;
795 } ecere_gcc_struct;
796
797 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
798
799 struct __ecereNameSpace__ecere__com__Property;
800
801 struct __ecereNameSpace__ecere__com__Property
802 {
803 struct __ecereNameSpace__ecere__com__Property * prev;
804 struct __ecereNameSpace__ecere__com__Property * next;
805 const char *  name;
806 unsigned int isProperty;
807 int memberAccess;
808 int id;
809 struct __ecereNameSpace__ecere__com__Class * _class;
810 const char *  dataTypeString;
811 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
812 struct Type * dataType;
813 void (*  Set)(void * , int);
814 int (*  Get)(void * );
815 unsigned int (*  IsSet)(void * );
816 void *  data;
817 void *  symbol;
818 int vid;
819 unsigned int conversion;
820 unsigned int watcherOffset;
821 const char *  category;
822 unsigned int compiled;
823 unsigned int selfWatchable;
824 unsigned int isWatchable;
825 } ecere_gcc_struct;
826
827 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
828
829 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);
830
831 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
832
833 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
834
835 struct Identifier;
836
837 extern void FreeIdentifier(struct Identifier * id);
838
839 extern struct Identifier * MkIdentifier(const char *  string);
840
841 extern struct Expression * MkExpIdentifier(struct Identifier * id);
842
843 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
844
845 extern struct Identifier * CopyIdentifier(struct Identifier * id);
846
847 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
848
849 struct __ecereNameSpace__ecere__sys__OldLink;
850
851 struct __ecereNameSpace__ecere__sys__OldLink
852 {
853 struct __ecereNameSpace__ecere__sys__OldLink * prev;
854 struct __ecereNameSpace__ecere__sys__OldLink * next;
855 void *  data;
856 } ecere_gcc_struct;
857
858 struct Declaration;
859
860 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
861
862 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
863
864 struct Specifier;
865
866 extern struct Declaration * MkStructDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * declarators, struct Specifier * extStorage);
867
868 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
869
870 extern struct Specifier * MkSpecifier(int specifier);
871
872 extern struct Specifier * MkSpecifierName(const char *  name);
873
874 extern struct Specifier * MkSpecifierExtended(struct ExtDecl * extDecl);
875
876 extern void FreeSpecifier(struct Specifier * spec);
877
878 extern struct Specifier * MkEnum(struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * list);
879
880 struct Statement
881 {
882 struct Statement * prev;
883 struct Statement * next;
884 struct Location loc;
885 int type;
886 union
887 {
888 struct __ecereNameSpace__ecere__sys__OldList *  expressions;
889 struct
890 {
891 struct Identifier * id;
892 struct Statement * stmt;
893 } ecere_gcc_struct labeled;
894 struct
895 {
896 struct Expression * exp;
897 struct Statement * stmt;
898 } ecere_gcc_struct caseStmt;
899 struct
900 {
901 struct __ecereNameSpace__ecere__sys__OldList * declarations;
902 struct __ecereNameSpace__ecere__sys__OldList * statements;
903 struct Context * context;
904 unsigned int isSwitch;
905 } ecere_gcc_struct compound;
906 struct
907 {
908 struct __ecereNameSpace__ecere__sys__OldList * exp;
909 struct Statement * stmt;
910 struct Statement * elseStmt;
911 } ecere_gcc_struct ifStmt;
912 struct
913 {
914 struct __ecereNameSpace__ecere__sys__OldList * exp;
915 struct Statement * stmt;
916 } ecere_gcc_struct switchStmt;
917 struct
918 {
919 struct __ecereNameSpace__ecere__sys__OldList * exp;
920 struct Statement * stmt;
921 } ecere_gcc_struct whileStmt;
922 struct
923 {
924 struct __ecereNameSpace__ecere__sys__OldList * exp;
925 struct Statement * stmt;
926 } ecere_gcc_struct doWhile;
927 struct
928 {
929 struct Statement * init;
930 struct Statement * check;
931 struct __ecereNameSpace__ecere__sys__OldList * increment;
932 struct Statement * stmt;
933 } ecere_gcc_struct forStmt;
934 struct
935 {
936 struct Identifier * id;
937 } ecere_gcc_struct gotoStmt;
938 struct
939 {
940 struct Specifier * spec;
941 char * statements;
942 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
943 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
944 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
945 } ecere_gcc_struct asmStmt;
946 struct
947 {
948 struct Expression * watcher;
949 struct Expression * object;
950 struct __ecereNameSpace__ecere__sys__OldList * watches;
951 } ecere_gcc_struct _watch;
952 struct
953 {
954 struct Identifier * id;
955 struct __ecereNameSpace__ecere__sys__OldList * exp;
956 struct __ecereNameSpace__ecere__sys__OldList * filter;
957 struct Statement * stmt;
958 } ecere_gcc_struct forEachStmt;
959 struct Declaration * decl;
960 } ecere_gcc_struct __anon1;
961 } ecere_gcc_struct;
962
963 extern struct Specifier * CopySpecifier(struct Specifier * spec);
964
965 extern struct Expression * MkExpClassSize(struct Specifier * _class);
966
967 struct Symbol;
968
969 struct Identifier
970 {
971 struct Identifier * prev;
972 struct Identifier * next;
973 struct Location loc;
974 struct Symbol * classSym;
975 struct Specifier * _class;
976 char *  string;
977 struct Identifier * badID;
978 } ecere_gcc_struct;
979
980 extern struct Symbol * FindStruct(struct Context * ctx, const char *  name);
981
982 extern struct Symbol * FindClass(const char *  name);
983
984 extern void DeclareClass(struct External * neededFor, struct Symbol * classSym, const char *  className);
985
986 extern struct Symbol * FindType(struct Context * ctx, const char *  name);
987
988 extern void FreeSymbol(struct Symbol * symbol);
989
990 struct ClassDef;
991
992 extern struct ClassDef * MkClassDefDeclaration(struct Declaration * decl);
993
994 extern void FreeClassDef(struct ClassDef * def);
995
996 struct Declarator;
997
998 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
999
1000 struct TemplateDatatype
1001 {
1002 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1003 struct Declarator * decl;
1004 } ecere_gcc_struct;
1005
1006 extern struct Declarator * SpecDeclFromString(const char *  string, struct __ecereNameSpace__ecere__sys__OldList *  specs, struct Declarator * baseDecl);
1007
1008 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1009
1010 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
1011
1012 extern struct Declarator * MkStructDeclarator(struct Declarator * declarator, struct Expression * exp);
1013
1014 extern struct Declarator * MkDeclaratorArray(struct Declarator * declarator, struct Expression * exp);
1015
1016 struct Declarator
1017 {
1018 struct Declarator * prev;
1019 struct Declarator * next;
1020 struct Location loc;
1021 int type;
1022 struct Symbol * symbol;
1023 struct Declarator * declarator;
1024 union
1025 {
1026 struct Identifier * identifier;
1027 struct
1028 {
1029 struct Expression * exp;
1030 struct Expression * posExp;
1031 struct Attrib * attrib;
1032 } ecere_gcc_struct structDecl;
1033 struct
1034 {
1035 struct Expression * exp;
1036 struct Specifier * enumClass;
1037 } ecere_gcc_struct array;
1038 struct
1039 {
1040 struct __ecereNameSpace__ecere__sys__OldList * parameters;
1041 } ecere_gcc_struct function;
1042 struct
1043 {
1044 struct Pointer * pointer;
1045 } ecere_gcc_struct pointer;
1046 struct
1047 {
1048 struct ExtDecl * extended;
1049 } ecere_gcc_struct extended;
1050 } ecere_gcc_struct __anon1;
1051 } ecere_gcc_struct;
1052
1053 extern struct Identifier * GetDeclId(struct Declarator * decl);
1054
1055 extern struct Declarator * MkDeclaratorBrackets(struct Declarator * declarator);
1056
1057 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
1058
1059 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
1060
1061 extern void FreeDeclarator(struct Declarator * decl);
1062
1063 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
1064
1065 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList *  specifiers, struct Declarator * decl);
1066
1067 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
1068
1069 struct FunctionDefinition
1070 {
1071 struct FunctionDefinition * prev;
1072 struct FunctionDefinition * next;
1073 struct Location loc;
1074 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1075 struct Declarator * declarator;
1076 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1077 struct Statement * body;
1078 struct __ecereNameSpace__ecere__com__Class * _class;
1079 struct __ecereNameSpace__ecere__sys__OldList attached;
1080 int declMode;
1081 struct Type * type;
1082 struct Symbol * propSet;
1083 int tempCount;
1084 unsigned int propertyNoThis;
1085 } ecere_gcc_struct;
1086
1087 extern struct Declarator * QMkPtrDecl(const char *  id);
1088
1089 struct ClassFunction;
1090
1091 struct ClassFunction
1092 {
1093 struct ClassFunction * prev;
1094 struct ClassFunction * next;
1095 struct Location loc;
1096 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1097 struct Declarator * declarator;
1098 struct __ecereNameSpace__ecere__sys__OldList *  declarations;
1099 struct Statement * body;
1100 struct __ecereNameSpace__ecere__com__Class * _class;
1101 struct __ecereNameSpace__ecere__sys__OldList attached;
1102 int declMode;
1103 struct Type * type;
1104 struct Symbol * propSet;
1105 unsigned int isVirtual;
1106 unsigned int isConstructor;
1107 unsigned int isDestructor;
1108 unsigned int dontMangle;
1109 int id;
1110 int idCode;
1111 } ecere_gcc_struct;
1112
1113 extern struct External * ProcessClassFunction(struct __ecereNameSpace__ecere__com__Class * owningClass, struct ClassFunction * func, struct __ecereNameSpace__ecere__sys__OldList * defs, struct External * after, unsigned int makeStatic);
1114
1115 extern void FreeClassFunction(struct ClassFunction * func);
1116
1117 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
1118
1119 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
1120
1121 struct TypeName;
1122
1123 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1124
1125 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1126
1127 struct TypeName
1128 {
1129 struct TypeName * prev;
1130 struct TypeName * next;
1131 struct Location loc;
1132 struct __ecereNameSpace__ecere__sys__OldList *  qualifiers;
1133 struct Declarator * declarator;
1134 int classObjectType;
1135 struct Expression * bitCount;
1136 } ecere_gcc_struct;
1137
1138 extern void FreeTypeName(struct TypeName * typeName);
1139
1140 extern struct TypeName * QMkClass(const char *  spec, struct Declarator * decl);
1141
1142 extern struct Expression * MkExpTypeSize(struct TypeName * typeName);
1143
1144 extern unsigned int IsVoidPtrCast(struct TypeName * typeName);
1145
1146 extern struct TypeName * QMkType(const char *  spec, struct Declarator * decl);
1147
1148 struct __ecereNameSpace__ecere__com__BTNamedLink;
1149
1150 struct __ecereNameSpace__ecere__com__BTNamedLink
1151 {
1152 const char *  name;
1153 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
1154 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
1155 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
1156 int depth;
1157 void *  data;
1158 } ecere_gcc_struct;
1159
1160 struct __ecereNameSpace__ecere__sys__NamedLink64;
1161
1162 struct __ecereNameSpace__ecere__sys__NamedLink64
1163 {
1164 struct __ecereNameSpace__ecere__sys__NamedLink64 * prev;
1165 struct __ecereNameSpace__ecere__sys__NamedLink64 * next;
1166 char *  name;
1167 long long data;
1168 } ecere_gcc_struct;
1169
1170 struct Instantiation;
1171
1172 struct Declaration
1173 {
1174 struct Declaration * prev;
1175 struct Declaration * next;
1176 struct Location loc;
1177 int type;
1178 union
1179 {
1180 struct
1181 {
1182 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
1183 struct __ecereNameSpace__ecere__sys__OldList *  declarators;
1184 } ecere_gcc_struct __anon1;
1185 struct Instantiation * inst;
1186 struct
1187 {
1188 struct Identifier * id;
1189 struct Expression * exp;
1190 } ecere_gcc_struct __anon2;
1191 } ecere_gcc_struct __anon1;
1192 struct Specifier * extStorage;
1193 struct Symbol * symbol;
1194 int declMode;
1195 } ecere_gcc_struct;
1196
1197 struct Instantiation
1198 {
1199 struct Instantiation * prev;
1200 struct Instantiation * next;
1201 struct Location loc;
1202 struct Specifier * _class;
1203 struct Expression * exp;
1204 struct __ecereNameSpace__ecere__sys__OldList *  members;
1205 struct Symbol * symbol;
1206 unsigned int fullSet;
1207 unsigned int isConstant;
1208 unsigned char *  data;
1209 struct Location nameLoc;
1210 struct Location insideLoc;
1211 unsigned int built;
1212 } ecere_gcc_struct;
1213
1214 extern void FreeInstance(struct Instantiation * inst);
1215
1216 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
1217
1218 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
1219
1220 struct InitDeclarator;
1221
1222 extern void FreeInitDeclarator(struct InitDeclarator * decl);
1223
1224 struct PropertyWatch;
1225
1226 struct PropertyWatch
1227 {
1228 struct PropertyWatch * prev;
1229 struct PropertyWatch * next;
1230 struct Location loc;
1231 struct Statement * compound;
1232 struct __ecereNameSpace__ecere__sys__OldList *  properties;
1233 unsigned int deleteWatch;
1234 } ecere_gcc_struct;
1235
1236 extern void FreePropertyWatch(struct PropertyWatch * watcher);
1237
1238 struct PropertyImport;
1239
1240 struct PropertyImport
1241 {
1242 struct PropertyImport * prev;
1243 struct PropertyImport * next;
1244 char *  name;
1245 unsigned int isVirtual;
1246 unsigned int hasSet;
1247 unsigned int hasGet;
1248 } ecere_gcc_struct;
1249
1250 struct MethodImport;
1251
1252 struct MethodImport
1253 {
1254 struct MethodImport * prev;
1255 struct MethodImport * next;
1256 char *  name;
1257 unsigned int isVirtual;
1258 } ecere_gcc_struct;
1259
1260 struct FunctionImport;
1261
1262 struct FunctionImport
1263 {
1264 struct FunctionImport * prev;
1265 struct FunctionImport * next;
1266 char *  name;
1267 } ecere_gcc_struct;
1268
1269 struct ClassImport;
1270
1271 struct ClassImport
1272 {
1273 struct ClassImport * prev;
1274 struct ClassImport * next;
1275 char *  name;
1276 struct __ecereNameSpace__ecere__sys__OldList methods;
1277 struct __ecereNameSpace__ecere__sys__OldList properties;
1278 unsigned int itself;
1279 int isRemote;
1280 } ecere_gcc_struct;
1281
1282 struct Initializer;
1283
1284 struct Expression
1285 {
1286 struct Expression * prev;
1287 struct Expression * next;
1288 struct Location loc;
1289 int type;
1290 union
1291 {
1292 struct
1293 {
1294 char *  constant;
1295 struct Identifier * identifier;
1296 } ecere_gcc_struct __anon1;
1297 struct Statement * compound;
1298 struct Instantiation * instance;
1299 struct
1300 {
1301 char *  string;
1302 unsigned int intlString;
1303 unsigned int wideString;
1304 } ecere_gcc_struct __anon2;
1305 struct __ecereNameSpace__ecere__sys__OldList *  list;
1306 struct
1307 {
1308 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1309 struct Declarator * decl;
1310 } ecere_gcc_struct _classExp;
1311 struct
1312 {
1313 struct Identifier * id;
1314 } ecere_gcc_struct classData;
1315 struct
1316 {
1317 struct Expression * exp;
1318 struct __ecereNameSpace__ecere__sys__OldList * arguments;
1319 struct Location argLoc;
1320 } ecere_gcc_struct call;
1321 struct
1322 {
1323 struct Expression * exp;
1324 struct __ecereNameSpace__ecere__sys__OldList * index;
1325 } ecere_gcc_struct index;
1326 struct
1327 {
1328 struct Expression * exp;
1329 struct Identifier * member;
1330 int memberType;
1331 unsigned int thisPtr;
1332 } ecere_gcc_struct member;
1333 struct
1334 {
1335 int op;
1336 struct Expression * exp1;
1337 struct Expression * exp2;
1338 } ecere_gcc_struct op;
1339 struct TypeName * typeName;
1340 struct Specifier * _class;
1341 struct
1342 {
1343 struct TypeName * typeName;
1344 struct Expression * exp;
1345 } ecere_gcc_struct cast;
1346 struct
1347 {
1348 struct Expression * cond;
1349 struct __ecereNameSpace__ecere__sys__OldList * exp;
1350 struct Expression * elseExp;
1351 } ecere_gcc_struct cond;
1352 struct
1353 {
1354 struct TypeName * typeName;
1355 struct Expression * size;
1356 } ecere_gcc_struct _new;
1357 struct
1358 {
1359 struct TypeName * typeName;
1360 struct Expression * size;
1361 struct Expression * exp;
1362 } ecere_gcc_struct _renew;
1363 struct
1364 {
1365 char * table;
1366 struct Identifier * id;
1367 } ecere_gcc_struct db;
1368 struct
1369 {
1370 struct Expression * ds;
1371 struct Expression * name;
1372 } ecere_gcc_struct dbopen;
1373 struct
1374 {
1375 struct TypeName * typeName;
1376 struct Initializer * initializer;
1377 } ecere_gcc_struct initializer;
1378 struct
1379 {
1380 struct Expression * exp;
1381 struct TypeName * typeName;
1382 } ecere_gcc_struct vaArg;
1383 struct
1384 {
1385 struct TypeName * typeName;
1386 struct Identifier * id;
1387 } ecere_gcc_struct offset;
1388 } ecere_gcc_struct __anon1;
1389 unsigned int debugValue;
1390 struct __ecereNameSpace__ecere__com__DataValue val;
1391 uint64 address;
1392 unsigned int hasAddress;
1393 struct Type * expType;
1394 struct Type * destType;
1395 unsigned int usage;
1396 int tempCount;
1397 unsigned int byReference;
1398 unsigned int isConstant;
1399 unsigned int addedThis;
1400 unsigned int needCast;
1401 unsigned int thisPtr;
1402 unsigned int opDestType;
1403 unsigned int usedInComparison;
1404 unsigned int ambiguousUnits;
1405 unsigned int parentOpDestType;
1406 unsigned int needTemplateCast;
1407 } ecere_gcc_struct;
1408
1409 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
1410
1411 struct Initializer
1412 {
1413 struct Initializer * prev;
1414 struct Initializer * next;
1415 struct Location loc;
1416 int type;
1417 union
1418 {
1419 struct Expression * exp;
1420 struct __ecereNameSpace__ecere__sys__OldList *  list;
1421 } ecere_gcc_struct __anon1;
1422 unsigned int isConstant;
1423 struct Identifier * id;
1424 } ecere_gcc_struct;
1425
1426 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
1427
1428 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
1429
1430 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
1431
1432 struct InitDeclarator
1433 {
1434 struct InitDeclarator * prev;
1435 struct InitDeclarator * next;
1436 struct Location loc;
1437 struct Declarator * declarator;
1438 struct Initializer * initializer;
1439 } ecere_gcc_struct;
1440
1441 void ApplyLocation(struct Expression * exp, struct Location * loc)
1442 {
1443 exp->loc = *loc;
1444 switch(exp->type)
1445 {
1446 case 4:
1447 if(exp->__anon1.op.exp1)
1448 ApplyLocation(exp->__anon1.op.exp1, loc);
1449 if(exp->__anon1.op.exp2)
1450 ApplyLocation(exp->__anon1.op.exp2, loc);
1451 break;
1452 case 5:
1453 if(exp->__anon1.list)
1454 {
1455 struct Expression * e;
1456
1457 for(e = (*exp->__anon1.list).first; e; e = e->next)
1458 ApplyLocation(e, loc);
1459 }
1460 break;
1461 case 6:
1462 if(exp->__anon1.index.index)
1463 {
1464 struct Expression * e;
1465
1466 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
1467 ApplyLocation(e, loc);
1468 }
1469 if(exp->__anon1.index.exp)
1470 ApplyLocation(exp->__anon1.index.exp, loc);
1471 break;
1472 case 7:
1473 if(exp->__anon1.call.arguments)
1474 {
1475 struct Expression * arg;
1476
1477 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
1478 ApplyLocation(arg, loc);
1479 }
1480 if(exp->__anon1.call.exp)
1481 ApplyLocation(exp->__anon1.call.exp, loc);
1482 break;
1483 case 8:
1484 case 9:
1485 if(exp->__anon1.member.exp)
1486 ApplyLocation(exp->__anon1.member.exp, loc);
1487 break;
1488 case 11:
1489 if(exp->__anon1.cast.exp)
1490 ApplyLocation(exp->__anon1.cast.exp, loc);
1491 break;
1492 case 12:
1493 if(exp->__anon1.cond.exp)
1494 {
1495 struct Expression * e;
1496
1497 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
1498 ApplyLocation(e, loc);
1499 }
1500 if(exp->__anon1.cond.cond)
1501 ApplyLocation(exp->__anon1.cond.cond, loc);
1502 if(exp->__anon1.cond.elseExp)
1503 ApplyLocation(exp->__anon1.cond.elseExp, loc);
1504 break;
1505 case 34:
1506 if(exp->__anon1.vaArg.exp)
1507 ApplyLocation(exp->__anon1.vaArg.exp, loc);
1508 break;
1509 default:
1510 break;
1511 }
1512 }
1513
1514 void __ecereMethod_Expression_Clear();
1515
1516 struct MembersInit;
1517
1518 struct MembersInit
1519 {
1520 struct MembersInit * prev;
1521 struct MembersInit * next;
1522 struct Location loc;
1523 int type;
1524 union
1525 {
1526 struct __ecereNameSpace__ecere__sys__OldList *  dataMembers;
1527 struct ClassFunction * function;
1528 } ecere_gcc_struct __anon1;
1529 } ecere_gcc_struct;
1530
1531 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
1532
1533 struct Operand;
1534
1535 struct OpTable
1536 {
1537 unsigned int (*  Add)(struct Expression *, struct Operand *, struct Operand *);
1538 unsigned int (*  Sub)(struct Expression *, struct Operand *, struct Operand *);
1539 unsigned int (*  Mul)(struct Expression *, struct Operand *, struct Operand *);
1540 unsigned int (*  Div)(struct Expression *, struct Operand *, struct Operand *);
1541 unsigned int (*  Mod)(struct Expression *, struct Operand *, struct Operand *);
1542 unsigned int (*  Neg)(struct Expression *, struct Operand *);
1543 unsigned int (*  Inc)(struct Expression *, struct Operand *);
1544 unsigned int (*  Dec)(struct Expression *, struct Operand *);
1545 unsigned int (*  Asign)(struct Expression *, struct Operand *, struct Operand *);
1546 unsigned int (*  AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1547 unsigned int (*  SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1548 unsigned int (*  MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1549 unsigned int (*  DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1550 unsigned int (*  ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1551 unsigned int (*  BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1552 unsigned int (*  BitOr)(struct Expression *, struct Operand *, struct Operand *);
1553 unsigned int (*  BitXor)(struct Expression *, struct Operand *, struct Operand *);
1554 unsigned int (*  LShift)(struct Expression *, struct Operand *, struct Operand *);
1555 unsigned int (*  RShift)(struct Expression *, struct Operand *, struct Operand *);
1556 unsigned int (*  BitNot)(struct Expression *, struct Operand *);
1557 unsigned int (*  AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1558 unsigned int (*  OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1559 unsigned int (*  XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1560 unsigned int (*  LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1561 unsigned int (*  RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1562 unsigned int (*  Not)(struct Expression *, struct Operand *);
1563 unsigned int (*  Equ)(struct Expression *, struct Operand *, struct Operand *);
1564 unsigned int (*  Nqu)(struct Expression *, struct Operand *, struct Operand *);
1565 unsigned int (*  And)(struct Expression *, struct Operand *, struct Operand *);
1566 unsigned int (*  Or)(struct Expression *, struct Operand *, struct Operand *);
1567 unsigned int (*  Grt)(struct Expression *, struct Operand *, struct Operand *);
1568 unsigned int (*  Sma)(struct Expression *, struct Operand *, struct Operand *);
1569 unsigned int (*  GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1570 unsigned int (*  SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1571 unsigned int (*  Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1572 } ecere_gcc_struct;
1573
1574 struct Operand
1575 {
1576 int kind;
1577 struct Type * type;
1578 unsigned int ptrSize;
1579 union
1580 {
1581 char c;
1582 unsigned char uc;
1583 short s;
1584 unsigned short us;
1585 int i;
1586 unsigned int ui;
1587 float f;
1588 double d;
1589 long long i64;
1590 uint64 ui64;
1591 } ecere_gcc_struct __anon1;
1592 struct OpTable ops;
1593 } ecere_gcc_struct;
1594
1595 struct External *  _DeclareStruct(struct External *  neededBy, const char *  name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl);
1596
1597 struct External * DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference)
1598 {
1599 return _DeclareStruct(neededBy, name, skipNoHead, needDereference, 0);
1600 }
1601
1602 static void _DeclareType(struct External *  neededFor, struct Type *  type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl);
1603
1604 void DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1605 {
1606 _DeclareType(neededFor, type, needDereference, forFunctionDef, 0);
1607 }
1608
1609 void DeclareTypeForwardDeclare(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef)
1610 {
1611 _DeclareType(neededFor, type, needDereference, forFunctionDef, 1);
1612 }
1613
1614 static void _PrintType(struct Type *  type, char *  string, unsigned int printName, unsigned int fullName, unsigned int printConst);
1615
1616 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1617 {
1618 _PrintType(type, string, printName, fullName, 1);
1619 }
1620
1621 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
1622 {
1623 _PrintType(type, string, printName, fullName, 0);
1624 }
1625
1626 struct __ecereNameSpace__ecere__com__Method;
1627
1628 struct __ecereNameSpace__ecere__com__Method
1629 {
1630 const char *  name;
1631 struct __ecereNameSpace__ecere__com__Method * parent;
1632 struct __ecereNameSpace__ecere__com__Method * left;
1633 struct __ecereNameSpace__ecere__com__Method * right;
1634 int depth;
1635 int (*  function)();
1636 int vid;
1637 int type;
1638 struct __ecereNameSpace__ecere__com__Class * _class;
1639 void *  symbol;
1640 const char *  dataTypeString;
1641 struct Type * dataType;
1642 int memberAccess;
1643 } ecere_gcc_struct;
1644
1645 struct Symbol
1646 {
1647 char *  string;
1648 struct Symbol * parent;
1649 struct Symbol * left;
1650 struct Symbol * right;
1651 int depth;
1652 struct Type * type;
1653 union
1654 {
1655 struct __ecereNameSpace__ecere__com__Method * method;
1656 struct __ecereNameSpace__ecere__com__Property * _property;
1657 struct __ecereNameSpace__ecere__com__Class * registered;
1658 } ecere_gcc_struct __anon1;
1659 unsigned int notYetDeclared;
1660 union
1661 {
1662 struct
1663 {
1664 struct External * pointerExternal;
1665 struct External * structExternal;
1666 } ecere_gcc_struct __anon1;
1667 struct
1668 {
1669 struct External * externalGet;
1670 struct External * externalSet;
1671 struct External * externalPtr;
1672 struct External * externalIsSet;
1673 } ecere_gcc_struct __anon2;
1674 struct
1675 {
1676 struct External * methodExternal;
1677 struct External * methodCodeExternal;
1678 } ecere_gcc_struct __anon3;
1679 } ecere_gcc_struct __anon2;
1680 unsigned int imported;
1681 unsigned int declaredStructSym;
1682 struct __ecereNameSpace__ecere__com__Class * _class;
1683 unsigned int declaredStruct;
1684 unsigned int needConstructor;
1685 unsigned int needDestructor;
1686 char *  constructorName;
1687 char *  structName;
1688 char *  className;
1689 char *  destructorName;
1690 struct ModuleImport * module;
1691 struct ClassImport * _import;
1692 struct Location nameLoc;
1693 unsigned int isParam;
1694 unsigned int isRemote;
1695 unsigned int isStruct;
1696 unsigned int fireWatchersDone;
1697 int declaring;
1698 unsigned int classData;
1699 unsigned int isStatic;
1700 char *  shortName;
1701 struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
1702 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
1703 struct Context * ctx;
1704 int isIterator;
1705 struct Expression * propCategory;
1706 unsigned int mustRegister;
1707 } ecere_gcc_struct;
1708
1709 struct __ecereNameSpace__ecere__com__ClassProperty;
1710
1711 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
1712
1713 struct __ecereNameSpace__ecere__com__ClassProperty
1714 {
1715 const char *  name;
1716 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1717 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1718 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1719 int depth;
1720 void (*  Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1721 long long (*  Get)(struct __ecereNameSpace__ecere__com__Class *);
1722 const char *  dataTypeString;
1723 struct Type * dataType;
1724 unsigned int constant;
1725 } ecere_gcc_struct;
1726
1727 struct __ecereNameSpace__ecere__com__BitMember;
1728
1729 struct __ecereNameSpace__ecere__com__BitMember
1730 {
1731 struct __ecereNameSpace__ecere__com__BitMember * prev;
1732 struct __ecereNameSpace__ecere__com__BitMember * next;
1733 const char *  name;
1734 unsigned int isProperty;
1735 int memberAccess;
1736 int id;
1737 struct __ecereNameSpace__ecere__com__Class * _class;
1738 const char *  dataTypeString;
1739 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1740 struct Type * dataType;
1741 int type;
1742 int size;
1743 int pos;
1744 uint64 mask;
1745 } ecere_gcc_struct;
1746
1747 struct __ecereNameSpace__ecere__com__DataMember;
1748
1749 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
1750 {
1751 union
1752 {
1753 struct
1754 {
1755 const char *  dataTypeString;
1756 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
1757 } ecere_gcc_struct __anon1;
1758 struct __ecereNameSpace__ecere__com__DataValue expression;
1759 struct
1760 {
1761 const char *  memberString;
1762 union
1763 {
1764 struct __ecereNameSpace__ecere__com__DataMember * member;
1765 struct __ecereNameSpace__ecere__com__Property * prop;
1766 struct __ecereNameSpace__ecere__com__Method * method;
1767 } ecere_gcc_struct __anon1;
1768 } ecere_gcc_struct __anon2;
1769 } ecere_gcc_struct __anon1;
1770 } ecere_gcc_struct;
1771
1772 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);
1773
1774 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
1775
1776 struct TemplateParameter;
1777
1778 struct TemplateParameter
1779 {
1780 struct TemplateParameter * prev;
1781 struct TemplateParameter * next;
1782 struct Location loc;
1783 int type;
1784 struct Identifier * identifier;
1785 union
1786 {
1787 struct TemplateDatatype * dataType;
1788 int memberType;
1789 } ecere_gcc_struct __anon1;
1790 struct TemplateArgument * defaultArgument;
1791 const char *  dataTypeString;
1792 struct Type * baseType;
1793 } ecere_gcc_struct;
1794
1795 struct Type
1796 {
1797 struct Type * prev;
1798 struct Type * next;
1799 int refCount;
1800 union
1801 {
1802 struct Symbol * _class;
1803 struct
1804 {
1805 struct __ecereNameSpace__ecere__sys__OldList members;
1806 char *  enumName;
1807 } ecere_gcc_struct __anon1;
1808 struct
1809 {
1810 struct Type * returnType;
1811 struct __ecereNameSpace__ecere__sys__OldList params;
1812 struct Symbol * thisClass;
1813 unsigned int staticMethod;
1814 struct TemplateParameter * thisClassTemplate;
1815 } ecere_gcc_struct __anon2;
1816 struct
1817 {
1818 struct __ecereNameSpace__ecere__com__Method * method;
1819 struct __ecereNameSpace__ecere__com__Class * methodClass;
1820 struct __ecereNameSpace__ecere__com__Class * usedClass;
1821 } ecere_gcc_struct __anon3;
1822 struct
1823 {
1824 struct Type * arrayType;
1825 int arraySize;
1826 struct Expression * arraySizeExp;
1827 unsigned int freeExp;
1828 struct Symbol * enumClass;
1829 } ecere_gcc_struct __anon4;
1830 struct Type * type;
1831 struct TemplateParameter * templateParameter;
1832 } ecere_gcc_struct __anon1;
1833 int kind;
1834 unsigned int size;
1835 char *  name;
1836 char *  typeName;
1837 struct __ecereNameSpace__ecere__com__Class * thisClassFrom;
1838 int promotedFrom;
1839 int classObjectType;
1840 int alignment;
1841 unsigned int offset;
1842 int bitFieldCount;
1843 int count;
1844 int bitMemberSize;
1845 unsigned int isSigned : 1;
1846 unsigned int constant : 1;
1847 unsigned int truth : 1;
1848 unsigned int byReference : 1;
1849 unsigned int extraParam : 1;
1850 unsigned int directClassAccess : 1;
1851 unsigned int computing : 1;
1852 unsigned int keepCast : 1;
1853 unsigned int passAsTemplate : 1;
1854 unsigned int dllExport : 1;
1855 unsigned int attrStdcall : 1;
1856 unsigned int declaredWithStruct : 1;
1857 unsigned int typedByReference : 1;
1858 unsigned int casted : 1;
1859 unsigned int pointerAlignment : 1;
1860 unsigned int isLong : 1;
1861 unsigned int signedBeforePromotion : 1;
1862 } ecere_gcc_struct;
1863
1864 struct Specifier
1865 {
1866 struct Specifier * prev;
1867 struct Specifier * next;
1868 struct Location loc;
1869 int type;
1870 union
1871 {
1872 int specifier;
1873 struct
1874 {
1875 struct ExtDecl * extDecl;
1876 char *  name;
1877 struct Symbol * symbol;
1878 struct __ecereNameSpace__ecere__sys__OldList *  templateArgs;
1879 struct Specifier * nsSpec;
1880 } ecere_gcc_struct __anon1;
1881 struct
1882 {
1883 struct Identifier * id;
1884 struct __ecereNameSpace__ecere__sys__OldList *  list;
1885 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
1886 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
1887 unsigned int addNameSpace;
1888 struct Context * ctx;
1889 struct ExtDecl * extDeclStruct;
1890 } ecere_gcc_struct __anon2;
1891 struct Expression * expression;
1892 struct Specifier * _class;
1893 struct TemplateParameter * templateParameter;
1894 } ecere_gcc_struct __anon1;
1895 } ecere_gcc_struct;
1896
1897 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
1898
1899 struct TemplatedType
1900 {
1901 uintptr_t key;
1902 struct __ecereNameSpace__ecere__sys__BTNode * parent;
1903 struct __ecereNameSpace__ecere__sys__BTNode * left;
1904 struct __ecereNameSpace__ecere__sys__BTNode * right;
1905 int depth;
1906 struct TemplateParameter * param;
1907 } ecere_gcc_struct;
1908
1909 struct Type * ProcessTemplateParameterType(struct TemplateParameter * param)
1910 {
1911 if(param && param->type == 0 && (param->__anon1.dataType || param->dataTypeString))
1912 {
1913 if(!param->baseType)
1914 {
1915 if(param->dataTypeString)
1916 param->baseType = ProcessTypeString(param->dataTypeString, 0);
1917 else
1918 param->baseType = ProcessType(param->__anon1.dataType->specifiers, param->__anon1.dataType->decl);
1919 }
1920 return param->baseType;
1921 }
1922 return (((void *)0));
1923 }
1924
1925 unsigned int NeedCast(struct Type * type1, struct Type * type2)
1926 {
1927 if(!type1 || !type2 || type1->keepCast || type2->keepCast)
1928 return 1;
1929 if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0)
1930 {
1931 return 0;
1932 }
1933 if(type1->kind == type2->kind && type1->isLong == type2->isLong)
1934 {
1935 switch(type1->kind)
1936 {
1937 case 24:
1938 case 1:
1939 case 2:
1940 case 3:
1941 case 4:
1942 case 22:
1943 case 23:
1944 if(type1->passAsTemplate && !type2->passAsTemplate)
1945 return 1;
1946 return type1->isSigned != type2->isSigned;
1947 case 8:
1948 return type1->__anon1._class != type2->__anon1._class;
1949 case 13:
1950 return (type1->__anon1.type && type2->__anon1.type && type1->__anon1.type->constant != type2->__anon1.type->constant) || NeedCast(type1->__anon1.type, type2->__anon1.type);
1951 default:
1952 return 1;
1953 }
1954 }
1955 return 1;
1956 }
1957
1958 unsigned int GetOpInt(struct Operand * op2, int * value2)
1959 {
1960 if(op2->kind == 3 && op2->type->isSigned)
1961 *value2 = op2->__anon1.i;
1962 else if(op2->kind == 3)
1963 *value2 = (int)op2->__anon1.ui;
1964 else if(op2->kind == 4 && op2->type->isSigned)
1965 *value2 = (int)op2->__anon1.i64;
1966 else if(op2->kind == 4)
1967 *value2 = (int)op2->__anon1.ui64;
1968 else if(op2->kind == 23 && op2->type->isSigned)
1969 *value2 = (int)op2->__anon1.i64;
1970 else if(op2->kind == 23)
1971 *value2 = (int)op2->__anon1.ui64;
1972 else if(op2->kind == 22 && op2->type->isSigned)
1973 *value2 = (int)op2->__anon1.i64;
1974 else if(op2->kind == 22)
1975 *value2 = (int)op2->__anon1.ui64;
1976 else if(op2->kind == 2 && op2->type->isSigned)
1977 *value2 = (int)op2->__anon1.s;
1978 else if(op2->kind == 2)
1979 *value2 = (int)op2->__anon1.us;
1980 else if(op2->kind == 1 && op2->type->isSigned)
1981 *value2 = (int)op2->__anon1.c;
1982 else if(op2->kind == 24 || op2->kind == 1)
1983 *value2 = (int)op2->__anon1.uc;
1984 else if(op2->kind == 6)
1985 *value2 = (int)op2->__anon1.f;
1986 else if(op2->kind == 7)
1987 *value2 = (int)op2->__anon1.d;
1988 else if(op2->kind == 13)
1989 *value2 = (int)op2->__anon1.ui64;
1990 else
1991 return 0;
1992 return 1;
1993 }
1994
1995 unsigned int GetOpUInt(struct Operand * op2, unsigned int * value2)
1996 {
1997 if(op2->kind == 3 && op2->type->isSigned)
1998 *value2 = (unsigned int)op2->__anon1.i;
1999 else if(op2->kind == 3)
2000 *value2 = op2->__anon1.ui;
2001 else if(op2->kind == 4 && op2->type->isSigned)
2002 *value2 = (unsigned int)op2->__anon1.i64;
2003 else if(op2->kind == 4)
2004 *value2 = (unsigned int)op2->__anon1.ui64;
2005 else if(op2->kind == 23 && op2->type->isSigned)
2006 *value2 = (unsigned int)op2->__anon1.i64;
2007 else if(op2->kind == 23)
2008 *value2 = (unsigned int)op2->__anon1.ui64;
2009 else if(op2->kind == 22 && op2->type->isSigned)
2010 *value2 = (unsigned int)op2->__anon1.i64;
2011 else if(op2->kind == 22)
2012 *value2 = (unsigned int)op2->__anon1.ui64;
2013 else if(op2->kind == 2 && op2->type->isSigned)
2014 *value2 = (unsigned int)op2->__anon1.s;
2015 else if(op2->kind == 2)
2016 *value2 = (unsigned int)op2->__anon1.us;
2017 else if(op2->kind == 1 && op2->type->isSigned)
2018 *value2 = (unsigned int)op2->__anon1.c;
2019 else if(op2->kind == 24 || op2->kind == 1)
2020 *value2 = (unsigned int)op2->__anon1.uc;
2021 else if(op2->kind == 6)
2022 *value2 = (unsigned int)op2->__anon1.f;
2023 else if(op2->kind == 7)
2024 *value2 = (unsigned int)op2->__anon1.d;
2025 else if(op2->kind == 13)
2026 *value2 = (unsigned int)op2->__anon1.ui64;
2027 else
2028 return 0;
2029 return 1;
2030 }
2031
2032 unsigned int GetOpInt64(struct Operand * op2, long long * value2)
2033 {
2034 if(op2->kind == 3 && op2->type->isSigned)
2035 *value2 = (long long)op2->__anon1.i;
2036 else if(op2->kind == 3)
2037 *value2 = (long long)op2->__anon1.ui;
2038 else if(op2->kind == 4 && op2->type->isSigned)
2039 *value2 = op2->__anon1.i64;
2040 else if(op2->kind == 4)
2041 *value2 = (long long)op2->__anon1.ui64;
2042 else if(op2->kind == 23 && op2->type->isSigned)
2043 *value2 = op2->__anon1.i64;
2044 else if(op2->kind == 23)
2045 *value2 = (long long)op2->__anon1.ui64;
2046 else if(op2->kind == 22 && op2->type->isSigned)
2047 *value2 = op2->__anon1.i64;
2048 else if(op2->kind == 22)
2049 *value2 = (long long)op2->__anon1.ui64;
2050 else if(op2->kind == 2 && op2->type->isSigned)
2051 *value2 = (long long)op2->__anon1.s;
2052 else if(op2->kind == 2)
2053 *value2 = (long long)op2->__anon1.us;
2054 else if(op2->kind == 1 && op2->type->isSigned)
2055 *value2 = (long long)op2->__anon1.c;
2056 else if(op2->kind == 24 || op2->kind == 1)
2057 *value2 = (long long)op2->__anon1.uc;
2058 else if(op2->kind == 6)
2059 *value2 = (long long)op2->__anon1.f;
2060 else if(op2->kind == 7)
2061 *value2 = (long long)op2->__anon1.d;
2062 else if(op2->kind == 13)
2063 *value2 = (long long)op2->__anon1.ui64;
2064 else
2065 return 0;
2066 return 1;
2067 }
2068
2069 unsigned int GetOpUInt64(struct Operand * op2, uint64 * value2)
2070 {
2071 if(op2->kind == 3 && op2->type->isSigned)
2072 *value2 = (uint64)op2->__anon1.i;
2073 else if(op2->kind == 3)
2074 *value2 = (uint64)op2->__anon1.ui;
2075 else if(op2->kind == 4 && op2->type->isSigned)
2076 *value2 = (uint64)op2->__anon1.i64;
2077 else if(op2->kind == 4)
2078 *value2 = op2->__anon1.ui64;
2079 else if(op2->kind == 23 && op2->type->isSigned)
2080 *value2 = (uint64)op2->__anon1.i64;
2081 else if(op2->kind == 23)
2082 *value2 = op2->__anon1.ui64;
2083 else if(op2->kind == 22 && op2->type->isSigned)
2084 *value2 = (uint64)op2->__anon1.i64;
2085 else if(op2->kind == 22)
2086 *value2 = op2->__anon1.ui64;
2087 else if(op2->kind == 2 && op2->type->isSigned)
2088 *value2 = (uint64)op2->__anon1.s;
2089 else if(op2->kind == 2)
2090 *value2 = (uint64)op2->__anon1.us;
2091 else if(op2->kind == 1 && op2->type->isSigned)
2092 *value2 = (uint64)op2->__anon1.c;
2093 else if(op2->kind == 24 || op2->kind == 1)
2094 *value2 = (uint64)op2->__anon1.uc;
2095 else if(op2->kind == 6)
2096 *value2 = (uint64)op2->__anon1.f;
2097 else if(op2->kind == 7)
2098 *value2 = (uint64)op2->__anon1.d;
2099 else if(op2->kind == 13)
2100 *value2 = op2->__anon1.ui64;
2101 else
2102 return 0;
2103 return 1;
2104 }
2105
2106 unsigned int GetOpIntPtr(struct Operand * op2, intptr_t * value2)
2107 {
2108 if(op2->kind == 3 && op2->type->isSigned)
2109 *value2 = (intptr_t)op2->__anon1.i;
2110 else if(op2->kind == 3)
2111 *value2 = (intptr_t)op2->__anon1.ui;
2112 else if(op2->kind == 4 && op2->type->isSigned)
2113 *value2 = (intptr_t)op2->__anon1.i64;
2114 else if(op2->kind == 4)
2115 *value2 = (intptr_t)op2->__anon1.ui64;
2116 else if(op2->kind == 23 && op2->type->isSigned)
2117 *value2 = (intptr_t)op2->__anon1.i64;
2118 else if(op2->kind == 23)
2119 *value2 = (intptr_t)op2->__anon1.ui64;
2120 else if(op2->kind == 22 && op2->type->isSigned)
2121 *value2 = (intptr_t)op2->__anon1.i64;
2122 else if(op2->kind == 22)
2123 *value2 = (intptr_t)op2->__anon1.ui64;
2124 else if(op2->kind == 2 && op2->type->isSigned)
2125 *value2 = (intptr_t)op2->__anon1.s;
2126 else if(op2->kind == 2)
2127 *value2 = (intptr_t)op2->__anon1.us;
2128 else if(op2->kind == 1 && op2->type->isSigned)
2129 *value2 = (intptr_t)op2->__anon1.c;
2130 else if(op2->kind == 24 || op2->kind == 1)
2131 *value2 = (intptr_t)op2->__anon1.uc;
2132 else if(op2->kind == 6)
2133 *value2 = (intptr_t)op2->__anon1.f;
2134 else if(op2->kind == 7)
2135 *value2 = (intptr_t)op2->__anon1.d;
2136 else if(op2->kind == 13)
2137 *value2 = (intptr_t)op2->__anon1.ui64;
2138 else
2139 return 0;
2140 return 1;
2141 }
2142
2143 unsigned int GetOpUIntPtr(struct Operand * op2, uintptr_t * value2)
2144 {
2145 if(op2->kind == 3 && op2->type->isSigned)
2146 *value2 = (uintptr_t)op2->__anon1.i;
2147 else if(op2->kind == 3)
2148 *value2 = (uintptr_t)op2->__anon1.ui;
2149 else if(op2->kind == 4 && op2->type->isSigned)
2150 *value2 = (uintptr_t)op2->__anon1.i64;
2151 else if(op2->kind == 4)
2152 *value2 = (uintptr_t)op2->__anon1.ui64;
2153 else if(op2->kind == 23 && op2->type->isSigned)
2154 *value2 = (uintptr_t)op2->__anon1.i64;
2155 else if(op2->kind == 23)
2156 *value2 = (uintptr_t)op2->__anon1.ui64;
2157 else if(op2->kind == 22 && op2->type->isSigned)
2158 *value2 = (uintptr_t)op2->__anon1.i64;
2159 else if(op2->kind == 22)
2160 *value2 = (uintptr_t)op2->__anon1.ui64;
2161 else if(op2->kind == 2 && op2->type->isSigned)
2162 *value2 = (uintptr_t)op2->__anon1.s;
2163 else if(op2->kind == 2)
2164 *value2 = (uintptr_t)op2->__anon1.us;
2165 else if(op2->kind == 1 && op2->type->isSigned)
2166 *value2 = (uintptr_t)op2->__anon1.c;
2167 else if(op2->kind == 24 || op2->kind == 1)
2168 *value2 = (uintptr_t)op2->__anon1.uc;
2169 else if(op2->kind == 6)
2170 *value2 = (uintptr_t)op2->__anon1.f;
2171 else if(op2->kind == 7)
2172 *value2 = (uintptr_t)op2->__anon1.d;
2173 else if(op2->kind == 13)
2174 *value2 = (uintptr_t)op2->__anon1.ui64;
2175 else
2176 return 0;
2177 return 1;
2178 }
2179
2180 unsigned int GetOpIntSize(struct Operand * op2, ssize_t * value2)
2181 {
2182 if(op2->kind == 3 && op2->type->isSigned)
2183 *value2 = (ssize_t)op2->__anon1.i;
2184 else if(op2->kind == 3)
2185 *value2 = (ssize_t)op2->__anon1.ui;
2186 else if(op2->kind == 4 && op2->type->isSigned)
2187 *value2 = (ssize_t)op2->__anon1.i64;
2188 else if(op2->kind == 4)
2189 *value2 = (ssize_t)op2->__anon1.ui64;
2190 else if(op2->kind == 23 && op2->type->isSigned)
2191 *value2 = (ssize_t)op2->__anon1.i64;
2192 else if(op2->kind == 23)
2193 *value2 = (ssize_t)op2->__anon1.ui64;
2194 else if(op2->kind == 22 && op2->type->isSigned)
2195 *value2 = (ssize_t)op2->__anon1.i64;
2196 else if(op2->kind == 22)
2197 *value2 = (ssize_t)op2->__anon1.ui64;
2198 else if(op2->kind == 2 && op2->type->isSigned)
2199 *value2 = (ssize_t)op2->__anon1.s;
2200 else if(op2->kind == 2)
2201 *value2 = (ssize_t)op2->__anon1.us;
2202 else if(op2->kind == 1 && op2->type->isSigned)
2203 *value2 = (ssize_t)op2->__anon1.c;
2204 else if(op2->kind == 24 || op2->kind == 1)
2205 *value2 = (ssize_t)op2->__anon1.uc;
2206 else if(op2->kind == 6)
2207 *value2 = (ssize_t)op2->__anon1.f;
2208 else if(op2->kind == 7)
2209 *value2 = (ssize_t)op2->__anon1.d;
2210 else if(op2->kind == 13)
2211 *value2 = (ssize_t)op2->__anon1.ui64;
2212 else
2213 return 0;
2214 return 1;
2215 }
2216
2217 unsigned int GetOpUIntSize(struct Operand * op2, size_t * value2)
2218 {
2219 if(op2->kind == 3 && op2->type->isSigned)
2220 *value2 = (size_t)op2->__anon1.i;
2221 else if(op2->kind == 3)
2222 *value2 = (size_t)op2->__anon1.ui;
2223 else if(op2->kind == 4 && op2->type->isSigned)
2224 *value2 = (size_t)op2->__anon1.i64;
2225 else if(op2->kind == 4)
2226 *value2 = (size_t)op2->__anon1.ui64;
2227 else if(op2->kind == 23 && op2->type->isSigned)
2228 *value2 = (size_t)op2->__anon1.i64;
2229 else if(op2->kind == 23)
2230 *value2 = (size_t)op2->__anon1.ui64;
2231 else if(op2->kind == 22 && op2->type->isSigned)
2232 *value2 = (size_t)op2->__anon1.i64;
2233 else if(op2->kind == 22)
2234 *value2 = (size_t)op2->__anon1.ui64;
2235 else if(op2->kind == 2 && op2->type->isSigned)
2236 *value2 = (size_t)op2->__anon1.s;
2237 else if(op2->kind == 2)
2238 *value2 = (size_t)op2->__anon1.us;
2239 else if(op2->kind == 1 && op2->type->isSigned)
2240 *value2 = (size_t)op2->__anon1.c;
2241 else if(op2->kind == 24 || op2->kind == 1)
2242 *value2 = (size_t)op2->__anon1.uc;
2243 else if(op2->kind == 6)
2244 *value2 = (size_t)op2->__anon1.f;
2245 else if(op2->kind == 7)
2246 *value2 = (size_t)op2->__anon1.d;
2247 else if(op2->kind == 13)
2248 *value2 = (size_t)op2->__anon1.ui64;
2249 else
2250 return 0;
2251 return 1;
2252 }
2253
2254 unsigned int GetOpShort(struct Operand * op2, short * value2)
2255 {
2256 if(op2->kind == 3 && op2->type->isSigned)
2257 *value2 = (short)op2->__anon1.i;
2258 else if(op2->kind == 3)
2259 *value2 = (short)op2->__anon1.ui;
2260 else if(op2->kind == 4 && op2->type->isSigned)
2261 *value2 = (short)op2->__anon1.i64;
2262 else if(op2->kind == 4)
2263 *value2 = (short)op2->__anon1.ui64;
2264 else if(op2->kind == 23 && op2->type->isSigned)
2265 *value2 = (short)op2->__anon1.i64;
2266 else if(op2->kind == 23)
2267 *value2 = (short)op2->__anon1.ui64;
2268 else if(op2->kind == 22 && op2->type->isSigned)
2269 *value2 = (short)op2->__anon1.i64;
2270 else if(op2->kind == 22)
2271 *value2 = (short)op2->__anon1.ui64;
2272 else if(op2->kind == 2 && op2->type->isSigned)
2273 *value2 = op2->__anon1.s;
2274 else if(op2->kind == 2)
2275 *value2 = (short)op2->__anon1.us;
2276 else if(op2->kind == 1 && op2->type->isSigned)
2277 *value2 = (short)op2->__anon1.c;
2278 else if(op2->kind == 24 || op2->kind == 1)
2279 *value2 = (short)op2->__anon1.uc;
2280 else if(op2->kind == 6)
2281 *value2 = (short)op2->__anon1.f;
2282 else if(op2->kind == 7)
2283 *value2 = (short)op2->__anon1.d;
2284 else if(op2->kind == 13)
2285 *value2 = (short)op2->__anon1.ui64;
2286 else
2287 return 0;
2288 return 1;
2289 }
2290
2291 unsigned int GetOpUShort(struct Operand * op2, unsigned short * value2)
2292 {
2293 if(op2->kind == 3 && op2->type->isSigned)
2294 *value2 = (unsigned short)op2->__anon1.i;
2295 else if(op2->kind == 3)
2296 *value2 = (unsigned short)op2->__anon1.ui;
2297 else if(op2->kind == 4 && op2->type->isSigned)
2298 *value2 = (unsigned short)op2->__anon1.i64;
2299 else if(op2->kind == 4)
2300 *value2 = (unsigned short)op2->__anon1.ui64;
2301 else if(op2->kind == 23 && op2->type->isSigned)
2302 *value2 = (unsigned short)op2->__anon1.i64;
2303 else if(op2->kind == 23)
2304 *value2 = (unsigned short)op2->__anon1.ui64;
2305 else if(op2->kind == 22 && op2->type->isSigned)
2306 *value2 = (unsigned short)op2->__anon1.i64;
2307 else if(op2->kind == 22)
2308 *value2 = (unsigned short)op2->__anon1.ui64;
2309 else if(op2->kind == 2 && op2->type->isSigned)
2310 *value2 = (unsigned short)op2->__anon1.s;
2311 else if(op2->kind == 2)
2312 *value2 = op2->__anon1.us;
2313 else if(op2->kind == 1 && op2->type->isSigned)
2314 *value2 = (unsigned short)op2->__anon1.c;
2315 else if(op2->kind == 24 || op2->kind == 1)
2316 *value2 = (unsigned short)op2->__anon1.uc;
2317 else if(op2->kind == 6)
2318 *value2 = (unsigned short)op2->__anon1.f;
2319 else if(op2->kind == 7)
2320 *value2 = (unsigned short)op2->__anon1.d;
2321 else if(op2->kind == 13)
2322 *value2 = (unsigned short)op2->__anon1.ui64;
2323 else
2324 return 0;
2325 return 1;
2326 }
2327
2328 unsigned int GetOpChar(struct Operand * op2, char * value2)
2329 {
2330 if(op2->kind == 3 && op2->type->isSigned)
2331 *value2 = (char)op2->__anon1.i;
2332 else if(op2->kind == 3)
2333 *value2 = (char)op2->__anon1.ui;
2334 else if(op2->kind == 4 && op2->type->isSigned)
2335 *value2 = (char)op2->__anon1.i64;
2336 else if(op2->kind == 4)
2337 *value2 = (char)op2->__anon1.ui64;
2338 else if(op2->kind == 23 && op2->type->isSigned)
2339 *value2 = (char)op2->__anon1.i64;
2340 else if(op2->kind == 23)
2341 *value2 = (char)op2->__anon1.ui64;
2342 else if(op2->kind == 22 && op2->type->isSigned)
2343 *value2 = (char)op2->__anon1.i64;
2344 else if(op2->kind == 22)
2345 *value2 = (char)op2->__anon1.ui64;
2346 else if(op2->kind == 2 && op2->type->isSigned)
2347 *value2 = (char)op2->__anon1.s;
2348 else if(op2->kind == 2)
2349 *value2 = (char)op2->__anon1.us;
2350 else if(op2->kind == 1 && op2->type->isSigned)
2351 *value2 = op2->__anon1.c;
2352 else if(op2->kind == 24 || op2->kind == 1)
2353 *value2 = (char)op2->__anon1.uc;
2354 else if(op2->kind == 6)
2355 *value2 = (char)op2->__anon1.f;
2356 else if(op2->kind == 7)
2357 *value2 = (char)op2->__anon1.d;
2358 else if(op2->kind == 13)
2359 *value2 = (char)op2->__anon1.ui64;
2360 else
2361 return 0;
2362 return 1;
2363 }
2364
2365 unsigned int GetOpUChar(struct Operand * op2, unsigned char * value2)
2366 {
2367 if(op2->kind == 3 && op2->type->isSigned)
2368 *value2 = (unsigned char)op2->__anon1.i;
2369 else if(op2->kind == 3)
2370 *value2 = (unsigned char)op2->__anon1.ui;
2371 else if(op2->kind == 4 && op2->type->isSigned)
2372 *value2 = (unsigned char)op2->__anon1.i64;
2373 else if(op2->kind == 4)
2374 *value2 = (unsigned char)op2->__anon1.ui64;
2375 else if(op2->kind == 23 && op2->type->isSigned)
2376 *value2 = (unsigned char)op2->__anon1.i64;
2377 else if(op2->kind == 23)
2378 *value2 = (unsigned char)op2->__anon1.ui64;
2379 else if(op2->kind == 22 && op2->type->isSigned)
2380 *value2 = (unsigned char)op2->__anon1.i64;
2381 else if(op2->kind == 22)
2382 *value2 = (unsigned char)op2->__anon1.ui64;
2383 else if(op2->kind == 2 && op2->type->isSigned)
2384 *value2 = (unsigned char)op2->__anon1.s;
2385 else if(op2->kind == 2)
2386 *value2 = (unsigned char)op2->__anon1.us;
2387 else if(op2->kind == 1 && op2->type->isSigned)
2388 *value2 = (unsigned char)op2->__anon1.c;
2389 else if(op2->kind == 24 || op2->kind == 1)
2390 *value2 = op2->__anon1.uc;
2391 else if(op2->kind == 6)
2392 *value2 = (unsigned char)op2->__anon1.f;
2393 else if(op2->kind == 7)
2394 *value2 = (unsigned char)op2->__anon1.d;
2395 else if(op2->kind == 13)
2396 *value2 = (unsigned char)op2->__anon1.ui64;
2397 else
2398 return 0;
2399 return 1;
2400 }
2401
2402 unsigned int GetOpFloat(struct Operand * op2, float * value2)
2403 {
2404 if(op2->kind == 3 && op2->type->isSigned)
2405 *value2 = (float)(float)op2->__anon1.i;
2406 else if(op2->kind == 3)
2407 *value2 = (float)(float)op2->__anon1.ui;
2408 else if(op2->kind == 4 && op2->type->isSigned)
2409 *value2 = (float)(float)op2->__anon1.i64;
2410 else if(op2->kind == 4)
2411 *value2 = (float)(float)op2->__anon1.ui64;
2412 else if(op2->kind == 23 && op2->type->isSigned)
2413 *value2 = (float)(float)op2->__anon1.i64;
2414 else if(op2->kind == 23)
2415 *value2 = (float)(float)op2->__anon1.ui64;
2416 else if(op2->kind == 22 && op2->type->isSigned)
2417 *value2 = (float)(float)op2->__anon1.i64;
2418 else if(op2->kind == 22)
2419 *value2 = (float)(float)op2->__anon1.ui64;
2420 else if(op2->kind == 2 && op2->type->isSigned)
2421 *value2 = (float)(float)op2->__anon1.s;
2422 else if(op2->kind == 2)
2423 *value2 = (float)(float)op2->__anon1.us;
2424 else if(op2->kind == 1 && op2->type->isSigned)
2425 *value2 = (float)(float)op2->__anon1.c;
2426 else if(op2->kind == 24 || op2->kind == 1)
2427 *value2 = (float)(float)op2->__anon1.uc;
2428 else if(op2->kind == 6)
2429 *value2 = (float)op2->__anon1.f;
2430 else if(op2->kind == 7)
2431 *value2 = (float)op2->__anon1.d;
2432 else if(op2->kind == 13)
2433 *value2 = (float)(float)op2->__anon1.ui64;
2434 else
2435 return 0;
2436 return 1;
2437 }
2438
2439 unsigned int GetOpDouble(struct Operand * op2, double * value2)
2440 {
2441 if(op2->kind == 3 && op2->type->isSigned)
2442 *value2 = (double)(double)op2->__anon1.i;
2443 else if(op2->kind == 3)
2444 *value2 = (double)(double)op2->__anon1.ui;
2445 else if(op2->kind == 4 && op2->type->isSigned)
2446 *value2 = (double)(double)op2->__anon1.i64;
2447 else if(op2->kind == 4)
2448 *value2 = (double)(double)op2->__anon1.ui64;
2449 else if(op2->kind == 23 && op2->type->isSigned)
2450 *value2 = (double)(double)op2->__anon1.i64;
2451 else if(op2->kind == 23)
2452 *value2 = (double)(double)op2->__anon1.ui64;
2453 else if(op2->kind == 22 && op2->type->isSigned)
2454 *value2 = (double)(double)op2->__anon1.i64;
2455 else if(op2->kind == 22)
2456 *value2 = (double)(double)op2->__anon1.ui64;
2457 else if(op2->kind == 2 && op2->type->isSigned)
2458 *value2 = (double)(double)op2->__anon1.s;
2459 else if(op2->kind == 2)
2460 *value2 = (double)(double)op2->__anon1.us;
2461 else if(op2->kind == 1 && op2->type->isSigned)
2462 *value2 = (double)(double)op2->__anon1.c;
2463 else if(op2->kind == 24 || op2->kind == 1)
2464 *value2 = (double)(double)op2->__anon1.uc;
2465 else if(op2->kind == 6)
2466 *value2 = (double)op2->__anon1.f;
2467 else if(op2->kind == 7)
2468 *value2 = (double)op2->__anon1.d;
2469 else if(op2->kind == 13)
2470 *value2 = (double)(double)op2->__anon1.ui64;
2471 else
2472 return 0;
2473 return 1;
2474 }
2475
2476 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2477 {
2478 int value2 = op2->__anon1.i;
2479
2480 exp->type = 2;
2481 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
2482 if(!exp->expType)
2483 {
2484 exp->expType = op1->type;
2485 if(op1->type)
2486 op1->type->refCount++;
2487 }
2488 return 1;
2489 }
2490
2491 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2492 {
2493 unsigned int value2 = op2->__anon1.ui;
2494
2495 exp->type = 2;
2496 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
2497 if(!exp->expType)
2498 {
2499 exp->expType = op1->type;
2500 if(op1->type)
2501 op1->type->refCount++;
2502 }
2503 return 1;
2504 }
2505
2506 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2507 {
2508 long long value2 = op2->__anon1.i64;
2509
2510 exp->type = 2;
2511 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
2512 if(!exp->expType)
2513 {
2514 exp->expType = op1->type;
2515 if(op1->type)
2516 op1->type->refCount++;
2517 }
2518 return 1;
2519 }
2520
2521 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2522 {
2523 uint64 value2 = op2->__anon1.ui64;
2524
2525 exp->type = 2;
2526 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
2527 if(!exp->expType)
2528 {
2529 exp->expType = op1->type;
2530 if(op1->type)
2531 op1->type->refCount++;
2532 }
2533 return 1;
2534 }
2535
2536 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2537 {
2538 short value2 = op2->__anon1.s;
2539
2540 exp->type = 2;
2541 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s + value2));
2542 if(!exp->expType)
2543 {
2544 exp->expType = op1->type;
2545 if(op1->type)
2546 op1->type->refCount++;
2547 }
2548 return 1;
2549 }
2550
2551 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2552 {
2553 unsigned short value2 = op2->__anon1.us;
2554
2555 exp->type = 2;
2556 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us + value2));
2557 if(!exp->expType)
2558 {
2559 exp->expType = op1->type;
2560 if(op1->type)
2561 op1->type->refCount++;
2562 }
2563 return 1;
2564 }
2565
2566 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2567 {
2568 char value2 = op2->__anon1.c;
2569
2570 exp->type = 2;
2571 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c + value2));
2572 if(!exp->expType)
2573 {
2574 exp->expType = op1->type;
2575 if(op1->type)
2576 op1->type->refCount++;
2577 }
2578 return 1;
2579 }
2580
2581 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2582 {
2583 unsigned char value2 = op2->__anon1.uc;
2584
2585 exp->type = 2;
2586 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc + value2));
2587 if(!exp->expType)
2588 {
2589 exp->expType = op1->type;
2590 if(op1->type)
2591 op1->type->refCount++;
2592 }
2593 return 1;
2594 }
2595
2596 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2597 {
2598 float value2 = op2->__anon1.f;
2599
2600 exp->type = 2;
2601 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
2602 if(!exp->expType)
2603 {
2604 exp->expType = op1->type;
2605 if(op1->type)
2606 op1->type->refCount++;
2607 }
2608 return 1;
2609 }
2610
2611 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2612 {
2613 double value2 = op2->__anon1.d;
2614
2615 exp->type = 2;
2616 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
2617 if(!exp->expType)
2618 {
2619 exp->expType = op1->type;
2620 if(op1->type)
2621 op1->type->refCount++;
2622 }
2623 return 1;
2624 }
2625
2626 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2627 {
2628 int value2 = op2->__anon1.i;
2629
2630 exp->type = 2;
2631 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
2632 if(!exp->expType)
2633 {
2634 exp->expType = op1->type;
2635 if(op1->type)
2636 op1->type->refCount++;
2637 }
2638 return 1;
2639 }
2640
2641 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2642 {
2643 unsigned int value2 = op2->__anon1.ui;
2644
2645 exp->type = 2;
2646 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
2647 if(!exp->expType)
2648 {
2649 exp->expType = op1->type;
2650 if(op1->type)
2651 op1->type->refCount++;
2652 }
2653 return 1;
2654 }
2655
2656 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2657 {
2658 long long value2 = op2->__anon1.i64;
2659
2660 exp->type = 2;
2661 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
2662 if(!exp->expType)
2663 {
2664 exp->expType = op1->type;
2665 if(op1->type)
2666 op1->type->refCount++;
2667 }
2668 return 1;
2669 }
2670
2671 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2672 {
2673 uint64 value2 = op2->__anon1.ui64;
2674
2675 exp->type = 2;
2676 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
2677 if(!exp->expType)
2678 {
2679 exp->expType = op1->type;
2680 if(op1->type)
2681 op1->type->refCount++;
2682 }
2683 return 1;
2684 }
2685
2686 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2687 {
2688 short value2 = op2->__anon1.s;
2689
2690 exp->type = 2;
2691 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s - value2));
2692 if(!exp->expType)
2693 {
2694 exp->expType = op1->type;
2695 if(op1->type)
2696 op1->type->refCount++;
2697 }
2698 return 1;
2699 }
2700
2701 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2702 {
2703 unsigned short value2 = op2->__anon1.us;
2704
2705 exp->type = 2;
2706 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us - value2));
2707 if(!exp->expType)
2708 {
2709 exp->expType = op1->type;
2710 if(op1->type)
2711 op1->type->refCount++;
2712 }
2713 return 1;
2714 }
2715
2716 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2717 {
2718 char value2 = op2->__anon1.c;
2719
2720 exp->type = 2;
2721 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c - value2));
2722 if(!exp->expType)
2723 {
2724 exp->expType = op1->type;
2725 if(op1->type)
2726 op1->type->refCount++;
2727 }
2728 return 1;
2729 }
2730
2731 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2732 {
2733 unsigned char value2 = op2->__anon1.uc;
2734
2735 exp->type = 2;
2736 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc - value2));
2737 if(!exp->expType)
2738 {
2739 exp->expType = op1->type;
2740 if(op1->type)
2741 op1->type->refCount++;
2742 }
2743 return 1;
2744 }
2745
2746 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2747 {
2748 float value2 = op2->__anon1.f;
2749
2750 exp->type = 2;
2751 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
2752 if(!exp->expType)
2753 {
2754 exp->expType = op1->type;
2755 if(op1->type)
2756 op1->type->refCount++;
2757 }
2758 return 1;
2759 }
2760
2761 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2762 {
2763 double value2 = op2->__anon1.d;
2764
2765 exp->type = 2;
2766 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
2767 if(!exp->expType)
2768 {
2769 exp->expType = op1->type;
2770 if(op1->type)
2771 op1->type->refCount++;
2772 }
2773 return 1;
2774 }
2775
2776 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2777 {
2778 int value2 = op2->__anon1.i;
2779
2780 exp->type = 2;
2781 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
2782 if(!exp->expType)
2783 {
2784 exp->expType = op1->type;
2785 if(op1->type)
2786 op1->type->refCount++;
2787 }
2788 return 1;
2789 }
2790
2791 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2792 {
2793 unsigned int value2 = op2->__anon1.ui;
2794
2795 exp->type = 2;
2796 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
2797 if(!exp->expType)
2798 {
2799 exp->expType = op1->type;
2800 if(op1->type)
2801 op1->type->refCount++;
2802 }
2803 return 1;
2804 }
2805
2806 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2807 {
2808 long long value2 = op2->__anon1.i64;
2809
2810 exp->type = 2;
2811 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
2812 if(!exp->expType)
2813 {
2814 exp->expType = op1->type;
2815 if(op1->type)
2816 op1->type->refCount++;
2817 }
2818 return 1;
2819 }
2820
2821 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2822 {
2823 uint64 value2 = op2->__anon1.ui64;
2824
2825 exp->type = 2;
2826 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
2827 if(!exp->expType)
2828 {
2829 exp->expType = op1->type;
2830 if(op1->type)
2831 op1->type->refCount++;
2832 }
2833 return 1;
2834 }
2835
2836 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2837 {
2838 short value2 = op2->__anon1.s;
2839
2840 exp->type = 2;
2841 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s * value2));
2842 if(!exp->expType)
2843 {
2844 exp->expType = op1->type;
2845 if(op1->type)
2846 op1->type->refCount++;
2847 }
2848 return 1;
2849 }
2850
2851 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2852 {
2853 unsigned short value2 = op2->__anon1.us;
2854
2855 exp->type = 2;
2856 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us * value2));
2857 if(!exp->expType)
2858 {
2859 exp->expType = op1->type;
2860 if(op1->type)
2861 op1->type->refCount++;
2862 }
2863 return 1;
2864 }
2865
2866 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2867 {
2868 char value2 = op2->__anon1.c;
2869
2870 exp->type = 2;
2871 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c * value2));
2872 if(!exp->expType)
2873 {
2874 exp->expType = op1->type;
2875 if(op1->type)
2876 op1->type->refCount++;
2877 }
2878 return 1;
2879 }
2880
2881 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2882 {
2883 unsigned char value2 = op2->__anon1.uc;
2884
2885 exp->type = 2;
2886 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc * value2));
2887 if(!exp->expType)
2888 {
2889 exp->expType = op1->type;
2890 if(op1->type)
2891 op1->type->refCount++;
2892 }
2893 return 1;
2894 }
2895
2896 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2897 {
2898 float value2 = op2->__anon1.f;
2899
2900 exp->type = 2;
2901 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
2902 if(!exp->expType)
2903 {
2904 exp->expType = op1->type;
2905 if(op1->type)
2906 op1->type->refCount++;
2907 }
2908 return 1;
2909 }
2910
2911 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2912 {
2913 double value2 = op2->__anon1.d;
2914
2915 exp->type = 2;
2916 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
2917 if(!exp->expType)
2918 {
2919 exp->expType = op1->type;
2920 if(op1->type)
2921 op1->type->refCount++;
2922 }
2923 return 1;
2924 }
2925
2926 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2927 {
2928 int value2 = op2->__anon1.i;
2929
2930 exp->type = 2;
2931 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i / value2)) : 0);
2932 if(!exp->expType)
2933 {
2934 exp->expType = op1->type;
2935 if(op1->type)
2936 op1->type->refCount++;
2937 }
2938 return 1;
2939 }
2940
2941 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2942 {
2943 unsigned int value2 = op2->__anon1.ui;
2944
2945 exp->type = 2;
2946 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui / value2)) : 0);
2947 if(!exp->expType)
2948 {
2949 exp->expType = op1->type;
2950 if(op1->type)
2951 op1->type->refCount++;
2952 }
2953 return 1;
2954 }
2955
2956 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2957 {
2958 long long value2 = op2->__anon1.i64;
2959
2960 exp->type = 2;
2961 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 / value2)) : 0);
2962 if(!exp->expType)
2963 {
2964 exp->expType = op1->type;
2965 if(op1->type)
2966 op1->type->refCount++;
2967 }
2968 return 1;
2969 }
2970
2971 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2972 {
2973 uint64 value2 = op2->__anon1.ui64;
2974
2975 exp->type = 2;
2976 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 / value2)) : 0);
2977 if(!exp->expType)
2978 {
2979 exp->expType = op1->type;
2980 if(op1->type)
2981 op1->type->refCount++;
2982 }
2983 return 1;
2984 }
2985
2986 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
2987 {
2988 short value2 = op2->__anon1.s;
2989
2990 exp->type = 2;
2991 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s / value2)) : 0);
2992 if(!exp->expType)
2993 {
2994 exp->expType = op1->type;
2995 if(op1->type)
2996 op1->type->refCount++;
2997 }
2998 return 1;
2999 }
3000
3001 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3002 {
3003 unsigned short value2 = op2->__anon1.us;
3004
3005 exp->type = 2;
3006 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us / value2)) : 0);
3007 if(!exp->expType)
3008 {
3009 exp->expType = op1->type;
3010 if(op1->type)
3011 op1->type->refCount++;
3012 }
3013 return 1;
3014 }
3015
3016 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3017 {
3018 char value2 = op2->__anon1.c;
3019
3020 exp->type = 2;
3021 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c / value2)) : 0);
3022 if(!exp->expType)
3023 {
3024 exp->expType = op1->type;
3025 if(op1->type)
3026 op1->type->refCount++;
3027 }
3028 return 1;
3029 }
3030
3031 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3032 {
3033 unsigned char value2 = op2->__anon1.uc;
3034
3035 exp->type = 2;
3036 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc / value2)) : 0);
3037 if(!exp->expType)
3038 {
3039 exp->expType = op1->type;
3040 if(op1->type)
3041 op1->type->refCount++;
3042 }
3043 return 1;
3044 }
3045
3046 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3047 {
3048 float value2 = op2->__anon1.f;
3049
3050 exp->type = 2;
3051 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f / value2));
3052 if(!exp->expType)
3053 {
3054 exp->expType = op1->type;
3055 if(op1->type)
3056 op1->type->refCount++;
3057 }
3058 return 1;
3059 }
3060
3061 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3062 {
3063 double value2 = op2->__anon1.d;
3064
3065 exp->type = 2;
3066 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d / value2));
3067 if(!exp->expType)
3068 {
3069 exp->expType = op1->type;
3070 if(op1->type)
3071 op1->type->refCount++;
3072 }
3073 return 1;
3074 }
3075
3076 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3077 {
3078 int value2 = op2->__anon1.i;
3079
3080 exp->type = 2;
3081 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i % value2)) : 0);
3082 if(!exp->expType)
3083 {
3084 exp->expType = op1->type;
3085 if(op1->type)
3086 op1->type->refCount++;
3087 }
3088 return 1;
3089 }
3090
3091 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3092 {
3093 unsigned int value2 = op2->__anon1.ui;
3094
3095 exp->type = 2;
3096 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui % value2)) : 0);
3097 if(!exp->expType)
3098 {
3099 exp->expType = op1->type;
3100 if(op1->type)
3101 op1->type->refCount++;
3102 }
3103 return 1;
3104 }
3105
3106 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3107 {
3108 long long value2 = op2->__anon1.i64;
3109
3110 exp->type = 2;
3111 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 % value2)) : 0);
3112 if(!exp->expType)
3113 {
3114 exp->expType = op1->type;
3115 if(op1->type)
3116 op1->type->refCount++;
3117 }
3118 return 1;
3119 }
3120
3121 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3122 {
3123 uint64 value2 = op2->__anon1.ui64;
3124
3125 exp->type = 2;
3126 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 % value2)) : 0);
3127 if(!exp->expType)
3128 {
3129 exp->expType = op1->type;
3130 if(op1->type)
3131 op1->type->refCount++;
3132 }
3133 return 1;
3134 }
3135
3136 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3137 {
3138 short value2 = op2->__anon1.s;
3139
3140 exp->type = 2;
3141 exp->__anon1.__anon2.string = PrintShort(value2 ? ((short)(op1->__anon1.s % value2)) : 0);
3142 if(!exp->expType)
3143 {
3144 exp->expType = op1->type;
3145 if(op1->type)
3146 op1->type->refCount++;
3147 }
3148 return 1;
3149 }
3150
3151 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3152 {
3153 unsigned short value2 = op2->__anon1.us;
3154
3155 exp->type = 2;
3156 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((unsigned short)(op1->__anon1.us % value2)) : 0);
3157 if(!exp->expType)
3158 {
3159 exp->expType = op1->type;
3160 if(op1->type)
3161 op1->type->refCount++;
3162 }
3163 return 1;
3164 }
3165
3166 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3167 {
3168 char value2 = op2->__anon1.c;
3169
3170 exp->type = 2;
3171 exp->__anon1.__anon2.string = PrintChar(value2 ? ((char)(op1->__anon1.c % value2)) : 0);
3172 if(!exp->expType)
3173 {
3174 exp->expType = op1->type;
3175 if(op1->type)
3176 op1->type->refCount++;
3177 }
3178 return 1;
3179 }
3180
3181 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3182 {
3183 unsigned char value2 = op2->__anon1.uc;
3184
3185 exp->type = 2;
3186 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((unsigned char)(op1->__anon1.uc % value2)) : 0);
3187 if(!exp->expType)
3188 {
3189 exp->expType = op1->type;
3190 if(op1->type)
3191 op1->type->refCount++;
3192 }
3193 return 1;
3194 }
3195
3196 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
3197 {
3198 exp->type = 2;
3199 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
3200 if(!exp->expType)
3201 {
3202 exp->expType = op1->type;
3203 if(op1->type)
3204 op1->type->refCount++;
3205 }
3206 return 1;
3207 }
3208
3209 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
3210 {
3211 exp->type = 2;
3212 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
3213 if(!exp->expType)
3214 {
3215 exp->expType = op1->type;
3216 if(op1->type)
3217 op1->type->refCount++;
3218 }
3219 return 1;
3220 }
3221
3222 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
3223 {
3224 exp->type = 2;
3225 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
3226 if(!exp->expType)
3227 {
3228 exp->expType = op1->type;
3229 if(op1->type)
3230 op1->type->refCount++;
3231 }
3232 return 1;
3233 }
3234
3235 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
3236 {
3237 exp->type = 2;
3238 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
3239 if(!exp->expType)
3240 {
3241 exp->expType = op1->type;
3242 if(op1->type)
3243 op1->type->refCount++;
3244 }
3245 return 1;
3246 }
3247
3248 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
3249 {
3250 exp->type = 2;
3251 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
3252 if(!exp->expType)
3253 {
3254 exp->expType = op1->type;
3255 if(op1->type)
3256 op1->type->refCount++;
3257 }
3258 return 1;
3259 }
3260
3261 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
3262 {
3263 exp->type = 2;
3264 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
3265 if(!exp->expType)
3266 {
3267 exp->expType = op1->type;
3268 if(op1->type)
3269 op1->type->refCount++;
3270 }
3271 return 1;
3272 }
3273
3274 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
3275 {
3276 exp->type = 2;
3277 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
3278 if(!exp->expType)
3279 {
3280 exp->expType = op1->type;
3281 if(op1->type)
3282 op1->type->refCount++;
3283 }
3284 return 1;
3285 }
3286
3287 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
3288 {
3289 exp->type = 2;
3290 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
3291 if(!exp->expType)
3292 {
3293 exp->expType = op1->type;
3294 if(op1->type)
3295 op1->type->refCount++;
3296 }
3297 return 1;
3298 }
3299
3300 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
3301 {
3302 exp->type = 2;
3303 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
3304 if(!exp->expType)
3305 {
3306 exp->expType = op1->type;
3307 if(op1->type)
3308 op1->type->refCount++;
3309 }
3310 return 1;
3311 }
3312
3313 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
3314 {
3315 exp->type = 2;
3316 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
3317 if(!exp->expType)
3318 {
3319 exp->expType = op1->type;
3320 if(op1->type)
3321 op1->type->refCount++;
3322 }
3323 return 1;
3324 }
3325
3326 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
3327 {
3328 exp->type = 2;
3329 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
3330 if(!exp->expType)
3331 {
3332 exp->expType = op1->type;
3333 if(op1->type)
3334 op1->type->refCount++;
3335 }
3336 return 1;
3337 }
3338
3339 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
3340 {
3341 exp->type = 2;
3342 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
3343 if(!exp->expType)
3344 {
3345 exp->expType = op1->type;
3346 if(op1->type)
3347 op1->type->refCount++;
3348 }
3349 return 1;
3350 }
3351
3352 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
3353 {
3354 exp->type = 2;
3355 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
3356 if(!exp->expType)
3357 {
3358 exp->expType = op1->type;
3359 if(op1->type)
3360 op1->type->refCount++;
3361 }
3362 return 1;
3363 }
3364
3365 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
3366 {
3367 exp->type = 2;
3368 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
3369 if(!exp->expType)
3370 {
3371 exp->expType = op1->type;
3372 if(op1->type)
3373 op1->type->refCount++;
3374 }
3375 return 1;
3376 }
3377
3378 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
3379 {
3380 exp->type = 2;
3381 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
3382 if(!exp->expType)
3383 {
3384 exp->expType = op1->type;
3385 if(op1->type)
3386 op1->type->refCount++;
3387 }
3388 return 1;
3389 }
3390
3391 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
3392 {
3393 exp->type = 2;
3394 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
3395 if(!exp->expType)
3396 {
3397 exp->expType = op1->type;
3398 if(op1->type)
3399 op1->type->refCount++;
3400 }
3401 return 1;
3402 }
3403
3404 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
3405 {
3406 exp->type = 2;
3407 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
3408 if(!exp->expType)
3409 {
3410 exp->expType = op1->type;
3411 if(op1->type)
3412 op1->type->refCount++;
3413 }
3414 return 1;
3415 }
3416
3417 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
3418 {
3419 exp->type = 2;
3420 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
3421 if(!exp->expType)
3422 {
3423 exp->expType = op1->type;
3424 if(op1->type)
3425 op1->type->refCount++;
3426 }
3427 return 1;
3428 }
3429
3430 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
3431 {
3432 exp->type = 2;
3433 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
3434 if(!exp->expType)
3435 {
3436 exp->expType = op1->type;
3437 if(op1->type)
3438 op1->type->refCount++;
3439 }
3440 return 1;
3441 }
3442
3443 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
3444 {
3445 exp->type = 2;
3446 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
3447 if(!exp->expType)
3448 {
3449 exp->expType = op1->type;
3450 if(op1->type)
3451 op1->type->refCount++;
3452 }
3453 return 1;
3454 }
3455
3456 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
3457 {
3458 exp->type = 2;
3459 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
3460 if(!exp->expType)
3461 {
3462 exp->expType = op1->type;
3463 if(op1->type)
3464 op1->type->refCount++;
3465 }
3466 return 1;
3467 }
3468
3469 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
3470 {
3471 exp->type = 2;
3472 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
3473 if(!exp->expType)
3474 {
3475 exp->expType = op1->type;
3476 if(op1->type)
3477 op1->type->refCount++;
3478 }
3479 return 1;
3480 }
3481
3482 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
3483 {
3484 exp->type = 2;
3485 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
3486 if(!exp->expType)
3487 {
3488 exp->expType = op1->type;
3489 if(op1->type)
3490 op1->type->refCount++;
3491 }
3492 return 1;
3493 }
3494
3495 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
3496 {
3497 exp->type = 2;
3498 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
3499 if(!exp->expType)
3500 {
3501 exp->expType = op1->type;
3502 if(op1->type)
3503 op1->type->refCount++;
3504 }
3505 return 1;
3506 }
3507
3508 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
3509 {
3510 exp->type = 2;
3511 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
3512 if(!exp->expType)
3513 {
3514 exp->expType = op1->type;
3515 if(op1->type)
3516 op1->type->refCount++;
3517 }
3518 return 1;
3519 }
3520
3521 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
3522 {
3523 exp->type = 2;
3524 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
3525 if(!exp->expType)
3526 {
3527 exp->expType = op1->type;
3528 if(op1->type)
3529 op1->type->refCount++;
3530 }
3531 return 1;
3532 }
3533
3534 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
3535 {
3536 exp->type = 2;
3537 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
3538 if(!exp->expType)
3539 {
3540 exp->expType = op1->type;
3541 if(op1->type)
3542 op1->type->refCount++;
3543 }
3544 return 1;
3545 }
3546
3547 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
3548 {
3549 exp->type = 2;
3550 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
3551 if(!exp->expType)
3552 {
3553 exp->expType = op1->type;
3554 if(op1->type)
3555 op1->type->refCount++;
3556 }
3557 return 1;
3558 }
3559
3560 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
3561 {
3562 exp->type = 2;
3563 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
3564 if(!exp->expType)
3565 {
3566 exp->expType = op1->type;
3567 if(op1->type)
3568 op1->type->refCount++;
3569 }
3570 return 1;
3571 }
3572
3573 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
3574 {
3575 exp->type = 2;
3576 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
3577 if(!exp->expType)
3578 {
3579 exp->expType = op1->type;
3580 if(op1->type)
3581 op1->type->refCount++;
3582 }
3583 return 1;
3584 }
3585
3586 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3587 {
3588 int value2 = op2->__anon1.i;
3589
3590 exp->type = 2;
3591 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
3592 if(!exp->expType)
3593 {
3594 exp->expType = op1->type;
3595 if(op1->type)
3596 op1->type->refCount++;
3597 }
3598 return 1;
3599 }
3600
3601 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3602 {
3603 unsigned int value2 = op2->__anon1.ui;
3604
3605 exp->type = 2;
3606 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
3607 if(!exp->expType)
3608 {
3609 exp->expType = op1->type;
3610 if(op1->type)
3611 op1->type->refCount++;
3612 }
3613 return 1;
3614 }
3615
3616 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3617 {
3618 long long value2 = op2->__anon1.i64;
3619
3620 exp->type = 2;
3621 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
3622 if(!exp->expType)
3623 {
3624 exp->expType = op1->type;
3625 if(op1->type)
3626 op1->type->refCount++;
3627 }
3628 return 1;
3629 }
3630
3631 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3632 {
3633 uint64 value2 = op2->__anon1.ui64;
3634
3635 exp->type = 2;
3636 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
3637 if(!exp->expType)
3638 {
3639 exp->expType = op1->type;
3640 if(op1->type)
3641 op1->type->refCount++;
3642 }
3643 return 1;
3644 }
3645
3646 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3647 {
3648 short value2 = op2->__anon1.s;
3649
3650 exp->type = 2;
3651 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
3652 if(!exp->expType)
3653 {
3654 exp->expType = op1->type;
3655 if(op1->type)
3656 op1->type->refCount++;
3657 }
3658 return 1;
3659 }
3660
3661 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3662 {
3663 unsigned short value2 = op2->__anon1.us;
3664
3665 exp->type = 2;
3666 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
3667 if(!exp->expType)
3668 {
3669 exp->expType = op1->type;
3670 if(op1->type)
3671 op1->type->refCount++;
3672 }
3673 return 1;
3674 }
3675
3676 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3677 {
3678 char value2 = op2->__anon1.c;
3679
3680 exp->type = 2;
3681 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
3682 if(!exp->expType)
3683 {
3684 exp->expType = op1->type;
3685 if(op1->type)
3686 op1->type->refCount++;
3687 }
3688 return 1;
3689 }
3690
3691 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3692 {
3693 unsigned char value2 = op2->__anon1.uc;
3694
3695 exp->type = 2;
3696 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
3697 if(!exp->expType)
3698 {
3699 exp->expType = op1->type;
3700 if(op1->type)
3701 op1->type->refCount++;
3702 }
3703 return 1;
3704 }
3705
3706 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3707 {
3708 float value2 = op2->__anon1.f;
3709
3710 exp->type = 2;
3711 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
3712 if(!exp->expType)
3713 {
3714 exp->expType = op1->type;
3715 if(op1->type)
3716 op1->type->refCount++;
3717 }
3718 return 1;
3719 }
3720
3721 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3722 {
3723 double value2 = op2->__anon1.d;
3724
3725 exp->type = 2;
3726 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
3727 if(!exp->expType)
3728 {
3729 exp->expType = op1->type;
3730 if(op1->type)
3731 op1->type->refCount++;
3732 }
3733 return 1;
3734 }
3735
3736 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3737 {
3738 int value2 = op2->__anon1.i;
3739
3740 exp->type = 2;
3741 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
3742 if(!exp->expType)
3743 {
3744 exp->expType = op1->type;
3745 if(op1->type)
3746 op1->type->refCount++;
3747 }
3748 return 1;
3749 }
3750
3751 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3752 {
3753 unsigned int value2 = op2->__anon1.ui;
3754
3755 exp->type = 2;
3756 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
3757 if(!exp->expType)
3758 {
3759 exp->expType = op1->type;
3760 if(op1->type)
3761 op1->type->refCount++;
3762 }
3763 return 1;
3764 }
3765
3766 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3767 {
3768 long long value2 = op2->__anon1.i64;
3769
3770 exp->type = 2;
3771 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
3772 if(!exp->expType)
3773 {
3774 exp->expType = op1->type;
3775 if(op1->type)
3776 op1->type->refCount++;
3777 }
3778 return 1;
3779 }
3780
3781 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3782 {
3783 uint64 value2 = op2->__anon1.ui64;
3784
3785 exp->type = 2;
3786 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
3787 if(!exp->expType)
3788 {
3789 exp->expType = op1->type;
3790 if(op1->type)
3791 op1->type->refCount++;
3792 }
3793 return 1;
3794 }
3795
3796 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3797 {
3798 short value2 = op2->__anon1.s;
3799
3800 exp->type = 2;
3801 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
3802 if(!exp->expType)
3803 {
3804 exp->expType = op1->type;
3805 if(op1->type)
3806 op1->type->refCount++;
3807 }
3808 return 1;
3809 }
3810
3811 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3812 {
3813 unsigned short value2 = op2->__anon1.us;
3814
3815 exp->type = 2;
3816 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
3817 if(!exp->expType)
3818 {
3819 exp->expType = op1->type;
3820 if(op1->type)
3821 op1->type->refCount++;
3822 }
3823 return 1;
3824 }
3825
3826 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3827 {
3828 char value2 = op2->__anon1.c;
3829
3830 exp->type = 2;
3831 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
3832 if(!exp->expType)
3833 {
3834 exp->expType = op1->type;
3835 if(op1->type)
3836 op1->type->refCount++;
3837 }
3838 return 1;
3839 }
3840
3841 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3842 {
3843 unsigned char value2 = op2->__anon1.uc;
3844
3845 exp->type = 2;
3846 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
3847 if(!exp->expType)
3848 {
3849 exp->expType = op1->type;
3850 if(op1->type)
3851 op1->type->refCount++;
3852 }
3853 return 1;
3854 }
3855
3856 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3857 {
3858 float value2 = op2->__anon1.f;
3859
3860 exp->type = 2;
3861 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
3862 if(!exp->expType)
3863 {
3864 exp->expType = op1->type;
3865 if(op1->type)
3866 op1->type->refCount++;
3867 }
3868 return 1;
3869 }
3870
3871 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3872 {
3873 double value2 = op2->__anon1.d;
3874
3875 exp->type = 2;
3876 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
3877 if(!exp->expType)
3878 {
3879 exp->expType = op1->type;
3880 if(op1->type)
3881 op1->type->refCount++;
3882 }
3883 return 1;
3884 }
3885
3886 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3887 {
3888 int value2 = op2->__anon1.i;
3889
3890 exp->type = 2;
3891 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
3892 if(!exp->expType)
3893 {
3894 exp->expType = op1->type;
3895 if(op1->type)
3896 op1->type->refCount++;
3897 }
3898 return 1;
3899 }
3900
3901 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3902 {
3903 unsigned int value2 = op2->__anon1.ui;
3904
3905 exp->type = 2;
3906 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
3907 if(!exp->expType)
3908 {
3909 exp->expType = op1->type;
3910 if(op1->type)
3911 op1->type->refCount++;
3912 }
3913 return 1;
3914 }
3915
3916 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3917 {
3918 long long value2 = op2->__anon1.i64;
3919
3920 exp->type = 2;
3921 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
3922 if(!exp->expType)
3923 {
3924 exp->expType = op1->type;
3925 if(op1->type)
3926 op1->type->refCount++;
3927 }
3928 return 1;
3929 }
3930
3931 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3932 {
3933 uint64 value2 = op2->__anon1.ui64;
3934
3935 exp->type = 2;
3936 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
3937 if(!exp->expType)
3938 {
3939 exp->expType = op1->type;
3940 if(op1->type)
3941 op1->type->refCount++;
3942 }
3943 return 1;
3944 }
3945
3946 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3947 {
3948 short value2 = op2->__anon1.s;
3949
3950 exp->type = 2;
3951 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
3952 if(!exp->expType)
3953 {
3954 exp->expType = op1->type;
3955 if(op1->type)
3956 op1->type->refCount++;
3957 }
3958 return 1;
3959 }
3960
3961 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3962 {
3963 unsigned short value2 = op2->__anon1.us;
3964
3965 exp->type = 2;
3966 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
3967 if(!exp->expType)
3968 {
3969 exp->expType = op1->type;
3970 if(op1->type)
3971 op1->type->refCount++;
3972 }
3973 return 1;
3974 }
3975
3976 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3977 {
3978 char value2 = op2->__anon1.c;
3979
3980 exp->type = 2;
3981 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
3982 if(!exp->expType)
3983 {
3984 exp->expType = op1->type;
3985 if(op1->type)
3986 op1->type->refCount++;
3987 }
3988 return 1;
3989 }
3990
3991 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
3992 {
3993 unsigned char value2 = op2->__anon1.uc;
3994
3995 exp->type = 2;
3996 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
3997 if(!exp->expType)
3998 {
3999 exp->expType = op1->type;
4000 if(op1->type)
4001 op1->type->refCount++;
4002 }
4003 return 1;
4004 }
4005
4006 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4007 {
4008 float value2 = op2->__anon1.f;
4009
4010 exp->type = 2;
4011 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
4012 if(!exp->expType)
4013 {
4014 exp->expType = op1->type;
4015 if(op1->type)
4016 op1->type->refCount++;
4017 }
4018 return 1;
4019 }
4020
4021 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4022 {
4023 double value2 = op2->__anon1.d;
4024
4025 exp->type = 2;
4026 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
4027 if(!exp->expType)
4028 {
4029 exp->expType = op1->type;
4030 if(op1->type)
4031 op1->type->refCount++;
4032 }
4033 return 1;
4034 }
4035
4036 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4037 {
4038 int value2 = op2->__anon1.i;
4039
4040 exp->type = 2;
4041 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
4042 if(!exp->expType)
4043 {
4044 exp->expType = op1->type;
4045 if(op1->type)
4046 op1->type->refCount++;
4047 }
4048 return 1;
4049 }
4050
4051 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4052 {
4053 unsigned int value2 = op2->__anon1.ui;
4054
4055 exp->type = 2;
4056 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
4057 if(!exp->expType)
4058 {
4059 exp->expType = op1->type;
4060 if(op1->type)
4061 op1->type->refCount++;
4062 }
4063 return 1;
4064 }
4065
4066 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4067 {
4068 long long value2 = op2->__anon1.i64;
4069
4070 exp->type = 2;
4071 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
4072 if(!exp->expType)
4073 {
4074 exp->expType = op1->type;
4075 if(op1->type)
4076 op1->type->refCount++;
4077 }
4078 return 1;
4079 }
4080
4081 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4082 {
4083 uint64 value2 = op2->__anon1.ui64;
4084
4085 exp->type = 2;
4086 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
4087 if(!exp->expType)
4088 {
4089 exp->expType = op1->type;
4090 if(op1->type)
4091 op1->type->refCount++;
4092 }
4093 return 1;
4094 }
4095
4096 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4097 {
4098 short value2 = op2->__anon1.s;
4099
4100 exp->type = 2;
4101 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
4102 if(!exp->expType)
4103 {
4104 exp->expType = op1->type;
4105 if(op1->type)
4106 op1->type->refCount++;
4107 }
4108 return 1;
4109 }
4110
4111 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4112 {
4113 unsigned short value2 = op2->__anon1.us;
4114
4115 exp->type = 2;
4116 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
4117 if(!exp->expType)
4118 {
4119 exp->expType = op1->type;
4120 if(op1->type)
4121 op1->type->refCount++;
4122 }
4123 return 1;
4124 }
4125
4126 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4127 {
4128 char value2 = op2->__anon1.c;
4129
4130 exp->type = 2;
4131 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
4132 if(!exp->expType)
4133 {
4134 exp->expType = op1->type;
4135 if(op1->type)
4136 op1->type->refCount++;
4137 }
4138 return 1;
4139 }
4140
4141 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4142 {
4143 unsigned char value2 = op2->__anon1.uc;
4144
4145 exp->type = 2;
4146 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
4147 if(!exp->expType)
4148 {
4149 exp->expType = op1->type;
4150 if(op1->type)
4151 op1->type->refCount++;
4152 }
4153 return 1;
4154 }
4155
4156 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4157 {
4158 float value2 = op2->__anon1.f;
4159
4160 exp->type = 2;
4161 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
4162 if(!exp->expType)
4163 {
4164 exp->expType = op1->type;
4165 if(op1->type)
4166 op1->type->refCount++;
4167 }
4168 return 1;
4169 }
4170
4171 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4172 {
4173 double value2 = op2->__anon1.d;
4174
4175 exp->type = 2;
4176 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
4177 if(!exp->expType)
4178 {
4179 exp->expType = op1->type;
4180 if(op1->type)
4181 op1->type->refCount++;
4182 }
4183 return 1;
4184 }
4185
4186 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4187 {
4188 int value2 = op2->__anon1.i;
4189
4190 exp->type = 2;
4191 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i /= value2)) : 0);
4192 if(!exp->expType)
4193 {
4194 exp->expType = op1->type;
4195 if(op1->type)
4196 op1->type->refCount++;
4197 }
4198 return 1;
4199 }
4200
4201 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4202 {
4203 unsigned int value2 = op2->__anon1.ui;
4204
4205 exp->type = 2;
4206 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui /= value2)) : 0);
4207 if(!exp->expType)
4208 {
4209 exp->expType = op1->type;
4210 if(op1->type)
4211 op1->type->refCount++;
4212 }
4213 return 1;
4214 }
4215
4216 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4217 {
4218 long long value2 = op2->__anon1.i64;
4219
4220 exp->type = 2;
4221 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 /= value2)) : 0);
4222 if(!exp->expType)
4223 {
4224 exp->expType = op1->type;
4225 if(op1->type)
4226 op1->type->refCount++;
4227 }
4228 return 1;
4229 }
4230
4231 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4232 {
4233 uint64 value2 = op2->__anon1.ui64;
4234
4235 exp->type = 2;
4236 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 /= value2)) : 0);
4237 if(!exp->expType)
4238 {
4239 exp->expType = op1->type;
4240 if(op1->type)
4241 op1->type->refCount++;
4242 }
4243 return 1;
4244 }
4245
4246 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4247 {
4248 short value2 = op2->__anon1.s;
4249
4250 exp->type = 2;
4251 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s /= value2)) : 0);
4252 if(!exp->expType)
4253 {
4254 exp->expType = op1->type;
4255 if(op1->type)
4256 op1->type->refCount++;
4257 }
4258 return 1;
4259 }
4260
4261 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4262 {
4263 unsigned short value2 = op2->__anon1.us;
4264
4265 exp->type = 2;
4266 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us /= value2)) : 0);
4267 if(!exp->expType)
4268 {
4269 exp->expType = op1->type;
4270 if(op1->type)
4271 op1->type->refCount++;
4272 }
4273 return 1;
4274 }
4275
4276 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4277 {
4278 char value2 = op2->__anon1.c;
4279
4280 exp->type = 2;
4281 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c /= value2)) : 0);
4282 if(!exp->expType)
4283 {
4284 exp->expType = op1->type;
4285 if(op1->type)
4286 op1->type->refCount++;
4287 }
4288 return 1;
4289 }
4290
4291 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4292 {
4293 unsigned char value2 = op2->__anon1.uc;
4294
4295 exp->type = 2;
4296 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc /= value2)) : 0);
4297 if(!exp->expType)
4298 {
4299 exp->expType = op1->type;
4300 if(op1->type)
4301 op1->type->refCount++;
4302 }
4303 return 1;
4304 }
4305
4306 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4307 {
4308 float value2 = op2->__anon1.f;
4309
4310 exp->type = 2;
4311 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f /= value2));
4312 if(!exp->expType)
4313 {
4314 exp->expType = op1->type;
4315 if(op1->type)
4316 op1->type->refCount++;
4317 }
4318 return 1;
4319 }
4320
4321 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4322 {
4323 double value2 = op2->__anon1.d;
4324
4325 exp->type = 2;
4326 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d /= value2));
4327 if(!exp->expType)
4328 {
4329 exp->expType = op1->type;
4330 if(op1->type)
4331 op1->type->refCount++;
4332 }
4333 return 1;
4334 }
4335
4336 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4337 {
4338 int value2 = op2->__anon1.i;
4339
4340 exp->type = 2;
4341 exp->__anon1.__anon2.string = PrintInt(value2 ? ((op1->__anon1.i %= value2)) : 0);
4342 if(!exp->expType)
4343 {
4344 exp->expType = op1->type;
4345 if(op1->type)
4346 op1->type->refCount++;
4347 }
4348 return 1;
4349 }
4350
4351 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4352 {
4353 unsigned int value2 = op2->__anon1.ui;
4354
4355 exp->type = 2;
4356 exp->__anon1.__anon2.string = PrintUInt(value2 ? ((op1->__anon1.ui %= value2)) : 0);
4357 if(!exp->expType)
4358 {
4359 exp->expType = op1->type;
4360 if(op1->type)
4361 op1->type->refCount++;
4362 }
4363 return 1;
4364 }
4365
4366 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4367 {
4368 long long value2 = op2->__anon1.i64;
4369
4370 exp->type = 2;
4371 exp->__anon1.__anon2.string = PrintInt64(value2 ? ((op1->__anon1.i64 %= value2)) : 0);
4372 if(!exp->expType)
4373 {
4374 exp->expType = op1->type;
4375 if(op1->type)
4376 op1->type->refCount++;
4377 }
4378 return 1;
4379 }
4380
4381 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4382 {
4383 uint64 value2 = op2->__anon1.ui64;
4384
4385 exp->type = 2;
4386 exp->__anon1.__anon2.string = PrintUInt64(value2 ? ((op1->__anon1.ui64 %= value2)) : 0);
4387 if(!exp->expType)
4388 {
4389 exp->expType = op1->type;
4390 if(op1->type)
4391 op1->type->refCount++;
4392 }
4393 return 1;
4394 }
4395
4396 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4397 {
4398 short value2 = op2->__anon1.s;
4399
4400 exp->type = 2;
4401 exp->__anon1.__anon2.string = PrintShort(value2 ? ((op1->__anon1.s %= value2)) : 0);
4402 if(!exp->expType)
4403 {
4404 exp->expType = op1->type;
4405 if(op1->type)
4406 op1->type->refCount++;
4407 }
4408 return 1;
4409 }
4410
4411 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4412 {
4413 unsigned short value2 = op2->__anon1.us;
4414
4415 exp->type = 2;
4416 exp->__anon1.__anon2.string = PrintUShort(value2 ? ((op1->__anon1.us %= value2)) : 0);
4417 if(!exp->expType)
4418 {
4419 exp->expType = op1->type;
4420 if(op1->type)
4421 op1->type->refCount++;
4422 }
4423 return 1;
4424 }
4425
4426 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4427 {
4428 char value2 = op2->__anon1.c;
4429
4430 exp->type = 2;
4431 exp->__anon1.__anon2.string = PrintChar(value2 ? ((op1->__anon1.c %= value2)) : 0);
4432 if(!exp->expType)
4433 {
4434 exp->expType = op1->type;
4435 if(op1->type)
4436 op1->type->refCount++;
4437 }
4438 return 1;
4439 }
4440
4441 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4442 {
4443 unsigned char value2 = op2->__anon1.uc;
4444
4445 exp->type = 2;
4446 exp->__anon1.__anon2.string = PrintUChar(value2 ? ((op1->__anon1.uc %= value2)) : 0);
4447 if(!exp->expType)
4448 {
4449 exp->expType = op1->type;
4450 if(op1->type)
4451 op1->type->refCount++;
4452 }
4453 return 1;
4454 }
4455
4456 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4457 {
4458 int value2 = op2->__anon1.i;
4459
4460 exp->type = 2;
4461 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
4462 if(!exp->expType)
4463 {
4464 exp->expType = op1->type;
4465 if(op1->type)
4466 op1->type->refCount++;
4467 }
4468 return 1;
4469 }
4470
4471 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4472 {
4473 unsigned int value2 = op2->__anon1.ui;
4474
4475 exp->type = 2;
4476 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
4477 if(!exp->expType)
4478 {
4479 exp->expType = op1->type;
4480 if(op1->type)
4481 op1->type->refCount++;
4482 }
4483 return 1;
4484 }
4485
4486 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4487 {
4488 long long value2 = op2->__anon1.i64;
4489
4490 exp->type = 2;
4491 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
4492 if(!exp->expType)
4493 {
4494 exp->expType = op1->type;
4495 if(op1->type)
4496 op1->type->refCount++;
4497 }
4498 return 1;
4499 }
4500
4501 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4502 {
4503 uint64 value2 = op2->__anon1.ui64;
4504
4505 exp->type = 2;
4506 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
4507 if(!exp->expType)
4508 {
4509 exp->expType = op1->type;
4510 if(op1->type)
4511 op1->type->refCount++;
4512 }
4513 return 1;
4514 }
4515
4516 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4517 {
4518 short value2 = op2->__anon1.s;
4519
4520 exp->type = 2;
4521 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s & value2));
4522 if(!exp->expType)
4523 {
4524 exp->expType = op1->type;
4525 if(op1->type)
4526 op1->type->refCount++;
4527 }
4528 return 1;
4529 }
4530
4531 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4532 {
4533 unsigned short value2 = op2->__anon1.us;
4534
4535 exp->type = 2;
4536 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us & value2));
4537 if(!exp->expType)
4538 {
4539 exp->expType = op1->type;
4540 if(op1->type)
4541 op1->type->refCount++;
4542 }
4543 return 1;
4544 }
4545
4546 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4547 {
4548 char value2 = op2->__anon1.c;
4549
4550 exp->type = 2;
4551 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c & value2));
4552 if(!exp->expType)
4553 {
4554 exp->expType = op1->type;
4555 if(op1->type)
4556 op1->type->refCount++;
4557 }
4558 return 1;
4559 }
4560
4561 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4562 {
4563 unsigned char value2 = op2->__anon1.uc;
4564
4565 exp->type = 2;
4566 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc & value2));
4567 if(!exp->expType)
4568 {
4569 exp->expType = op1->type;
4570 if(op1->type)
4571 op1->type->refCount++;
4572 }
4573 return 1;
4574 }
4575
4576 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4577 {
4578 int value2 = op2->__anon1.i;
4579
4580 exp->type = 2;
4581 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
4582 if(!exp->expType)
4583 {
4584 exp->expType = op1->type;
4585 if(op1->type)
4586 op1->type->refCount++;
4587 }
4588 return 1;
4589 }
4590
4591 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4592 {
4593 unsigned int value2 = op2->__anon1.ui;
4594
4595 exp->type = 2;
4596 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
4597 if(!exp->expType)
4598 {
4599 exp->expType = op1->type;
4600 if(op1->type)
4601 op1->type->refCount++;
4602 }
4603 return 1;
4604 }
4605
4606 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4607 {
4608 long long value2 = op2->__anon1.i64;
4609
4610 exp->type = 2;
4611 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
4612 if(!exp->expType)
4613 {
4614 exp->expType = op1->type;
4615 if(op1->type)
4616 op1->type->refCount++;
4617 }
4618 return 1;
4619 }
4620
4621 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4622 {
4623 uint64 value2 = op2->__anon1.ui64;
4624
4625 exp->type = 2;
4626 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
4627 if(!exp->expType)
4628 {
4629 exp->expType = op1->type;
4630 if(op1->type)
4631 op1->type->refCount++;
4632 }
4633 return 1;
4634 }
4635
4636 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4637 {
4638 short value2 = op2->__anon1.s;
4639
4640 exp->type = 2;
4641 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s | value2));
4642 if(!exp->expType)
4643 {
4644 exp->expType = op1->type;
4645 if(op1->type)
4646 op1->type->refCount++;
4647 }
4648 return 1;
4649 }
4650
4651 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4652 {
4653 unsigned short value2 = op2->__anon1.us;
4654
4655 exp->type = 2;
4656 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us | value2));
4657 if(!exp->expType)
4658 {
4659 exp->expType = op1->type;
4660 if(op1->type)
4661 op1->type->refCount++;
4662 }
4663 return 1;
4664 }
4665
4666 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4667 {
4668 char value2 = op2->__anon1.c;
4669
4670 exp->type = 2;
4671 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c | value2));
4672 if(!exp->expType)
4673 {
4674 exp->expType = op1->type;
4675 if(op1->type)
4676 op1->type->refCount++;
4677 }
4678 return 1;
4679 }
4680
4681 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4682 {
4683 unsigned char value2 = op2->__anon1.uc;
4684
4685 exp->type = 2;
4686 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc | value2));
4687 if(!exp->expType)
4688 {
4689 exp->expType = op1->type;
4690 if(op1->type)
4691 op1->type->refCount++;
4692 }
4693 return 1;
4694 }
4695
4696 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4697 {
4698 int value2 = op2->__anon1.i;
4699
4700 exp->type = 2;
4701 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
4702 if(!exp->expType)
4703 {
4704 exp->expType = op1->type;
4705 if(op1->type)
4706 op1->type->refCount++;
4707 }
4708 return 1;
4709 }
4710
4711 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4712 {
4713 unsigned int value2 = op2->__anon1.ui;
4714
4715 exp->type = 2;
4716 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
4717 if(!exp->expType)
4718 {
4719 exp->expType = op1->type;
4720 if(op1->type)
4721 op1->type->refCount++;
4722 }
4723 return 1;
4724 }
4725
4726 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4727 {
4728 long long value2 = op2->__anon1.i64;
4729
4730 exp->type = 2;
4731 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
4732 if(!exp->expType)
4733 {
4734 exp->expType = op1->type;
4735 if(op1->type)
4736 op1->type->refCount++;
4737 }
4738 return 1;
4739 }
4740
4741 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4742 {
4743 uint64 value2 = op2->__anon1.ui64;
4744
4745 exp->type = 2;
4746 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
4747 if(!exp->expType)
4748 {
4749 exp->expType = op1->type;
4750 if(op1->type)
4751 op1->type->refCount++;
4752 }
4753 return 1;
4754 }
4755
4756 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4757 {
4758 short value2 = op2->__anon1.s;
4759
4760 exp->type = 2;
4761 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s ^ value2));
4762 if(!exp->expType)
4763 {
4764 exp->expType = op1->type;
4765 if(op1->type)
4766 op1->type->refCount++;
4767 }
4768 return 1;
4769 }
4770
4771 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4772 {
4773 unsigned short value2 = op2->__anon1.us;
4774
4775 exp->type = 2;
4776 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us ^ value2));
4777 if(!exp->expType)
4778 {
4779 exp->expType = op1->type;
4780 if(op1->type)
4781 op1->type->refCount++;
4782 }
4783 return 1;
4784 }
4785
4786 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4787 {
4788 char value2 = op2->__anon1.c;
4789
4790 exp->type = 2;
4791 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c ^ value2));
4792 if(!exp->expType)
4793 {
4794 exp->expType = op1->type;
4795 if(op1->type)
4796 op1->type->refCount++;
4797 }
4798 return 1;
4799 }
4800
4801 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4802 {
4803 unsigned char value2 = op2->__anon1.uc;
4804
4805 exp->type = 2;
4806 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc ^ value2));
4807 if(!exp->expType)
4808 {
4809 exp->expType = op1->type;
4810 if(op1->type)
4811 op1->type->refCount++;
4812 }
4813 return 1;
4814 }
4815
4816 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4817 {
4818 int value2 = op2->__anon1.i;
4819
4820 exp->type = 2;
4821 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
4822 if(!exp->expType)
4823 {
4824 exp->expType = op1->type;
4825 if(op1->type)
4826 op1->type->refCount++;
4827 }
4828 return 1;
4829 }
4830
4831 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4832 {
4833 unsigned int value2 = op2->__anon1.ui;
4834
4835 exp->type = 2;
4836 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
4837 if(!exp->expType)
4838 {
4839 exp->expType = op1->type;
4840 if(op1->type)
4841 op1->type->refCount++;
4842 }
4843 return 1;
4844 }
4845
4846 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4847 {
4848 long long value2 = op2->__anon1.i64;
4849
4850 exp->type = 2;
4851 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
4852 if(!exp->expType)
4853 {
4854 exp->expType = op1->type;
4855 if(op1->type)
4856 op1->type->refCount++;
4857 }
4858 return 1;
4859 }
4860
4861 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4862 {
4863 uint64 value2 = op2->__anon1.ui64;
4864
4865 exp->type = 2;
4866 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
4867 if(!exp->expType)
4868 {
4869 exp->expType = op1->type;
4870 if(op1->type)
4871 op1->type->refCount++;
4872 }
4873 return 1;
4874 }
4875
4876 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4877 {
4878 short value2 = op2->__anon1.s;
4879
4880 exp->type = 2;
4881 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s << value2));
4882 if(!exp->expType)
4883 {
4884 exp->expType = op1->type;
4885 if(op1->type)
4886 op1->type->refCount++;
4887 }
4888 return 1;
4889 }
4890
4891 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4892 {
4893 unsigned short value2 = op2->__anon1.us;
4894
4895 exp->type = 2;
4896 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us << value2));
4897 if(!exp->expType)
4898 {
4899 exp->expType = op1->type;
4900 if(op1->type)
4901 op1->type->refCount++;
4902 }
4903 return 1;
4904 }
4905
4906 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4907 {
4908 char value2 = op2->__anon1.c;
4909
4910 exp->type = 2;
4911 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c << value2));
4912 if(!exp->expType)
4913 {
4914 exp->expType = op1->type;
4915 if(op1->type)
4916 op1->type->refCount++;
4917 }
4918 return 1;
4919 }
4920
4921 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4922 {
4923 unsigned char value2 = op2->__anon1.uc;
4924
4925 exp->type = 2;
4926 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc << value2));
4927 if(!exp->expType)
4928 {
4929 exp->expType = op1->type;
4930 if(op1->type)
4931 op1->type->refCount++;
4932 }
4933 return 1;
4934 }
4935
4936 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4937 {
4938 int value2 = op2->__anon1.i;
4939
4940 exp->type = 2;
4941 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
4942 if(!exp->expType)
4943 {
4944 exp->expType = op1->type;
4945 if(op1->type)
4946 op1->type->refCount++;
4947 }
4948 return 1;
4949 }
4950
4951 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4952 {
4953 unsigned int value2 = op2->__anon1.ui;
4954
4955 exp->type = 2;
4956 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
4957 if(!exp->expType)
4958 {
4959 exp->expType = op1->type;
4960 if(op1->type)
4961 op1->type->refCount++;
4962 }
4963 return 1;
4964 }
4965
4966 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4967 {
4968 long long value2 = op2->__anon1.i64;
4969
4970 exp->type = 2;
4971 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
4972 if(!exp->expType)
4973 {
4974 exp->expType = op1->type;
4975 if(op1->type)
4976 op1->type->refCount++;
4977 }
4978 return 1;
4979 }
4980
4981 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4982 {
4983 uint64 value2 = op2->__anon1.ui64;
4984
4985 exp->type = 2;
4986 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
4987 if(!exp->expType)
4988 {
4989 exp->expType = op1->type;
4990 if(op1->type)
4991 op1->type->refCount++;
4992 }
4993 return 1;
4994 }
4995
4996 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
4997 {
4998 short value2 = op2->__anon1.s;
4999
5000 exp->type = 2;
5001 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >> value2));
5002 if(!exp->expType)
5003 {
5004 exp->expType = op1->type;
5005 if(op1->type)
5006 op1->type->refCount++;
5007 }
5008 return 1;
5009 }
5010
5011 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5012 {
5013 unsigned short value2 = op2->__anon1.us;
5014
5015 exp->type = 2;
5016 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >> value2));
5017 if(!exp->expType)
5018 {
5019 exp->expType = op1->type;
5020 if(op1->type)
5021 op1->type->refCount++;
5022 }
5023 return 1;
5024 }
5025
5026 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5027 {
5028 char value2 = op2->__anon1.c;
5029
5030 exp->type = 2;
5031 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >> value2));
5032 if(!exp->expType)
5033 {
5034 exp->expType = op1->type;
5035 if(op1->type)
5036 op1->type->refCount++;
5037 }
5038 return 1;
5039 }
5040
5041 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5042 {
5043 unsigned char value2 = op2->__anon1.uc;
5044
5045 exp->type = 2;
5046 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >> value2));
5047 if(!exp->expType)
5048 {
5049 exp->expType = op1->type;
5050 if(op1->type)
5051 op1->type->refCount++;
5052 }
5053 return 1;
5054 }
5055
5056 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
5057 {
5058 exp->type = 2;
5059 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
5060 if(!exp->expType)
5061 {
5062 exp->expType = op1->type;
5063 if(op1->type)
5064 op1->type->refCount++;
5065 }
5066 return 1;
5067 }
5068
5069 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
5070 {
5071 exp->type = 2;
5072 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
5073 if(!exp->expType)
5074 {
5075 exp->expType = op1->type;
5076 if(op1->type)
5077 op1->type->refCount++;
5078 }
5079 return 1;
5080 }
5081
5082 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
5083 {
5084 exp->type = 2;
5085 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
5086 if(!exp->expType)
5087 {
5088 exp->expType = op1->type;
5089 if(op1->type)
5090 op1->type->refCount++;
5091 }
5092 return 1;
5093 }
5094
5095 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
5096 {
5097 exp->type = 2;
5098 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
5099 if(!exp->expType)
5100 {
5101 exp->expType = op1->type;
5102 if(op1->type)
5103 op1->type->refCount++;
5104 }
5105 return 1;
5106 }
5107
5108 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
5109 {
5110 exp->type = 2;
5111 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
5112 if(!exp->expType)
5113 {
5114 exp->expType = op1->type;
5115 if(op1->type)
5116 op1->type->refCount++;
5117 }
5118 return 1;
5119 }
5120
5121 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
5122 {
5123 exp->type = 2;
5124 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
5125 if(!exp->expType)
5126 {
5127 exp->expType = op1->type;
5128 if(op1->type)
5129 op1->type->refCount++;
5130 }
5131 return 1;
5132 }
5133
5134 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
5135 {
5136 exp->type = 2;
5137 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
5138 if(!exp->expType)
5139 {
5140 exp->expType = op1->type;
5141 if(op1->type)
5142 op1->type->refCount++;
5143 }
5144 return 1;
5145 }
5146
5147 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
5148 {
5149 exp->type = 2;
5150 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
5151 if(!exp->expType)
5152 {
5153 exp->expType = op1->type;
5154 if(op1->type)
5155 op1->type->refCount++;
5156 }
5157 return 1;
5158 }
5159
5160 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5161 {
5162 int value2 = op2->__anon1.i;
5163
5164 exp->type = 2;
5165 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
5166 if(!exp->expType)
5167 {
5168 exp->expType = op1->type;
5169 if(op1->type)
5170 op1->type->refCount++;
5171 }
5172 return 1;
5173 }
5174
5175 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5176 {
5177 unsigned int value2 = op2->__anon1.ui;
5178
5179 exp->type = 2;
5180 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
5181 if(!exp->expType)
5182 {
5183 exp->expType = op1->type;
5184 if(op1->type)
5185 op1->type->refCount++;
5186 }
5187 return 1;
5188 }
5189
5190 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5191 {
5192 long long value2 = op2->__anon1.i64;
5193
5194 exp->type = 2;
5195 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
5196 if(!exp->expType)
5197 {
5198 exp->expType = op1->type;
5199 if(op1->type)
5200 op1->type->refCount++;
5201 }
5202 return 1;
5203 }
5204
5205 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5206 {
5207 uint64 value2 = op2->__anon1.ui64;
5208
5209 exp->type = 2;
5210 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
5211 if(!exp->expType)
5212 {
5213 exp->expType = op1->type;
5214 if(op1->type)
5215 op1->type->refCount++;
5216 }
5217 return 1;
5218 }
5219
5220 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5221 {
5222 short value2 = op2->__anon1.s;
5223
5224 exp->type = 2;
5225 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
5226 if(!exp->expType)
5227 {
5228 exp->expType = op1->type;
5229 if(op1->type)
5230 op1->type->refCount++;
5231 }
5232 return 1;
5233 }
5234
5235 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5236 {
5237 unsigned short value2 = op2->__anon1.us;
5238
5239 exp->type = 2;
5240 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
5241 if(!exp->expType)
5242 {
5243 exp->expType = op1->type;
5244 if(op1->type)
5245 op1->type->refCount++;
5246 }
5247 return 1;
5248 }
5249
5250 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5251 {
5252 char value2 = op2->__anon1.c;
5253
5254 exp->type = 2;
5255 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
5256 if(!exp->expType)
5257 {
5258 exp->expType = op1->type;
5259 if(op1->type)
5260 op1->type->refCount++;
5261 }
5262 return 1;
5263 }
5264
5265 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5266 {
5267 unsigned char value2 = op2->__anon1.uc;
5268
5269 exp->type = 2;
5270 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
5271 if(!exp->expType)
5272 {
5273 exp->expType = op1->type;
5274 if(op1->type)
5275 op1->type->refCount++;
5276 }
5277 return 1;
5278 }
5279
5280 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5281 {
5282 int value2 = op2->__anon1.i;
5283
5284 exp->type = 2;
5285 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
5286 if(!exp->expType)
5287 {
5288 exp->expType = op1->type;
5289 if(op1->type)
5290 op1->type->refCount++;
5291 }
5292 return 1;
5293 }
5294
5295 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5296 {
5297 unsigned int value2 = op2->__anon1.ui;
5298
5299 exp->type = 2;
5300 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
5301 if(!exp->expType)
5302 {
5303 exp->expType = op1->type;
5304 if(op1->type)
5305 op1->type->refCount++;
5306 }
5307 return 1;
5308 }
5309
5310 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5311 {
5312 long long value2 = op2->__anon1.i64;
5313
5314 exp->type = 2;
5315 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
5316 if(!exp->expType)
5317 {
5318 exp->expType = op1->type;
5319 if(op1->type)
5320 op1->type->refCount++;
5321 }
5322 return 1;
5323 }
5324
5325 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5326 {
5327 uint64 value2 = op2->__anon1.ui64;
5328
5329 exp->type = 2;
5330 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
5331 if(!exp->expType)
5332 {
5333 exp->expType = op1->type;
5334 if(op1->type)
5335 op1->type->refCount++;
5336 }
5337 return 1;
5338 }
5339
5340 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5341 {
5342 short value2 = op2->__anon1.s;
5343
5344 exp->type = 2;
5345 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
5346 if(!exp->expType)
5347 {
5348 exp->expType = op1->type;
5349 if(op1->type)
5350 op1->type->refCount++;
5351 }
5352 return 1;
5353 }
5354
5355 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5356 {
5357 unsigned short value2 = op2->__anon1.us;
5358
5359 exp->type = 2;
5360 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
5361 if(!exp->expType)
5362 {
5363 exp->expType = op1->type;
5364 if(op1->type)
5365 op1->type->refCount++;
5366 }
5367 return 1;
5368 }
5369
5370 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5371 {
5372 char value2 = op2->__anon1.c;
5373
5374 exp->type = 2;
5375 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
5376 if(!exp->expType)
5377 {
5378 exp->expType = op1->type;
5379 if(op1->type)
5380 op1->type->refCount++;
5381 }
5382 return 1;
5383 }
5384
5385 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5386 {
5387 unsigned char value2 = op2->__anon1.uc;
5388
5389 exp->type = 2;
5390 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
5391 if(!exp->expType)
5392 {
5393 exp->expType = op1->type;
5394 if(op1->type)
5395 op1->type->refCount++;
5396 }
5397 return 1;
5398 }
5399
5400 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5401 {
5402 int value2 = op2->__anon1.i;
5403
5404 exp->type = 2;
5405 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
5406 if(!exp->expType)
5407 {
5408 exp->expType = op1->type;
5409 if(op1->type)
5410 op1->type->refCount++;
5411 }
5412 return 1;
5413 }
5414
5415 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5416 {
5417 unsigned int value2 = op2->__anon1.ui;
5418
5419 exp->type = 2;
5420 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
5421 if(!exp->expType)
5422 {
5423 exp->expType = op1->type;
5424 if(op1->type)
5425 op1->type->refCount++;
5426 }
5427 return 1;
5428 }
5429
5430 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5431 {
5432 long long value2 = op2->__anon1.i64;
5433
5434 exp->type = 2;
5435 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
5436 if(!exp->expType)
5437 {
5438 exp->expType = op1->type;
5439 if(op1->type)
5440 op1->type->refCount++;
5441 }
5442 return 1;
5443 }
5444
5445 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5446 {
5447 uint64 value2 = op2->__anon1.ui64;
5448
5449 exp->type = 2;
5450 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
5451 if(!exp->expType)
5452 {
5453 exp->expType = op1->type;
5454 if(op1->type)
5455 op1->type->refCount++;
5456 }
5457 return 1;
5458 }
5459
5460 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5461 {
5462 short value2 = op2->__anon1.s;
5463
5464 exp->type = 2;
5465 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
5466 if(!exp->expType)
5467 {
5468 exp->expType = op1->type;
5469 if(op1->type)
5470 op1->type->refCount++;
5471 }
5472 return 1;
5473 }
5474
5475 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5476 {
5477 unsigned short value2 = op2->__anon1.us;
5478
5479 exp->type = 2;
5480 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
5481 if(!exp->expType)
5482 {
5483 exp->expType = op1->type;
5484 if(op1->type)
5485 op1->type->refCount++;
5486 }
5487 return 1;
5488 }
5489
5490 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5491 {
5492 char value2 = op2->__anon1.c;
5493
5494 exp->type = 2;
5495 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
5496 if(!exp->expType)
5497 {
5498 exp->expType = op1->type;
5499 if(op1->type)
5500 op1->type->refCount++;
5501 }
5502 return 1;
5503 }
5504
5505 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5506 {
5507 unsigned char value2 = op2->__anon1.uc;
5508
5509 exp->type = 2;
5510 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
5511 if(!exp->expType)
5512 {
5513 exp->expType = op1->type;
5514 if(op1->type)
5515 op1->type->refCount++;
5516 }
5517 return 1;
5518 }
5519
5520 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5521 {
5522 int value2 = op2->__anon1.i;
5523
5524 exp->type = 2;
5525 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
5526 if(!exp->expType)
5527 {
5528 exp->expType = op1->type;
5529 if(op1->type)
5530 op1->type->refCount++;
5531 }
5532 return 1;
5533 }
5534
5535 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5536 {
5537 unsigned int value2 = op2->__anon1.ui;
5538
5539 exp->type = 2;
5540 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
5541 if(!exp->expType)
5542 {
5543 exp->expType = op1->type;
5544 if(op1->type)
5545 op1->type->refCount++;
5546 }
5547 return 1;
5548 }
5549
5550 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5551 {
5552 long long value2 = op2->__anon1.i64;
5553
5554 exp->type = 2;
5555 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
5556 if(!exp->expType)
5557 {
5558 exp->expType = op1->type;
5559 if(op1->type)
5560 op1->type->refCount++;
5561 }
5562 return 1;
5563 }
5564
5565 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5566 {
5567 uint64 value2 = op2->__anon1.ui64;
5568
5569 exp->type = 2;
5570 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
5571 if(!exp->expType)
5572 {
5573 exp->expType = op1->type;
5574 if(op1->type)
5575 op1->type->refCount++;
5576 }
5577 return 1;
5578 }
5579
5580 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5581 {
5582 short value2 = op2->__anon1.s;
5583
5584 exp->type = 2;
5585 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
5586 if(!exp->expType)
5587 {
5588 exp->expType = op1->type;
5589 if(op1->type)
5590 op1->type->refCount++;
5591 }
5592 return 1;
5593 }
5594
5595 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5596 {
5597 unsigned short value2 = op2->__anon1.us;
5598
5599 exp->type = 2;
5600 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
5601 if(!exp->expType)
5602 {
5603 exp->expType = op1->type;
5604 if(op1->type)
5605 op1->type->refCount++;
5606 }
5607 return 1;
5608 }
5609
5610 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5611 {
5612 char value2 = op2->__anon1.c;
5613
5614 exp->type = 2;
5615 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
5616 if(!exp->expType)
5617 {
5618 exp->expType = op1->type;
5619 if(op1->type)
5620 op1->type->refCount++;
5621 }
5622 return 1;
5623 }
5624
5625 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5626 {
5627 unsigned char value2 = op2->__anon1.uc;
5628
5629 exp->type = 2;
5630 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
5631 if(!exp->expType)
5632 {
5633 exp->expType = op1->type;
5634 if(op1->type)
5635 op1->type->refCount++;
5636 }
5637 return 1;
5638 }
5639
5640 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5641 {
5642 int value2 = op2->__anon1.i;
5643
5644 exp->type = 2;
5645 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
5646 if(!exp->expType)
5647 {
5648 exp->expType = op1->type;
5649 if(op1->type)
5650 op1->type->refCount++;
5651 }
5652 return 1;
5653 }
5654
5655 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5656 {
5657 unsigned int value2 = op2->__anon1.ui;
5658
5659 exp->type = 2;
5660 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
5661 if(!exp->expType)
5662 {
5663 exp->expType = op1->type;
5664 if(op1->type)
5665 op1->type->refCount++;
5666 }
5667 return 1;
5668 }
5669
5670 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5671 {
5672 long long value2 = op2->__anon1.i64;
5673
5674 exp->type = 2;
5675 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
5676 if(!exp->expType)
5677 {
5678 exp->expType = op1->type;
5679 if(op1->type)
5680 op1->type->refCount++;
5681 }
5682 return 1;
5683 }
5684
5685 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5686 {
5687 uint64 value2 = op2->__anon1.ui64;
5688
5689 exp->type = 2;
5690 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
5691 if(!exp->expType)
5692 {
5693 exp->expType = op1->type;
5694 if(op1->type)
5695 op1->type->refCount++;
5696 }
5697 return 1;
5698 }
5699
5700 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5701 {
5702 short value2 = op2->__anon1.s;
5703
5704 exp->type = 2;
5705 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
5706 if(!exp->expType)
5707 {
5708 exp->expType = op1->type;
5709 if(op1->type)
5710 op1->type->refCount++;
5711 }
5712 return 1;
5713 }
5714
5715 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5716 {
5717 unsigned short value2 = op2->__anon1.us;
5718
5719 exp->type = 2;
5720 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
5721 if(!exp->expType)
5722 {
5723 exp->expType = op1->type;
5724 if(op1->type)
5725 op1->type->refCount++;
5726 }
5727 return 1;
5728 }
5729
5730 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5731 {
5732 char value2 = op2->__anon1.c;
5733
5734 exp->type = 2;
5735 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
5736 if(!exp->expType)
5737 {
5738 exp->expType = op1->type;
5739 if(op1->type)
5740 op1->type->refCount++;
5741 }
5742 return 1;
5743 }
5744
5745 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5746 {
5747 unsigned char value2 = op2->__anon1.uc;
5748
5749 exp->type = 2;
5750 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
5751 if(!exp->expType)
5752 {
5753 exp->expType = op1->type;
5754 if(op1->type)
5755 op1->type->refCount++;
5756 }
5757 return 1;
5758 }
5759
5760 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
5761 {
5762 exp->type = 2;
5763 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
5764 if(!exp->expType)
5765 {
5766 exp->expType = op1->type;
5767 if(op1->type)
5768 op1->type->refCount++;
5769 }
5770 return 1;
5771 }
5772
5773 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
5774 {
5775 exp->type = 2;
5776 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
5777 if(!exp->expType)
5778 {
5779 exp->expType = op1->type;
5780 if(op1->type)
5781 op1->type->refCount++;
5782 }
5783 return 1;
5784 }
5785
5786 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
5787 {
5788 exp->type = 2;
5789 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
5790 if(!exp->expType)
5791 {
5792 exp->expType = op1->type;
5793 if(op1->type)
5794 op1->type->refCount++;
5795 }
5796 return 1;
5797 }
5798
5799 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
5800 {
5801 exp->type = 2;
5802 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
5803 if(!exp->expType)
5804 {
5805 exp->expType = op1->type;
5806 if(op1->type)
5807 op1->type->refCount++;
5808 }
5809 return 1;
5810 }
5811
5812 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
5813 {
5814 exp->type = 2;
5815 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
5816 if(!exp->expType)
5817 {
5818 exp->expType = op1->type;
5819 if(op1->type)
5820 op1->type->refCount++;
5821 }
5822 return 1;
5823 }
5824
5825 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
5826 {
5827 exp->type = 2;
5828 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
5829 if(!exp->expType)
5830 {
5831 exp->expType = op1->type;
5832 if(op1->type)
5833 op1->type->refCount++;
5834 }
5835 return 1;
5836 }
5837
5838 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
5839 {
5840 exp->type = 2;
5841 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
5842 if(!exp->expType)
5843 {
5844 exp->expType = op1->type;
5845 if(op1->type)
5846 op1->type->refCount++;
5847 }
5848 return 1;
5849 }
5850
5851 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
5852 {
5853 exp->type = 2;
5854 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
5855 if(!exp->expType)
5856 {
5857 exp->expType = op1->type;
5858 if(op1->type)
5859 op1->type->refCount++;
5860 }
5861 return 1;
5862 }
5863
5864 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5865 {
5866 int value2 = op2->__anon1.i;
5867
5868 exp->type = 2;
5869 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
5870 if(!exp->expType)
5871 {
5872 exp->expType = op1->type;
5873 if(op1->type)
5874 op1->type->refCount++;
5875 }
5876 return 1;
5877 }
5878
5879 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5880 {
5881 unsigned int value2 = op2->__anon1.ui;
5882
5883 exp->type = 2;
5884 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
5885 if(!exp->expType)
5886 {
5887 exp->expType = op1->type;
5888 if(op1->type)
5889 op1->type->refCount++;
5890 }
5891 return 1;
5892 }
5893
5894 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5895 {
5896 long long value2 = op2->__anon1.i64;
5897
5898 exp->type = 2;
5899 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
5900 if(!exp->expType)
5901 {
5902 exp->expType = op1->type;
5903 if(op1->type)
5904 op1->type->refCount++;
5905 }
5906 return 1;
5907 }
5908
5909 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5910 {
5911 uint64 value2 = op2->__anon1.ui64;
5912
5913 exp->type = 2;
5914 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
5915 if(!exp->expType)
5916 {
5917 exp->expType = op1->type;
5918 if(op1->type)
5919 op1->type->refCount++;
5920 }
5921 return 1;
5922 }
5923
5924 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5925 {
5926 short value2 = op2->__anon1.s;
5927
5928 exp->type = 2;
5929 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
5930 if(!exp->expType)
5931 {
5932 exp->expType = op1->type;
5933 if(op1->type)
5934 op1->type->refCount++;
5935 }
5936 return 1;
5937 }
5938
5939 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5940 {
5941 unsigned short value2 = op2->__anon1.us;
5942
5943 exp->type = 2;
5944 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
5945 if(!exp->expType)
5946 {
5947 exp->expType = op1->type;
5948 if(op1->type)
5949 op1->type->refCount++;
5950 }
5951 return 1;
5952 }
5953
5954 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5955 {
5956 char value2 = op2->__anon1.c;
5957
5958 exp->type = 2;
5959 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
5960 if(!exp->expType)
5961 {
5962 exp->expType = op1->type;
5963 if(op1->type)
5964 op1->type->refCount++;
5965 }
5966 return 1;
5967 }
5968
5969 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5970 {
5971 unsigned char value2 = op2->__anon1.uc;
5972
5973 exp->type = 2;
5974 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
5975 if(!exp->expType)
5976 {
5977 exp->expType = op1->type;
5978 if(op1->type)
5979 op1->type->refCount++;
5980 }
5981 return 1;
5982 }
5983
5984 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
5985 {
5986 float value2 = op2->__anon1.f;
5987
5988 exp->type = 2;
5989 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
5990 if(!exp->expType)
5991 {
5992 exp->expType = op1->type;
5993 if(op1->type)
5994 op1->type->refCount++;
5995 }
5996 return 1;
5997 }
5998
5999 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6000 {
6001 double value2 = op2->__anon1.d;
6002
6003 exp->type = 2;
6004 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
6005 if(!exp->expType)
6006 {
6007 exp->expType = op1->type;
6008 if(op1->type)
6009 op1->type->refCount++;
6010 }
6011 return 1;
6012 }
6013
6014 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6015 {
6016 int value2 = op2->__anon1.i;
6017
6018 exp->type = 2;
6019 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
6020 if(!exp->expType)
6021 {
6022 exp->expType = op1->type;
6023 if(op1->type)
6024 op1->type->refCount++;
6025 }
6026 return 1;
6027 }
6028
6029 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6030 {
6031 unsigned int value2 = op2->__anon1.ui;
6032
6033 exp->type = 2;
6034 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
6035 if(!exp->expType)
6036 {
6037 exp->expType = op1->type;
6038 if(op1->type)
6039 op1->type->refCount++;
6040 }
6041 return 1;
6042 }
6043
6044 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6045 {
6046 long long value2 = op2->__anon1.i64;
6047
6048 exp->type = 2;
6049 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
6050 if(!exp->expType)
6051 {
6052 exp->expType = op1->type;
6053 if(op1->type)
6054 op1->type->refCount++;
6055 }
6056 return 1;
6057 }
6058
6059 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6060 {
6061 uint64 value2 = op2->__anon1.ui64;
6062
6063 exp->type = 2;
6064 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
6065 if(!exp->expType)
6066 {
6067 exp->expType = op1->type;
6068 if(op1->type)
6069 op1->type->refCount++;
6070 }
6071 return 1;
6072 }
6073
6074 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6075 {
6076 short value2 = op2->__anon1.s;
6077
6078 exp->type = 2;
6079 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
6080 if(!exp->expType)
6081 {
6082 exp->expType = op1->type;
6083 if(op1->type)
6084 op1->type->refCount++;
6085 }
6086 return 1;
6087 }
6088
6089 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6090 {
6091 unsigned short value2 = op2->__anon1.us;
6092
6093 exp->type = 2;
6094 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
6095 if(!exp->expType)
6096 {
6097 exp->expType = op1->type;
6098 if(op1->type)
6099 op1->type->refCount++;
6100 }
6101 return 1;
6102 }
6103
6104 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6105 {
6106 char value2 = op2->__anon1.c;
6107
6108 exp->type = 2;
6109 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
6110 if(!exp->expType)
6111 {
6112 exp->expType = op1->type;
6113 if(op1->type)
6114 op1->type->refCount++;
6115 }
6116 return 1;
6117 }
6118
6119 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6120 {
6121 unsigned char value2 = op2->__anon1.uc;
6122
6123 exp->type = 2;
6124 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
6125 if(!exp->expType)
6126 {
6127 exp->expType = op1->type;
6128 if(op1->type)
6129 op1->type->refCount++;
6130 }
6131 return 1;
6132 }
6133
6134 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6135 {
6136 float value2 = op2->__anon1.f;
6137
6138 exp->type = 2;
6139 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
6140 if(!exp->expType)
6141 {
6142 exp->expType = op1->type;
6143 if(op1->type)
6144 op1->type->refCount++;
6145 }
6146 return 1;
6147 }
6148
6149 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6150 {
6151 double value2 = op2->__anon1.d;
6152
6153 exp->type = 2;
6154 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
6155 if(!exp->expType)
6156 {
6157 exp->expType = op1->type;
6158 if(op1->type)
6159 op1->type->refCount++;
6160 }
6161 return 1;
6162 }
6163
6164 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6165 {
6166 int value2 = op2->__anon1.i;
6167
6168 exp->type = 2;
6169 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
6170 if(!exp->expType)
6171 {
6172 exp->expType = op1->type;
6173 if(op1->type)
6174 op1->type->refCount++;
6175 }
6176 return 1;
6177 }
6178
6179 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6180 {
6181 unsigned int value2 = op2->__anon1.ui;
6182
6183 exp->type = 2;
6184 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
6185 if(!exp->expType)
6186 {
6187 exp->expType = op1->type;
6188 if(op1->type)
6189 op1->type->refCount++;
6190 }
6191 return 1;
6192 }
6193
6194 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6195 {
6196 long long value2 = op2->__anon1.i64;
6197
6198 exp->type = 2;
6199 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
6200 if(!exp->expType)
6201 {
6202 exp->expType = op1->type;
6203 if(op1->type)
6204 op1->type->refCount++;
6205 }
6206 return 1;
6207 }
6208
6209 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6210 {
6211 uint64 value2 = op2->__anon1.ui64;
6212
6213 exp->type = 2;
6214 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
6215 if(!exp->expType)
6216 {
6217 exp->expType = op1->type;
6218 if(op1->type)
6219 op1->type->refCount++;
6220 }
6221 return 1;
6222 }
6223
6224 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6225 {
6226 short value2 = op2->__anon1.s;
6227
6228 exp->type = 2;
6229 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
6230 if(!exp->expType)
6231 {
6232 exp->expType = op1->type;
6233 if(op1->type)
6234 op1->type->refCount++;
6235 }
6236 return 1;
6237 }
6238
6239 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6240 {
6241 unsigned short value2 = op2->__anon1.us;
6242
6243 exp->type = 2;
6244 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
6245 if(!exp->expType)
6246 {
6247 exp->expType = op1->type;
6248 if(op1->type)
6249 op1->type->refCount++;
6250 }
6251 return 1;
6252 }
6253
6254 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6255 {
6256 char value2 = op2->__anon1.c;
6257
6258 exp->type = 2;
6259 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
6260 if(!exp->expType)
6261 {
6262 exp->expType = op1->type;
6263 if(op1->type)
6264 op1->type->refCount++;
6265 }
6266 return 1;
6267 }
6268
6269 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6270 {
6271 unsigned char value2 = op2->__anon1.uc;
6272
6273 exp->type = 2;
6274 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
6275 if(!exp->expType)
6276 {
6277 exp->expType = op1->type;
6278 if(op1->type)
6279 op1->type->refCount++;
6280 }
6281 return 1;
6282 }
6283
6284 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6285 {
6286 float value2 = op2->__anon1.f;
6287
6288 exp->type = 2;
6289 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
6290 if(!exp->expType)
6291 {
6292 exp->expType = op1->type;
6293 if(op1->type)
6294 op1->type->refCount++;
6295 }
6296 return 1;
6297 }
6298
6299 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6300 {
6301 double value2 = op2->__anon1.d;
6302
6303 exp->type = 2;
6304 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
6305 if(!exp->expType)
6306 {
6307 exp->expType = op1->type;
6308 if(op1->type)
6309 op1->type->refCount++;
6310 }
6311 return 1;
6312 }
6313
6314 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6315 {
6316 int value2 = op2->__anon1.i;
6317
6318 exp->type = 2;
6319 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
6320 if(!exp->expType)
6321 {
6322 exp->expType = op1->type;
6323 if(op1->type)
6324 op1->type->refCount++;
6325 }
6326 return 1;
6327 }
6328
6329 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6330 {
6331 unsigned int value2 = op2->__anon1.ui;
6332
6333 exp->type = 2;
6334 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
6335 if(!exp->expType)
6336 {
6337 exp->expType = op1->type;
6338 if(op1->type)
6339 op1->type->refCount++;
6340 }
6341 return 1;
6342 }
6343
6344 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6345 {
6346 long long value2 = op2->__anon1.i64;
6347
6348 exp->type = 2;
6349 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
6350 if(!exp->expType)
6351 {
6352 exp->expType = op1->type;
6353 if(op1->type)
6354 op1->type->refCount++;
6355 }
6356 return 1;
6357 }
6358
6359 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6360 {
6361 uint64 value2 = op2->__anon1.ui64;
6362
6363 exp->type = 2;
6364 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
6365 if(!exp->expType)
6366 {
6367 exp->expType = op1->type;
6368 if(op1->type)
6369 op1->type->refCount++;
6370 }
6371 return 1;
6372 }
6373
6374 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6375 {
6376 short value2 = op2->__anon1.s;
6377
6378 exp->type = 2;
6379 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
6380 if(!exp->expType)
6381 {
6382 exp->expType = op1->type;
6383 if(op1->type)
6384 op1->type->refCount++;
6385 }
6386 return 1;
6387 }
6388
6389 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6390 {
6391 unsigned short value2 = op2->__anon1.us;
6392
6393 exp->type = 2;
6394 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
6395 if(!exp->expType)
6396 {
6397 exp->expType = op1->type;
6398 if(op1->type)
6399 op1->type->refCount++;
6400 }
6401 return 1;
6402 }
6403
6404 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6405 {
6406 char value2 = op2->__anon1.c;
6407
6408 exp->type = 2;
6409 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
6410 if(!exp->expType)
6411 {
6412 exp->expType = op1->type;
6413 if(op1->type)
6414 op1->type->refCount++;
6415 }
6416 return 1;
6417 }
6418
6419 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6420 {
6421 unsigned char value2 = op2->__anon1.uc;
6422
6423 exp->type = 2;
6424 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
6425 if(!exp->expType)
6426 {
6427 exp->expType = op1->type;
6428 if(op1->type)
6429 op1->type->refCount++;
6430 }
6431 return 1;
6432 }
6433
6434 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6435 {
6436 float value2 = op2->__anon1.f;
6437
6438 exp->type = 2;
6439 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
6440 if(!exp->expType)
6441 {
6442 exp->expType = op1->type;
6443 if(op1->type)
6444 op1->type->refCount++;
6445 }
6446 return 1;
6447 }
6448
6449 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6450 {
6451 double value2 = op2->__anon1.d;
6452
6453 exp->type = 2;
6454 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
6455 if(!exp->expType)
6456 {
6457 exp->expType = op1->type;
6458 if(op1->type)
6459 op1->type->refCount++;
6460 }
6461 return 1;
6462 }
6463
6464 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6465 {
6466 int value2 = op2->__anon1.i;
6467
6468 exp->type = 2;
6469 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
6470 if(!exp->expType)
6471 {
6472 exp->expType = op1->type;
6473 if(op1->type)
6474 op1->type->refCount++;
6475 }
6476 return 1;
6477 }
6478
6479 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6480 {
6481 unsigned int value2 = op2->__anon1.ui;
6482
6483 exp->type = 2;
6484 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
6485 if(!exp->expType)
6486 {
6487 exp->expType = op1->type;
6488 if(op1->type)
6489 op1->type->refCount++;
6490 }
6491 return 1;
6492 }
6493
6494 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6495 {
6496 long long value2 = op2->__anon1.i64;
6497
6498 exp->type = 2;
6499 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
6500 if(!exp->expType)
6501 {
6502 exp->expType = op1->type;
6503 if(op1->type)
6504 op1->type->refCount++;
6505 }
6506 return 1;
6507 }
6508
6509 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6510 {
6511 uint64 value2 = op2->__anon1.ui64;
6512
6513 exp->type = 2;
6514 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
6515 if(!exp->expType)
6516 {
6517 exp->expType = op1->type;
6518 if(op1->type)
6519 op1->type->refCount++;
6520 }
6521 return 1;
6522 }
6523
6524 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6525 {
6526 short value2 = op2->__anon1.s;
6527
6528 exp->type = 2;
6529 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
6530 if(!exp->expType)
6531 {
6532 exp->expType = op1->type;
6533 if(op1->type)
6534 op1->type->refCount++;
6535 }
6536 return 1;
6537 }
6538
6539 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6540 {
6541 unsigned short value2 = op2->__anon1.us;
6542
6543 exp->type = 2;
6544 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
6545 if(!exp->expType)
6546 {
6547 exp->expType = op1->type;
6548 if(op1->type)
6549 op1->type->refCount++;
6550 }
6551 return 1;
6552 }
6553
6554 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6555 {
6556 char value2 = op2->__anon1.c;
6557
6558 exp->type = 2;
6559 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
6560 if(!exp->expType)
6561 {
6562 exp->expType = op1->type;
6563 if(op1->type)
6564 op1->type->refCount++;
6565 }
6566 return 1;
6567 }
6568
6569 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6570 {
6571 unsigned char value2 = op2->__anon1.uc;
6572
6573 exp->type = 2;
6574 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
6575 if(!exp->expType)
6576 {
6577 exp->expType = op1->type;
6578 if(op1->type)
6579 op1->type->refCount++;
6580 }
6581 return 1;
6582 }
6583
6584 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6585 {
6586 float value2 = op2->__anon1.f;
6587
6588 exp->type = 2;
6589 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
6590 if(!exp->expType)
6591 {
6592 exp->expType = op1->type;
6593 if(op1->type)
6594 op1->type->refCount++;
6595 }
6596 return 1;
6597 }
6598
6599 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6600 {
6601 double value2 = op2->__anon1.d;
6602
6603 exp->type = 2;
6604 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
6605 if(!exp->expType)
6606 {
6607 exp->expType = op1->type;
6608 if(op1->type)
6609 op1->type->refCount++;
6610 }
6611 return 1;
6612 }
6613
6614 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6615 {
6616 int value2 = op2->__anon1.i;
6617
6618 exp->type = 2;
6619 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
6620 if(!exp->expType)
6621 {
6622 exp->expType = op1->type;
6623 if(op1->type)
6624 op1->type->refCount++;
6625 }
6626 return 1;
6627 }
6628
6629 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6630 {
6631 unsigned int value2 = op2->__anon1.ui;
6632
6633 exp->type = 2;
6634 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
6635 if(!exp->expType)
6636 {
6637 exp->expType = op1->type;
6638 if(op1->type)
6639 op1->type->refCount++;
6640 }
6641 return 1;
6642 }
6643
6644 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6645 {
6646 long long value2 = op2->__anon1.i64;
6647
6648 exp->type = 2;
6649 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
6650 if(!exp->expType)
6651 {
6652 exp->expType = op1->type;
6653 if(op1->type)
6654 op1->type->refCount++;
6655 }
6656 return 1;
6657 }
6658
6659 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6660 {
6661 uint64 value2 = op2->__anon1.ui64;
6662
6663 exp->type = 2;
6664 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
6665 if(!exp->expType)
6666 {
6667 exp->expType = op1->type;
6668 if(op1->type)
6669 op1->type->refCount++;
6670 }
6671 return 1;
6672 }
6673
6674 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6675 {
6676 short value2 = op2->__anon1.s;
6677
6678 exp->type = 2;
6679 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
6680 if(!exp->expType)
6681 {
6682 exp->expType = op1->type;
6683 if(op1->type)
6684 op1->type->refCount++;
6685 }
6686 return 1;
6687 }
6688
6689 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6690 {
6691 unsigned short value2 = op2->__anon1.us;
6692
6693 exp->type = 2;
6694 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
6695 if(!exp->expType)
6696 {
6697 exp->expType = op1->type;
6698 if(op1->type)
6699 op1->type->refCount++;
6700 }
6701 return 1;
6702 }
6703
6704 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6705 {
6706 char value2 = op2->__anon1.c;
6707
6708 exp->type = 2;
6709 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
6710 if(!exp->expType)
6711 {
6712 exp->expType = op1->type;
6713 if(op1->type)
6714 op1->type->refCount++;
6715 }
6716 return 1;
6717 }
6718
6719 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6720 {
6721 unsigned char value2 = op2->__anon1.uc;
6722
6723 exp->type = 2;
6724 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
6725 if(!exp->expType)
6726 {
6727 exp->expType = op1->type;
6728 if(op1->type)
6729 op1->type->refCount++;
6730 }
6731 return 1;
6732 }
6733
6734 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6735 {
6736 float value2 = op2->__anon1.f;
6737
6738 exp->type = 2;
6739 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
6740 if(!exp->expType)
6741 {
6742 exp->expType = op1->type;
6743 if(op1->type)
6744 op1->type->refCount++;
6745 }
6746 return 1;
6747 }
6748
6749 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6750 {
6751 double value2 = op2->__anon1.d;
6752
6753 exp->type = 2;
6754 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
6755 if(!exp->expType)
6756 {
6757 exp->expType = op1->type;
6758 if(op1->type)
6759 op1->type->refCount++;
6760 }
6761 return 1;
6762 }
6763
6764 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6765 {
6766 int value2 = op2->__anon1.i;
6767
6768 exp->type = 2;
6769 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
6770 if(!exp->expType)
6771 {
6772 exp->expType = op1->type;
6773 if(op1->type)
6774 op1->type->refCount++;
6775 }
6776 return 1;
6777 }
6778
6779 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6780 {
6781 unsigned int value2 = op2->__anon1.ui;
6782
6783 exp->type = 2;
6784 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
6785 if(!exp->expType)
6786 {
6787 exp->expType = op1->type;
6788 if(op1->type)
6789 op1->type->refCount++;
6790 }
6791 return 1;
6792 }
6793
6794 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6795 {
6796 long long value2 = op2->__anon1.i64;
6797
6798 exp->type = 2;
6799 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
6800 if(!exp->expType)
6801 {
6802 exp->expType = op1->type;
6803 if(op1->type)
6804 op1->type->refCount++;
6805 }
6806 return 1;
6807 }
6808
6809 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6810 {
6811 uint64 value2 = op2->__anon1.ui64;
6812
6813 exp->type = 2;
6814 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
6815 if(!exp->expType)
6816 {
6817 exp->expType = op1->type;
6818 if(op1->type)
6819 op1->type->refCount++;
6820 }
6821 return 1;
6822 }
6823
6824 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6825 {
6826 short value2 = op2->__anon1.s;
6827
6828 exp->type = 2;
6829 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
6830 if(!exp->expType)
6831 {
6832 exp->expType = op1->type;
6833 if(op1->type)
6834 op1->type->refCount++;
6835 }
6836 return 1;
6837 }
6838
6839 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6840 {
6841 unsigned short value2 = op2->__anon1.us;
6842
6843 exp->type = 2;
6844 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
6845 if(!exp->expType)
6846 {
6847 exp->expType = op1->type;
6848 if(op1->type)
6849 op1->type->refCount++;
6850 }
6851 return 1;
6852 }
6853
6854 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6855 {
6856 char value2 = op2->__anon1.c;
6857
6858 exp->type = 2;
6859 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
6860 if(!exp->expType)
6861 {
6862 exp->expType = op1->type;
6863 if(op1->type)
6864 op1->type->refCount++;
6865 }
6866 return 1;
6867 }
6868
6869 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6870 {
6871 unsigned char value2 = op2->__anon1.uc;
6872
6873 exp->type = 2;
6874 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
6875 if(!exp->expType)
6876 {
6877 exp->expType = op1->type;
6878 if(op1->type)
6879 op1->type->refCount++;
6880 }
6881 return 1;
6882 }
6883
6884 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6885 {
6886 float value2 = op2->__anon1.f;
6887
6888 exp->type = 2;
6889 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
6890 if(!exp->expType)
6891 {
6892 exp->expType = op1->type;
6893 if(op1->type)
6894 op1->type->refCount++;
6895 }
6896 return 1;
6897 }
6898
6899 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6900 {
6901 double value2 = op2->__anon1.d;
6902
6903 exp->type = 2;
6904 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
6905 if(!exp->expType)
6906 {
6907 exp->expType = op1->type;
6908 if(op1->type)
6909 op1->type->refCount++;
6910 }
6911 return 1;
6912 }
6913
6914 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6915 {
6916 int value2 = op2->__anon1.i;
6917
6918 exp->type = 2;
6919 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
6920 if(!exp->expType)
6921 {
6922 exp->expType = op1->type;
6923 if(op1->type)
6924 op1->type->refCount++;
6925 }
6926 return 1;
6927 }
6928
6929 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6930 {
6931 unsigned int value2 = op2->__anon1.ui;
6932
6933 exp->type = 2;
6934 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
6935 if(!exp->expType)
6936 {
6937 exp->expType = op1->type;
6938 if(op1->type)
6939 op1->type->refCount++;
6940 }
6941 return 1;
6942 }
6943
6944 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6945 {
6946 long long value2 = op2->__anon1.i64;
6947
6948 exp->type = 2;
6949 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
6950 if(!exp->expType)
6951 {
6952 exp->expType = op1->type;
6953 if(op1->type)
6954 op1->type->refCount++;
6955 }
6956 return 1;
6957 }
6958
6959 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6960 {
6961 uint64 value2 = op2->__anon1.ui64;
6962
6963 exp->type = 2;
6964 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
6965 if(!exp->expType)
6966 {
6967 exp->expType = op1->type;
6968 if(op1->type)
6969 op1->type->refCount++;
6970 }
6971 return 1;
6972 }
6973
6974 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6975 {
6976 short value2 = op2->__anon1.s;
6977
6978 exp->type = 2;
6979 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
6980 if(!exp->expType)
6981 {
6982 exp->expType = op1->type;
6983 if(op1->type)
6984 op1->type->refCount++;
6985 }
6986 return 1;
6987 }
6988
6989 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6990 {
6991 unsigned short value2 = op2->__anon1.us;
6992
6993 exp->type = 2;
6994 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
6995 if(!exp->expType)
6996 {
6997 exp->expType = op1->type;
6998 if(op1->type)
6999 op1->type->refCount++;
7000 }
7001 return 1;
7002 }
7003
7004 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7005 {
7006 char value2 = op2->__anon1.c;
7007
7008 exp->type = 2;
7009 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
7010 if(!exp->expType)
7011 {
7012 exp->expType = op1->type;
7013 if(op1->type)
7014 op1->type->refCount++;
7015 }
7016 return 1;
7017 }
7018
7019 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7020 {
7021 unsigned char value2 = op2->__anon1.uc;
7022
7023 exp->type = 2;
7024 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
7025 if(!exp->expType)
7026 {
7027 exp->expType = op1->type;
7028 if(op1->type)
7029 op1->type->refCount++;
7030 }
7031 return 1;
7032 }
7033
7034 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7035 {
7036 float value2 = op2->__anon1.f;
7037
7038 exp->type = 2;
7039 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
7040 if(!exp->expType)
7041 {
7042 exp->expType = op1->type;
7043 if(op1->type)
7044 op1->type->refCount++;
7045 }
7046 return 1;
7047 }
7048
7049 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7050 {
7051 double value2 = op2->__anon1.d;
7052
7053 exp->type = 2;
7054 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
7055 if(!exp->expType)
7056 {
7057 exp->expType = op1->type;
7058 if(op1->type)
7059 op1->type->refCount++;
7060 }
7061 return 1;
7062 }
7063
7064 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7065 {
7066 exp->type = 2;
7067 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
7068 if(!exp->expType)
7069 {
7070 exp->expType = op1->type;
7071 if(op1->type)
7072 op1->type->refCount++;
7073 }
7074 return 1;
7075 }
7076
7077 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7078 {
7079 exp->type = 2;
7080 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
7081 if(!exp->expType)
7082 {
7083 exp->expType = op1->type;
7084 if(op1->type)
7085 op1->type->refCount++;
7086 }
7087 return 1;
7088 }
7089
7090 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7091 {
7092 exp->type = 2;
7093 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
7094 if(!exp->expType)
7095 {
7096 exp->expType = op1->type;
7097 if(op1->type)
7098 op1->type->refCount++;
7099 }
7100 return 1;
7101 }
7102
7103 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7104 {
7105 exp->type = 2;
7106 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
7107 if(!exp->expType)
7108 {
7109 exp->expType = op1->type;
7110 if(op1->type)
7111 op1->type->refCount++;
7112 }
7113 return 1;
7114 }
7115
7116 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7117 {
7118 exp->type = 2;
7119 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
7120 if(!exp->expType)
7121 {
7122 exp->expType = op1->type;
7123 if(op1->type)
7124 op1->type->refCount++;
7125 }
7126 return 1;
7127 }
7128
7129 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7130 {
7131 exp->type = 2;
7132 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
7133 if(!exp->expType)
7134 {
7135 exp->expType = op1->type;
7136 if(op1->type)
7137 op1->type->refCount++;
7138 }
7139 return 1;
7140 }
7141
7142 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7143 {
7144 exp->type = 2;
7145 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
7146 if(!exp->expType)
7147 {
7148 exp->expType = op1->type;
7149 if(op1->type)
7150 op1->type->refCount++;
7151 }
7152 return 1;
7153 }
7154
7155 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
7156 {
7157 exp->type = 2;
7158 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
7159 if(!exp->expType)
7160 {
7161 exp->expType = op1->type;
7162 if(op1->type)
7163 op1->type->refCount++;
7164 }
7165 return 1;
7166 }
7167
7168 static void PrintName(struct Type * type, char * string, unsigned int fullName)
7169 {
7170 if(type->name && type->name[0])
7171 {
7172 if(fullName)
7173 strcat(string, type->name);
7174 else
7175 {
7176 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
7177
7178 if(name)
7179 name += 2;
7180 else
7181 name = type->name;
7182 strcat(string, name);
7183 }
7184 }
7185 }
7186
7187 static void PrintAttribs(struct Type * type, char * string)
7188 {
7189 if(type)
7190 {
7191 if(type->dllExport)
7192 strcat(string, "dllexport ");
7193 if(type->attrStdcall)
7194 strcat(string, "stdcall ");
7195 }
7196 }
7197
7198 static struct Type * FindMember(struct Type * type, char * string)
7199 {
7200 struct Type * memberType;
7201
7202 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7203 {
7204 if(!memberType->name)
7205 {
7206 struct Type * subType = FindMember(memberType, string);
7207
7208 if(subType)
7209 return subType;
7210 }
7211 else if(!strcmp(memberType->name, string))
7212 return memberType;
7213 }
7214 return (((void *)0));
7215 }
7216
7217 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
7218
7219 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
7220
7221 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
7222 {
7223 unsigned int result = 0;
7224
7225 switch(kind)
7226 {
7227 case 2:
7228 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
7229 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
7230 break;
7231 case 3:
7232 case 5:
7233 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
7234 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7235 break;
7236 case 4:
7237 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
7238 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7239 break;
7240 case 6:
7241 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
7242 result = GetOpFloat(op, &op->__anon1.f);
7243 break;
7244 case 7:
7245 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
7246 result = GetOpDouble(op, &op->__anon1.d);
7247 break;
7248 case 13:
7249 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
7250 result = GetOpUInt64(op, &op->__anon1.ui64);
7251 break;
7252 case 15:
7253 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 4 || op->kind == 5 || op->kind == 6 || op->kind == 7 || op->kind == 13 || op->kind == 15 || op->kind == 22 || op->kind == 23 || op->kind == 24)
7254 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
7255 break;
7256 case 22:
7257 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7258 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7259 break;
7260 case 23:
7261 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
7262 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
7263 break;
7264 }
7265 return result;
7266 }
7267
7268 struct OpTable floatOps =
7269 {
7270 (void *)(FloatAdd), (void *)(FloatSub), (void *)(FloatMul), (void *)(FloatDiv), (((void *)0)), (void *)(FloatNeg), (void *)(FloatInc), (void *)(FloatDec), (void *)(FloatAsign), (void *)(FloatAddAsign), (void *)(FloatSubAsign), (void *)(FloatMulAsign), (void *)(FloatDivAsign), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (void *)(FloatEqu), (void *)(FloatNqu), (void *)(FloatAnd), (void *)(FloatOr), (void *)(FloatGrt), (void *)(FloatSma), (void *)(FloatGrtEqu), (void *)(FloatSmaEqu)
7271 };
7272
7273 struct OpTable doubleOps =
7274 {
7275 (void *)(DoubleAdd), (void *)(DoubleSub), (void *)(DoubleMul), (void *)(DoubleDiv), (((void *)0)), (void *)(DoubleNeg), (void *)(DoubleInc), (void *)(DoubleDec), (void *)(DoubleAsign), (void *)(DoubleAddAsign), (void *)(DoubleSubAsign), (void *)(DoubleMulAsign), (void *)(DoubleDivAsign), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)), (void *)(DoubleEqu), (void *)(DoubleNqu), (void *)(DoubleAnd), (void *)(DoubleOr), (void *)(DoubleGrt), (void *)(DoubleSma), (void *)(DoubleGrtEqu), (void *)(DoubleSmaEqu)
7276 };
7277
7278 struct OpTable intOps =
7279 {
7280 (void *)(IntAdd), (void *)(IntSub), (void *)(IntMul), (void *)(IntDiv), (void *)(IntMod), (void *)(IntNeg), (void *)(IntInc), (void *)(IntDec), (void *)(IntAsign), (void *)(IntAddAsign), (void *)(IntSubAsign), (void *)(IntMulAsign), (void *)(IntDivAsign), (void *)(IntModAsign), (void *)(IntBitAnd), (void *)(IntBitOr), (void *)(IntBitXor), (void *)(IntLShift), (void *)(IntRShift), (void *)(IntBitNot), (void *)(IntAndAsign), (void *)(IntOrAsign), (void *)(IntXorAsign), (void *)(IntLShiftAsign), (void *)(IntRShiftAsign), (void *)(IntNot), (void *)(IntEqu), (void *)(IntNqu), (void *)(IntAnd), (void *)(IntOr), (void *)(IntGrt), (void *)(IntSma), (void *)(IntGrtEqu), (void *)(IntSmaEqu), (void *)(IntCond)
7281 };
7282
7283 struct OpTable uintOps =
7284 {
7285 (void *)(UIntAdd), (void *)(UIntSub), (void *)(UIntMul), (void *)(UIntDiv), (void *)(UIntMod), (void *)(UIntNeg), (void *)(UIntInc), (void *)(UIntDec), (void *)(UIntAsign), (void *)(UIntAddAsign), (void *)(UIntSubAsign), (void *)(UIntMulAsign), (void *)(UIntDivAsign), (void *)(UIntModAsign), (void *)(UIntBitAnd), (void *)(UIntBitOr), (void *)(UIntBitXor), (void *)(UIntLShift), (void *)(UIntRShift), (void *)(UIntBitNot), (void *)(UIntAndAsign), (void *)(UIntOrAsign), (void *)(UIntXorAsign), (void *)(UIntLShiftAsign), (void *)(UIntRShiftAsign), (void *)(UIntNot), (void *)(UIntEqu), (void *)(UIntNqu), (void *)(UIntAnd), (void *)(UIntOr), (void *)(UIntGrt), (void *)(UIntSma), (void *)(UIntGrtEqu), (void *)(UIntSmaEqu), (void *)(UIntCond)
7286 };
7287
7288 struct OpTable int64Ops =
7289 {
7290 (void *)(Int64Add), (void *)(Int64Sub), (void *)(Int64Mul), (void *)(Int64Div), (void *)(Int64Mod), (void *)(Int64Neg), (void *)(Int64Inc), (void *)(Int64Dec), (void *)(Int64Asign), (void *)(Int64AddAsign), (void *)(Int64SubAsign), (void *)(Int64MulAsign), (void *)(Int64DivAsign), (void *)(Int64ModAsign), (void *)(Int64BitAnd), (void *)(Int64BitOr), (void *)(Int64BitXor), (void *)(Int64LShift), (void *)(Int64RShift), (void *)(Int64BitNot), (void *)(Int64AndAsign), (void *)(Int64OrAsign), (void *)(Int64XorAsign), (void *)(Int64LShiftAsign), (void *)(Int64RShiftAsign), (void *)(Int64Not), (void *)(Int64Equ), (void *)(Int64Nqu), (void *)(Int64And), (void *)(Int64Or), (void *)(Int64Grt), (void *)(Int64Sma), (void *)(Int64GrtEqu), (void *)(Int64SmaEqu), (void *)(Int64Cond)
7291 };
7292
7293 struct OpTable uint64Ops =
7294 {
7295 (void *)(UInt64Add), (void *)(UInt64Sub), (void *)(UInt64Mul), (void *)(UInt64Div), (void *)(UInt64Mod), (void *)(UInt64Neg), (void *)(UInt64Inc), (void *)(UInt64Dec), (void *)(UInt64Asign), (void *)(UInt64AddAsign), (void *)(UInt64SubAsign), (void *)(UInt64MulAsign), (void *)(UInt64DivAsign), (void *)(UInt64ModAsign), (void *)(UInt64BitAnd), (void *)(UInt64BitOr), (void *)(UInt64BitXor), (void *)(UInt64LShift), (void *)(UInt64RShift), (void *)(UInt64BitNot), (void *)(UInt64AndAsign), (void *)(UInt64OrAsign), (void *)(UInt64XorAsign), (void *)(UInt64LShiftAsign), (void *)(UInt64RShiftAsign), (void *)(UInt64Not), (void *)(UInt64Equ), (void *)(UInt64Nqu), (void *)(UInt64And), (void *)(UInt64Or), (void *)(UInt64Grt), (void *)(UInt64Sma), (void *)(UInt64GrtEqu), (void *)(UInt64SmaEqu), (void *)(UInt64Cond)
7296 };
7297
7298 struct OpTable shortOps =
7299 {
7300 (void *)(ShortAdd), (void *)(ShortSub), (void *)(ShortMul), (void *)(ShortDiv), (void *)(ShortMod), (void *)(ShortNeg), (void *)(ShortInc), (void *)(ShortDec), (void *)(ShortAsign), (void *)(ShortAddAsign), (void *)(ShortSubAsign), (void *)(ShortMulAsign), (void *)(ShortDivAsign), (void *)(ShortModAsign), (void *)(ShortBitAnd), (void *)(ShortBitOr), (void *)(ShortBitXor), (void *)(ShortLShift), (void *)(ShortRShift), (void *)(ShortBitNot), (void *)(ShortAndAsign), (void *)(ShortOrAsign), (void *)(ShortXorAsign), (void *)(ShortLShiftAsign), (void *)(ShortRShiftAsign), (void *)(ShortNot), (void *)(ShortEqu), (void *)(ShortNqu), (void *)(ShortAnd), (void *)(ShortOr), (void *)(ShortGrt), (void *)(ShortSma), (void *)(ShortGrtEqu), (void *)(ShortSmaEqu), (void *)(ShortCond)
7301 };
7302
7303 struct OpTable ushortOps =
7304 {
7305 (void *)(UShortAdd), (void *)(UShortSub), (void *)(UShortMul), (void *)(UShortDiv), (void *)(UShortMod), (void *)(UShortNeg), (void *)(UShortInc), (void *)(UShortDec), (void *)(UShortAsign), (void *)(UShortAddAsign), (void *)(UShortSubAsign), (void *)(UShortMulAsign), (void *)(UShortDivAsign), (void *)(UShortModAsign), (void *)(UShortBitAnd), (void *)(UShortBitOr), (void *)(UShortBitXor), (void *)(UShortLShift), (void *)(UShortRShift), (void *)(UShortBitNot), (void *)(UShortAndAsign), (void *)(UShortOrAsign), (void *)(UShortXorAsign), (void *)(UShortLShiftAsign), (void *)(UShortRShiftAsign), (void *)(UShortNot), (void *)(UShortEqu), (void *)(UShortNqu), (void *)(UShortAnd), (void *)(UShortOr), (void *)(UShortGrt), (void *)(UShortSma), (void *)(UShortGrtEqu), (void *)(UShortSmaEqu), (void *)(UShortCond)
7306 };
7307
7308 struct OpTable charOps =
7309 {
7310 (void *)(CharAdd), (void *)(CharSub), (void *)(CharMul), (void *)(CharDiv), (void *)(CharMod), (void *)(CharNeg), (void *)(CharInc), (void *)(CharDec), (void *)(CharAsign), (void *)(CharAddAsign), (void *)(CharSubAsign), (void *)(CharMulAsign), (void *)(CharDivAsign), (void *)(CharModAsign), (void *)(CharBitAnd), (void *)(CharBitOr), (void *)(CharBitXor), (void *)(CharLShift), (void *)(CharRShift), (void *)(CharBitNot), (void *)(CharAndAsign), (void *)(CharOrAsign), (void *)(CharXorAsign), (void *)(CharLShiftAsign), (void *)(CharRShiftAsign), (void *)(CharNot), (void *)(CharEqu), (void *)(CharNqu), (void *)(CharAnd), (void *)(CharOr), (void *)(CharGrt), (void *)(CharSma), (void *)(CharGrtEqu), (void *)(CharSmaEqu), (void *)(CharCond)
7311 };
7312
7313 struct OpTable ucharOps =
7314 {
7315 (void *)(UCharAdd), (void *)(UCharSub), (void *)(UCharMul), (void *)(UCharDiv), (void *)(UCharMod), (void *)(UCharNeg), (void *)(UCharInc), (void *)(UCharDec), (void *)(UCharAsign), (void *)(UCharAddAsign), (void *)(UCharSubAsign), (void *)(UCharMulAsign), (void *)(UCharDivAsign), (void *)(UCharModAsign), (void *)(UCharBitAnd), (void *)(UCharBitOr), (void *)(UCharBitXor), (void *)(UCharLShift), (void *)(UCharRShift), (void *)(UCharBitNot), (void *)(UCharAndAsign), (void *)(UCharOrAsign), (void *)(UCharXorAsign), (void *)(UCharLShiftAsign), (void *)(UCharRShiftAsign), (void *)(UCharNot), (void *)(UCharEqu), (void *)(UCharNqu), (void *)(UCharAnd), (void *)(UCharOr), (void *)(UCharGrt), (void *)(UCharSma), (void *)(UCharGrtEqu), (void *)(UCharSmaEqu), (void *)(UCharCond)
7316 };
7317
7318 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
7319 {
7320 struct Type * memberType;
7321
7322 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
7323 {
7324 if(!memberType->name)
7325 {
7326 struct Type * subType = FindMember(memberType, string);
7327
7328 if(subType)
7329 {
7330 *offset += memberType->offset;
7331 return subType;
7332 }
7333 }
7334 else if(!strcmp(memberType->name, string))
7335 {
7336 *offset += memberType->offset;
7337 return memberType;
7338 }
7339 }
7340 return (((void *)0));
7341 }
7342
7343 struct __ecereNameSpace__ecere__com__Module;
7344
7345 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);
7346
7347 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
7348
7349 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);
7350
7351 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);
7352
7353 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
7354
7355 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
7356
7357 struct GlobalData
7358 {
7359 uintptr_t key;
7360 struct __ecereNameSpace__ecere__sys__BTNode * parent;
7361 struct __ecereNameSpace__ecere__sys__BTNode * left;
7362 struct __ecereNameSpace__ecere__sys__BTNode * right;
7363 int depth;
7364 struct __ecereNameSpace__ecere__com__Instance * module;
7365 char *  dataTypeString;
7366 struct Type * dataType;
7367 void *  symbol;
7368 char *  fullName;
7369 } ecere_gcc_struct;
7370
7371 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, unsigned int *  offset, struct __ecereNameSpace__ecere__com__Instance * module, struct __ecereNameSpace__ecere__com__DataMember **  subMemberStack, int *  subMemberStackPos);
7372
7373 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
7374
7375 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
7376
7377 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
7378
7379 struct __ecereNameSpace__ecere__com__DefinedExpression;
7380
7381 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
7382
7383 struct __ecereNameSpace__ecere__com__DefinedExpression
7384 {
7385 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
7386 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
7387 const char *  name;
7388 const char *  value;
7389 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
7390 } ecere_gcc_struct;
7391
7392 struct __ecereNameSpace__ecere__sys__BinaryTree;
7393
7394 struct __ecereNameSpace__ecere__sys__BinaryTree
7395 {
7396 struct __ecereNameSpace__ecere__sys__BTNode * root;
7397 int count;
7398 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
7399 void (*  FreeKey)(void *  key);
7400 } ecere_gcc_struct;
7401
7402 struct __ecereNameSpace__ecere__com__Class
7403 {
7404 struct __ecereNameSpace__ecere__com__Class * prev;
7405 struct __ecereNameSpace__ecere__com__Class * next;
7406 const char *  name;
7407 int offset;
7408 int structSize;
7409 void * *  _vTbl;
7410 int vTblSize;
7411 unsigned int (*  Constructor)(void * );
7412 void (*  Destructor)(void * );
7413 int offsetClass;
7414 int sizeClass;
7415 struct __ecereNameSpace__ecere__com__Class * base;
7416 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
7417 struct __ecereNameSpace__ecere__sys__BinaryTree members;
7418 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
7419 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
7420 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
7421 struct __ecereNameSpace__ecere__sys__OldList derivatives;
7422 int memberID;
7423 int startMemberID;
7424 int type;
7425 struct __ecereNameSpace__ecere__com__Instance * module;
7426 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
7427 const char *  dataTypeString;
7428 struct Type * dataType;
7429 int typeSize;
7430 int defaultAlignment;
7431 void (*  Initialize)();
7432 int memberOffset;
7433 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
7434 const char *  designerClass;
7435 unsigned int noExpansion;
7436 const char *  defaultProperty;
7437 unsigned int comRedefinition;
7438 int count;
7439 int isRemote;
7440 unsigned int internalDecl;
7441 void *  data;
7442 unsigned int computeSize;
7443 short structAlignment;
7444 short pointerAlignment;
7445 int destructionWatchOffset;
7446 unsigned int fixed;
7447 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
7448 int inheritanceAccess;
7449 const char *  fullName;
7450 void *  symbol;
7451 struct __ecereNameSpace__ecere__sys__OldList conversions;
7452 struct __ecereNameSpace__ecere__sys__OldList templateParams;
7453 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
7454 struct __ecereNameSpace__ecere__com__Class * templateClass;
7455 struct __ecereNameSpace__ecere__sys__OldList templatized;
7456 int numParams;
7457 unsigned int isInstanceClass;
7458 unsigned int byValueSystemClass;
7459 } ecere_gcc_struct;
7460
7461 struct __ecereNameSpace__ecere__com__NameSpace
7462 {
7463 const char *  name;
7464 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
7465 struct __ecereNameSpace__ecere__com__NameSpace *  left;
7466 struct __ecereNameSpace__ecere__com__NameSpace *  right;
7467 int depth;
7468 struct __ecereNameSpace__ecere__com__NameSpace *  parent;
7469 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
7470 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
7471 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
7472 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
7473 } ecere_gcc_struct;
7474
7475 struct __ecereNameSpace__ecere__com__DataMember
7476 {
7477 struct __ecereNameSpace__ecere__com__DataMember * prev;
7478 struct __ecereNameSpace__ecere__com__DataMember * next;
7479 const char *  name;
7480 unsigned int isProperty;
7481 int memberAccess;
7482 int id;
7483 struct __ecereNameSpace__ecere__com__Class * _class;
7484 const char *  dataTypeString;
7485 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
7486 struct Type * dataType;
7487 int type;
7488 int offset;
7489 int memberID;
7490 struct __ecereNameSpace__ecere__sys__OldList members;
7491 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
7492 int memberOffset;
7493 short structAlignment;
7494 short pointerAlignment;
7495 } ecere_gcc_struct;
7496
7497 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char *  key);
7498
7499 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7500
7501 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
7502
7503 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char *  key);
7504
7505 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
7506
7507 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
7508
7509 static void _DeclareType(struct External * neededFor, struct Type * type, unsigned int needDereference, unsigned int forFunctionDef, unsigned int fwdDecl)
7510 {
7511 if(inCompiler)
7512 {
7513 if(type->kind == 11)
7514 {
7515 struct Type * param;
7516
7517 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
7518 _DeclareType(neededFor, param, forFunctionDef, 0, fwdDecl);
7519 _DeclareType(neededFor, type->__anon1.__anon2.returnType, forFunctionDef, 0, fwdDecl);
7520 }
7521 else if(type->kind == 13)
7522 _DeclareType(neededFor, type->__anon1.type, 0, 0, fwdDecl);
7523 else if(type->kind == 8)
7524 {
7525 struct __ecereNameSpace__ecere__com__Class * c = type->__anon1._class->__anon1.registered;
7526
7527 _DeclareStruct(neededFor, c ? c->fullName : "ecere::com::Instance", c ? c->type == 5 : 0, needDereference && c && c->type == 1, fwdDecl);
7528 }
7529 else if(type->kind == 9 || type->kind == 10)
7530 {
7531 struct Type * member;
7532
7533 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7534 _DeclareType(neededFor, member, needDereference, forFunctionDef, fwdDecl);
7535 }
7536 else if(type->kind == 12)
7537 _DeclareType(neededFor, type->__anon1.__anon4.arrayType, 1, 0, fwdDecl);
7538 }
7539 }
7540
7541 static unsigned int CheckConstCompatibility(struct Type * source, struct Type * dest, unsigned int warn)
7542 {
7543 unsigned int status = 1;
7544
7545 if(((source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered) || source->kind == 12 || source->kind == 13) && ((dest->kind == 8 && dest->__anon1._class && dest->__anon1._class->__anon1.registered) || dest->kind == 13))
7546 {
7547 struct __ecereNameSpace__ecere__com__Class * sourceClass = source->kind == 8 ? source->__anon1._class->__anon1.registered : (((void *)0));
7548 struct __ecereNameSpace__ecere__com__Class * destClass = dest->kind == 8 ? dest->__anon1._class->__anon1.registered : (((void *)0));
7549
7550 if((!sourceClass || (sourceClass && sourceClass->type == 0 && !sourceClass->structSize)) && (!destClass || (destClass && destClass->type == 0 && !destClass->structSize)))
7551 {
7552 struct Type * sourceType = source, * destType = dest;
7553
7554 while((sourceType->kind == 13 || sourceType->kind == 12) && sourceType->__anon1.type)
7555 sourceType = sourceType->__anon1.type;
7556 while((destType->kind == 13 || destType->kind == 12) && destType->__anon1.type)
7557 destType = destType->__anon1.type;
7558 if(!destType->constant && sourceType->constant)
7559 {
7560 status = 0;
7561 if(warn)
7562 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "discarding const qualifier\n", (((void *)0))));
7563 }
7564 }
7565 }
7566 return status;
7567 }
7568
7569 struct Operand GetOperand(struct Expression * exp)
7570 {
7571 struct Operand op =
7572 {
7573 0, 0, 0,
7574 .__anon1 = {
7575 .c = 0
7576 },
7577 {
7578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
7579 }
7580 };
7581 struct Type * type = exp->expType;
7582
7583 if(type)
7584 {
7585 while(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 2 || type->__anon1._class->__anon1.registered->type == 3 || type->__anon1._class->__anon1.registered->type == 4))
7586 {
7587 if(!type->__anon1._class->__anon1.registered->dataType)
7588 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7589 type = type->__anon1._class->__anon1.registered->dataType;
7590 }
7591 if(exp->type == 3 && op.kind == 13)
7592 {
7593 op.__anon1.ui64 = (uint64)(uintptr_t)exp->__anon1.__anon2.string;
7594 op.kind = 13;
7595 op.ops = uint64Ops;
7596 }
7597 else if(exp->isConstant && exp->type == 2)
7598 {
7599 op.kind = type->kind;
7600 op.type = type;
7601 switch(op.kind)
7602 {
7603 case 24:
7604 case 1:
7605 {
7606 if(exp->__anon1.__anon1.constant[0] == '\'')
7607 {
7608 op.__anon1.c = exp->__anon1.__anon1.constant[1];
7609 op.ops = charOps;
7610 }
7611 else if(type->isSigned)
7612 {
7613 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7614 op.ops = charOps;
7615 }
7616 else
7617 {
7618 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7619 op.ops = ucharOps;
7620 }
7621 break;
7622 }
7623 case 2:
7624 if(exp->__anon1.__anon1.constant[0] == '\'')
7625 {
7626 op.__anon1.s = exp->__anon1.__anon1.constant[1];
7627 op.ops = shortOps;
7628 }
7629 else if(type->isSigned)
7630 {
7631 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7632 op.ops = shortOps;
7633 }
7634 else
7635 {
7636 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7637 op.ops = ushortOps;
7638 }
7639 break;
7640 case 3:
7641 case 5:
7642 if(exp->__anon1.__anon1.constant[0] == '\'')
7643 {
7644 op.__anon1.i = exp->__anon1.__anon1.constant[1];
7645 op.ops = intOps;
7646 }
7647 else if(type->isSigned)
7648 {
7649 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7650 op.ops = intOps;
7651 }
7652 else
7653 {
7654 op.__anon1.ui = (unsigned int)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7655 op.ops = uintOps;
7656 }
7657 op.kind = 3;
7658 break;
7659 case 4:
7660 if(type->isSigned)
7661 {
7662 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7663 op.ops = int64Ops;
7664 }
7665 else
7666 {
7667 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7668 op.ops = uint64Ops;
7669 }
7670 op.kind = 4;
7671 break;
7672 case 22:
7673 if(type->isSigned)
7674 {
7675 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7676 op.ops = int64Ops;
7677 }
7678 else
7679 {
7680 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7681 op.ops = uint64Ops;
7682 }
7683 op.kind = 4;
7684 break;
7685 case 23:
7686 if(type->isSigned)
7687 {
7688 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7689 op.ops = int64Ops;
7690 }
7691 else
7692 {
7693 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7694 op.ops = uint64Ops;
7695 }
7696 op.kind = 4;
7697 break;
7698 case 6:
7699 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7700 op.__anon1.f = __ecereMethod_float_inf();
7701 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7702 op.__anon1.f = -__ecereMethod_float_inf();
7703 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7704 op.__anon1.f = __ecereMethod_float_nan();
7705 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7706 op.__anon1.f = -__ecereMethod_float_nan();
7707 else
7708 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7709 op.ops = floatOps;
7710 break;
7711 case 7:
7712 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
7713 op.__anon1.d = __ecereMethod_double_inf();
7714 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
7715 op.__anon1.d = -__ecereMethod_double_inf();
7716 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
7717 op.__anon1.d = __ecereMethod_double_nan();
7718 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
7719 op.__anon1.d = -__ecereMethod_double_nan();
7720 else
7721 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
7722 op.ops = doubleOps;
7723 break;
7724 case 12:
7725 case 13:
7726 case 8:
7727 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
7728 op.kind = 13;
7729 op.ops = uint64Ops;
7730 break;
7731 }
7732 }
7733 }
7734 return op;
7735 }
7736
7737 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
7738 {
7739 long long v = 0;
7740
7741 switch(_class->typeSize)
7742 {
7743 case 8:
7744 if(!strcmp(_class->dataTypeString, "uint64"))
7745 v = (long long)*(uint64 *)ptr;
7746 else
7747 v = *(long long *)ptr;
7748 break;
7749 case 4:
7750 if(!strcmp(_class->dataTypeString, "uint"))
7751 v = (long long)*(unsigned int *)ptr;
7752 else
7753 v = (long long)*(int *)ptr;
7754 break;
7755 case 2:
7756 if(!strcmp(_class->dataTypeString, "uint16"))
7757 v = (long long)*(unsigned short *)ptr;
7758 else
7759 v = (long long)*(short *)ptr;
7760 break;
7761 case 1:
7762 if(!strcmp(_class->dataTypeString, "byte"))
7763 v = (long long)*(unsigned char *)ptr;
7764 else
7765 v = (long long)*(char *)ptr;
7766 break;
7767 }
7768 return v;
7769 }
7770
7771 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
7772 {
7773 if(!type->isSigned && type->kind != 22 && type->kind != 23)
7774 ListAdd(specs, MkSpecifier(UNSIGNED));
7775 switch(type->kind)
7776 {
7777 case 8:
7778 {
7779 if(type->__anon1._class->__anon1.registered)
7780 {
7781 if(!type->__anon1._class->__anon1.registered->dataType)
7782 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
7783 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
7784 }
7785 break;
7786 }
7787 case 7:
7788 ListAdd(specs, MkSpecifier(DOUBLE));
7789 break;
7790 case 6:
7791 ListAdd(specs, MkSpecifier(FLOAT));
7792 break;
7793 case 1:
7794 ListAdd(specs, MkSpecifier(CHAR));
7795 break;
7796 case 24:
7797 ListAdd(specs, MkSpecifier(_BOOL));
7798 break;
7799 case 2:
7800 ListAdd(specs, MkSpecifier(SHORT));
7801 break;
7802 case 4:
7803 ListAdd(specs, MkSpecifier(INT64));
7804 break;
7805 case 22:
7806 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
7807 break;
7808 case 23:
7809 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
7810 break;
7811 case 3:
7812 default:
7813 ListAdd(specs, MkSpecifier(INT));
7814 break;
7815 }
7816 }
7817
7818 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
7819 {
7820 if(type)
7821 {
7822 if(printConst && type->constant)
7823 strcat(string, "const ");
7824 switch(type->kind)
7825 {
7826 case 8:
7827 {
7828 struct Symbol * c = type->__anon1._class;
7829 unsigned int isObjectBaseClass = !c || !c->string || !strcmp(c->string, "class");
7830
7831 if(type->classObjectType == 2 && isObjectBaseClass)
7832 strcat(string, "typed_object");
7833 else if(type->classObjectType == 3 && isObjectBaseClass)
7834 strcat(string, "any_object");
7835 else
7836 {
7837 if(c && c->string)
7838 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
7839 }
7840 if(type->byReference)
7841 strcat(string, " &");
7842 break;
7843 }
7844 case 0:
7845 strcat(string, "void");
7846 break;
7847 case 3:
7848 strcat(string, type->isSigned ? "int" : "uint");
7849 break;
7850 case 4:
7851 strcat(string, type->isSigned ? "int64" : "uint64");
7852 break;
7853 case 22:
7854 strcat(string, type->isSigned ? "intptr" : "uintptr");
7855 break;
7856 case 23:
7857 strcat(string, type->isSigned ? "intsize" : "uintsize");
7858 break;
7859 case 1:
7860 strcat(string, type->isSigned ? "char" : "byte");
7861 break;
7862 case 24:
7863 strcat(string, "_Bool");
7864 break;
7865 case 2:
7866 strcat(string, type->isSigned ? "short" : "uint16");
7867 break;
7868 case 6:
7869 strcat(string, "float");
7870 break;
7871 case 7:
7872 strcat(string, "double");
7873 break;
7874 case 9:
7875 if(type->__anon1.__anon1.enumName)
7876 {
7877 strcat(string, "struct ");
7878 strcat(string, type->__anon1.__anon1.enumName);
7879 }
7880 else if(type->typeName)
7881 strcat(string, type->typeName);
7882 else
7883 {
7884 struct Type * member;
7885
7886 strcat(string, "struct { ");
7887 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
7888 {
7889 PrintType(member, string, 1, fullName);
7890 strcat(string, "; ");
7891 }
7892 strcat(string, "}");
7893 }
7894 break;
7895 case 10:
7896 if(type->__anon1.__anon1.enumName)
7897 {
7898 strcat(string, "union ");
7899 strcat(string, type->__anon1.__anon1.enumName);
7900 }
7901 else if(type->typeName)
7902 strcat(string, type->typeName);
7903 else
7904 {
7905 strcat(string, "union ");
7906 strcat(string, "(unnamed)");
7907 }
7908 break;
7909 case 15:
7910 if(type->__anon1.__anon1.enumName)
7911 {
7912 strcat(string, "enum ");
7913 strcat(string, type->__anon1.__anon1.enumName);
7914 }
7915 else if(type->typeName)
7916 strcat(string, type->typeName);
7917 else
7918 strcat(string, "int");
7919 break;
7920 case 14:
7921 strcat(string, "...");
7922 break;
7923 case 19:
7924 strcat(string, "subclass(");
7925 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
7926 strcat(string, ")");
7927 break;
7928 case 20:
7929 strcat(string, type->__anon1.templateParameter->identifier->string);
7930 break;
7931 case 21:
7932 strcat(string, "thisclass");
7933 break;
7934 case 17:
7935 strcat(string, "__builtin_va_list");
7936 break;
7937 }
7938 }
7939 }
7940
7941 unsigned int RelatedUnits(struct __ecereNameSpace__ecere__com__Class * c1, struct __ecereNameSpace__ecere__com__Class * c2)
7942 {
7943 if(c1->base->type == 3)
7944 c1 = c1->base;
7945 if(c2->base->type == 3)
7946 c2 = c2->base;
7947 return c1 == c2;
7948 }
7949
7950 extern char *  __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
7951
7952 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
7953
7954 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
7955
7956 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
7957
7958 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyImport;
7959
7960 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
7961
7962 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType;
7963
7964 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
7965
7966 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MethodImport;
7967
7968 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionImport;
7969
7970 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
7971
7972 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
7973
7974 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
7975
7976 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
7977
7978 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
7979
7980 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
7981
7982 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__LinkList;
7983
7984 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
7985
7986 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
7987
7988 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
7989
7990 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
7991
7992 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
7993
7994 struct __ecereNameSpace__ecere__com__Application
7995 {
7996 int argc;
7997 const char * *  argv;
7998 int exitCode;
7999 unsigned int isGUIApp;
8000 struct __ecereNameSpace__ecere__sys__OldList allModules;
8001 char *  parsedCommand;
8002 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
8003 } ecere_gcc_struct;
8004
8005 static void FindNextDataMember(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)
8006 {
8007 if(*curMember)
8008 {
8009 *curMember = (*curMember)->next;
8010 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
8011 {
8012 *curMember = subMemberStack[--(*subMemberStackPos)];
8013 *curMember = (*curMember)->next;
8014 }
8015 while((*curMember) && (*curMember)->isProperty)
8016 *curMember = (*curMember)->next;
8017 if(subMemberStackPos)
8018 {
8019 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8020 {
8021 subMemberStack[(*subMemberStackPos)++] = *curMember;
8022 *curMember = (*curMember)->members.first;
8023 while(*curMember && (*curMember)->isProperty)
8024 *curMember = (*curMember)->next;
8025 }
8026 }
8027 }
8028 while(!*curMember)
8029 {
8030 if(!*curMember)
8031 {
8032 if(subMemberStackPos && *subMemberStackPos)
8033 {
8034 *curMember = subMemberStack[--(*subMemberStackPos)];
8035 *curMember = (*curMember)->next;
8036 }
8037 else
8038 {
8039 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
8040
8041 if(*curClass == _class)
8042 break;
8043 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
8044 ;
8045 *curMember = (*curClass)->membersAndProperties.first;
8046 }
8047 while((*curMember) && (*curMember)->isProperty)
8048 *curMember = (*curMember)->next;
8049 if(subMemberStackPos)
8050 {
8051 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
8052 {
8053 subMemberStack[(*subMemberStackPos)++] = *curMember;
8054 *curMember = (*curMember)->members.first;
8055 while(*curMember && (*curMember)->isProperty)
8056 *curMember = (*curMember)->next;
8057 }
8058 }
8059 }
8060 }
8061 }
8062
8063 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
8064 {
8065 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
8066 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
8067 struct __ecereNameSpace__ecere__com__NameSpace * child;
8068
8069 if(!data)
8070 {
8071 for(child = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->nameSpaces); child; child = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)child)))
8072 {
8073 data = ScanGlobalData(child, name);
8074 if(data)
8075 break;
8076 }
8077 }
8078 return data;
8079 }
8080
8081 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
8082 {
8083 int nsLen = strlen(nameSpace);
8084 struct Symbol * symbol;
8085
8086 for(symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(tree, nameSpace); symbol; symbol = (struct Symbol *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)symbol)))
8087 {
8088 char * s = symbol->string;
8089
8090 if(!strncmp(s, nameSpace, nsLen))
8091 {
8092 int c;
8093 char * namePart;
8094
8095 for(c = strlen(s) - 1; c >= 0; c--)
8096 if(s[c] == ':')
8097 break;
8098 namePart = s + c + 1;
8099 if(!strcmp(namePart, name))
8100 {
8101 return symbol;
8102 }
8103 }
8104 else
8105 break;
8106 }
8107 return (((void *)0));
8108 }
8109
8110 unsigned int GetInt(struct Expression * exp, int * value2)
8111 {
8112 struct Operand op2 = GetOperand(exp);
8113
8114 return GetOpInt(&op2, value2);
8115 }
8116
8117 unsigned int GetUInt(struct Expression * exp, unsigned int * value2)
8118 {
8119 struct Operand op2 = GetOperand(exp);
8120
8121 return GetOpUInt(&op2, value2);
8122 }
8123
8124 unsigned int GetInt64(struct Expression * exp, long long * value2)
8125 {
8126 struct Operand op2 = GetOperand(exp);
8127
8128 return GetOpInt64(&op2, value2);
8129 }
8130
8131 unsigned int GetUInt64(struct Expression * exp, uint64 * value2)
8132 {
8133 struct Operand op2 = GetOperand(exp);
8134
8135 return GetOpUInt64(&op2, value2);
8136 }
8137
8138 unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2)
8139 {
8140 struct Operand op2 = GetOperand(exp);
8141
8142 return GetOpIntPtr(&op2, value2);
8143 }
8144
8145 unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2)
8146 {
8147 struct Operand op2 = GetOperand(exp);
8148
8149 return GetOpUIntPtr(&op2, value2);
8150 }
8151
8152 unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
8153 {
8154 struct Operand op2 = GetOperand(exp);
8155
8156 return GetOpIntSize(&op2, value2);
8157 }
8158
8159 unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
8160 {
8161 struct Operand op2 = GetOperand(exp);
8162
8163 return GetOpUIntSize(&op2, value2);
8164 }
8165
8166 unsigned int GetShort(struct Expression * exp, short * value2)
8167 {
8168 struct Operand op2 = GetOperand(exp);
8169
8170 return GetOpShort(&op2, value2);
8171 }
8172
8173 unsigned int GetUShort(struct Expression * exp, unsigned short * value2)
8174 {
8175 struct Operand op2 = GetOperand(exp);
8176
8177 return GetOpUShort(&op2, value2);
8178 }
8179
8180 unsigned int GetChar(struct Expression * exp, char * value2)
8181 {
8182 struct Operand op2 = GetOperand(exp);
8183
8184 return GetOpChar(&op2, value2);
8185 }
8186
8187 unsigned int GetUChar(struct Expression * exp, unsigned char * value2)
8188 {
8189 struct Operand op2 = GetOperand(exp);
8190
8191 return GetOpUChar(&op2, value2);
8192 }
8193
8194 unsigned int GetFloat(struct Expression * exp, float * value2)
8195 {
8196 struct Operand op2 = GetOperand(exp);
8197
8198 return GetOpFloat(&op2, value2);
8199 }
8200
8201 unsigned int GetDouble(struct Expression * exp, double * value2)
8202 {
8203 struct Operand op2 = GetOperand(exp);
8204
8205 return GetOpDouble(&op2, value2);
8206 }
8207
8208 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
8209 {
8210 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8211 {
8212 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
8213 PrintAttribs(type, string);
8214 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
8215 strcat(string, " const");
8216 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
8217 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8218 strcat(string, " (");
8219 if(type->kind == 13)
8220 {
8221 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
8222 PrintAttribs(type->__anon1.type, string);
8223 }
8224 if(type->kind == 13)
8225 {
8226 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
8227 strcat(string, "*");
8228 else
8229 strcat(string, " *");
8230 }
8231 if(printConst && type->constant && type->kind == 13)
8232 strcat(string, " const");
8233 }
8234 else
8235 PrintTypeSpecs(type, string, fullName, printConst);
8236 }
8237
8238 void PrintExpression(struct Expression * exp, char * string)
8239 {
8240 {
8241 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8242 int count;
8243 unsigned int backOutputLineNumbers = outputLineNumbers;
8244
8245 outputLineNumbers = 0;
8246 if(exp)
8247 OutputExpression(exp, f);
8248 (__extension__ ({
8249 unsigned int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
8250
8251 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8252 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8253
8254 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8255 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
8256 __internal_VirtualMethod ? __internal_VirtualMethod(f, 0, 0) : (unsigned int)1;
8257 }));
8258 count = strlen(string);
8259 count += (__extension__ ({
8260 int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count);
8261
8262 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void *  buffer, unsigned int size, unsigned int count))__extension__ ({
8263 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
8264
8265 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
8266 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read]);
8267 __internal_VirtualMethod ? __internal_VirtualMethod(f, string + count, 1, 1023) : (int)1;
8268 }));
8269 string[count] = '\0';
8270 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
8271 outputLineNumbers = backOutputLineNumbers;
8272 }
8273 }
8274
8275 struct Type * Dereference(struct Type * source)
8276 {
8277 struct Type * type = (((void *)0));
8278
8279 if(source)
8280 {
8281 if(source->kind == 13 || source->kind == 12)
8282 {
8283 type = source->__anon1.type;
8284 source->__anon1.type->refCount++;
8285 }
8286 else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
8287 {
8288 type = __extension__ ({
8289 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8290
8291 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
8292 });
8293 }
8294 else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
8295 {
8296 type = source;
8297 source->refCount++;
8298 }
8299 else
8300 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
8301 }
8302 return type;
8303 }
8304
8305 static struct Type * Reference(struct Type * source)
8306 {
8307 struct Type * type = (((void *)0));
8308
8309 if(source)
8310 {
8311 type = __extension__ ({
8312 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
8313
8314 __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
8315 });
8316 source->refCount++;
8317 }
8318 return type;
8319 }
8320
8321 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
8322 {
8323 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
8324
8325 FreeExpContents(checkedExp);
8326 FreeType(checkedExp->expType);
8327 FreeType(checkedExp->destType);
8328 *checkedExp = *newExp;
8329 ((newExp ? __extension__ ({
8330 void * __ecerePtrToDelete = (newExp);
8331
8332 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8333 }) : 0), newExp = 0);
8334 checkedExp->prev = prev;
8335 checkedExp->next = next;
8336 }
8337
8338 void FinishTemplatesContext(struct Context * context)
8339 {
8340 PopContext(context);
8341 FreeContext(context);
8342 ((context ? __extension__ ({
8343 void * __ecerePtrToDelete = (context);
8344
8345 __ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
8346 }) : 0), context = 0);
8347 }
8348
8349 static __attribute__((unused)) void UnusedFunction()
8350 {
8351 int a;
8352
8353 (__extension__ ({
8354 const char *  (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Class * , const void * , char *  tempString, void *  fieldData, unsigned int *  needClass);
8355
8356 __internal_VirtualMethod = ((const char *  (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char *  tempString, void *  fieldData, unsigned int *  needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString]);
8357 __internal_VirtualMethod ? __internal_VirtualMethod(__ecereClass_int, (void *)&a, 0, 0, 0) : (const char * )1;
8358 }));
8359 }
8360
8361 struct Expression * ParseExpressionString(char * expression)
8362 {
8363 parseError = 0;
8364 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
8365 (__extension__ ({
8366 int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count);
8367
8368 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
8369 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8370
8371 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8372 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write]);
8373 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, expression, 1, strlen(expression)) : (int)1;
8374 }));
8375 (__extension__ ({
8376 unsigned int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
8377
8378 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
8379 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
8380
8381 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
8382 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
8383 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, 0, 0) : (unsigned int)1;
8384 }));
8385 echoOn = 0;
8386 parsedExpression = (((void *)0));
8387 resetScanner();
8388 expression_yyparse();
8389 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
8390 return parsedExpression;
8391 }
8392
8393 struct __ecereNameSpace__ecere__com__Module
8394 {
8395 struct __ecereNameSpace__ecere__com__Instance * application;
8396 struct __ecereNameSpace__ecere__sys__OldList classes;
8397 struct __ecereNameSpace__ecere__sys__OldList defines;
8398 struct __ecereNameSpace__ecere__sys__OldList functions;
8399 struct __ecereNameSpace__ecere__sys__OldList modules;
8400 struct __ecereNameSpace__ecere__com__Instance * prev;
8401 struct __ecereNameSpace__ecere__com__Instance * next;
8402 const char *  name;
8403 void *  library;
8404 void *  Unload;
8405 int importType;
8406 int origImportType;
8407 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
8408 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
8409 } ecere_gcc_struct;
8410
8411 static struct GlobalData * FindGlobalData(char * name)
8412 {
8413 int start = 0, c;
8414 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
8415
8416 nameSpace = globalData;
8417 for(c = 0; name[c]; c++)
8418 {
8419 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
8420 {
8421 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
8422 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
8423
8424 strncpy(spaceName, name + start, c - start);
8425 spaceName[c - start] = '\0';
8426 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
8427 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
8428 if(!newSpace)
8429 return (((void *)0));
8430 nameSpace = newSpace;
8431 if(name[c] == ':')
8432 c++;
8433 start = c + 1;
8434 }
8435 }
8436 if(c - start)
8437 {
8438 return ScanGlobalData(nameSpace, name + start);
8439 }
8440 return (((void *)0));
8441 }
8442
8443 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
8444 {
8445 int c;
8446 char nameSpace[1024];
8447 const char * namePart;
8448 unsigned int gotColon = 0;
8449
8450 nameSpace[0] = '\0';
8451 for(c = strlen(name) - 1; c >= 0; c--)
8452 if(name[c] == ':')
8453 {
8454 gotColon = 1;
8455 break;
8456 }
8457 namePart = name + c + 1;
8458 while(c >= 0 && name[c] == ':')
8459 c--;
8460 if(c >= 0)
8461 {
8462 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
8463
8464 if(symbol)
8465 return symbol;
8466 memcpy(nameSpace, name, c + 1);
8467 nameSpace[c + 1] = 0;
8468 return ScanWithNameSpace(tree, nameSpace, namePart);
8469 }
8470 else if(gotColon)
8471 {
8472 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8473
8474 return symbol;
8475 }
8476 else
8477 {
8478 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
8479
8480 if(symbol)
8481 return symbol;
8482 return ScanWithNameSpace(tree, "", namePart);
8483 }
8484 return (((void *)0));
8485 }
8486
8487 static void PrintArraySize(struct Type * arrayType, char * string)
8488 {
8489 char size[256];
8490
8491 size[0] = '\0';
8492 strcat(size, "[");
8493 if(arrayType->__anon1.__anon4.enumClass)
8494 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
8495 else if(arrayType->__anon1.__anon4.arraySizeExp)
8496 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
8497 strcat(size, "]");
8498 strcat(string, size);
8499 }
8500
8501 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
8502 {
8503
8504 }
8505
8506 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
8507 {
8508 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
8509 strcat(string, ")");
8510 if(type->kind == 12)
8511 PrintArraySize(type, string);
8512 else if(type->kind == 11)
8513 {
8514 struct Type * param;
8515
8516 strcat(string, "(");
8517 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
8518 {
8519 PrintType(param, string, 1, fullName);
8520 if(param->next)
8521 strcat(string, ", ");
8522 }
8523 strcat(string, ")");
8524 }
8525 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
8526 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
8527 }
8528
8529 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
8530 {
8531 PrePrintType(type, string, fullName, (((void *)0)), printConst);
8532 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
8533 strcat(string, " ");
8534 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
8535 {
8536 struct Symbol * _class = type->__anon1.__anon2.thisClass;
8537
8538 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
8539 {
8540 if(type->classObjectType == 1)
8541 strcat(string, "class");
8542 else
8543 strcat(string, type->byReference ? "typed_object&" : "typed_object");
8544 }
8545 else if(_class && _class->string)
8546 {
8547 char * s = _class->string;
8548
8549 if(fullName)
8550 strcat(string, s);
8551 else
8552 {
8553 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
8554
8555 if(name)
8556 name += 2;
8557 else
8558 name = s;
8559 strcat(string, name);
8560 }
8561 }
8562 strcat(string, "::");
8563 }
8564 if(printName && type->name)
8565 PrintName(type, string, fullName);
8566 PostPrintType(type, string, fullName);
8567 if(type->bitFieldCount)
8568 {
8569 char count[100];
8570
8571 sprintf(count, ":%d", type->bitFieldCount);
8572 strcat(string, count);
8573 }
8574 }
8575
8576 struct Conversion;
8577
8578 struct Conversion
8579 {
8580 struct Conversion * prev, * next;
8581 struct __ecereNameSpace__ecere__com__Property * convert;
8582 unsigned int isGet;
8583 struct Type * resultType;
8584 } ecere_gcc_struct;
8585
8586 static void FreeConvert(struct Conversion * convert)
8587 {
8588 if(convert->resultType)
8589 FreeType(convert->resultType);
8590 }
8591
8592 struct Enumerator;
8593
8594 struct Enumerator
8595 {
8596 struct Enumerator * prev;
8597 struct Enumerator * next;
8598 struct Location loc;
8599 struct Identifier * id;
8600 struct Expression * exp;
8601 } ecere_gcc_struct;
8602
8603 struct AsmField;
8604
8605 struct AsmField
8606 {
8607 struct AsmField * prev;
8608 struct AsmField * next;
8609 struct Location loc;
8610 char *  command;
8611 struct Expression * expression;
8612 struct Identifier * symbolic;
8613 } ecere_gcc_struct;
8614
8615 struct ClassDefinition;
8616
8617 struct Context
8618 {
8619 struct Context * parent;
8620 struct __ecereNameSpace__ecere__sys__BinaryTree types;
8621 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
8622 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
8623 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
8624 int nextID;
8625 int simpleID;
8626 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
8627 struct ClassDefinition * classDef;
8628 unsigned int templateTypesOnly;
8629 unsigned int hasNameSpace;
8630 } ecere_gcc_struct;
8631
8632 struct External
8633 {
8634 struct External * prev;
8635 struct External * next;
8636 struct Location loc;
8637 int type;
8638 struct Symbol * symbol;
8639 union
8640 {
8641 struct FunctionDefinition * function;
8642 struct ClassDefinition * _class;
8643 struct Declaration * declaration;
8644 char *  importString;
8645 struct Identifier * id;
8646 struct DBTableDef * table;
8647 } ecere_gcc_struct __anon1;
8648 int importType;
8649 struct External * fwdDecl;
8650 struct __ecereNameSpace__ecere__com__Instance * outgoing;
8651 struct __ecereNameSpace__ecere__com__Instance * incoming;
8652 int nonBreakableIncoming;
8653 } ecere_gcc_struct;
8654
8655 struct ClassDefinition
8656 {
8657 struct ClassDefinition * prev;
8658 struct ClassDefinition * next;
8659 struct Location loc;
8660 struct Specifier * _class;
8661 struct __ecereNameSpace__ecere__sys__OldList *  baseSpecs;
8662 struct __ecereNameSpace__ecere__sys__OldList *  definitions;
8663 struct Symbol * symbol;
8664 struct Location blockStart;
8665 struct Location nameLoc;
8666 int declMode;
8667 unsigned int deleteWatchable;
8668 } ecere_gcc_struct;
8669
8670 void __ecereMethod_External_CreateUniqueEdge(struct External * this, struct External * from, unsigned int soft);
8671
8672 void __ecereMethod_External_CreateEdge(struct External * this, struct External * from, unsigned int soft);
8673
8674 void DeclareGlobalData(struct External * neededFor, struct GlobalData * data)
8675 {
8676 struct Symbol * symbol = data->symbol;
8677
8678 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
8679 {
8680 if(inCompiler)
8681 {
8682 if(!symbol)
8683 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
8684 }
8685 if(!data->dataType)
8686 data->dataType = ProcessTypeString(data->dataTypeString, 0);
8687 if(inCompiler)
8688 {
8689 struct Declaration * decl;
8690 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
8691 struct Declarator * d;
8692 struct External * external;
8693
8694 specifiers = MkList();
8695 declarators = MkList();
8696 ListAdd(specifiers, MkSpecifier(EXTERN));
8697 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
8698 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
8699 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
8700 decl = MkDeclaration(specifiers, declarators);
8701 external = MkExternalDeclaration(decl);
8702 if(curExternal)
8703 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
8704 external->symbol = symbol;
8705 symbol->__anon2.__anon1.pointerExternal = external;
8706 DeclareType(external, data->dataType, 1, 1);
8707 }
8708 }
8709 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
8710 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, 0);
8711 }
8712
8713 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
8714 {
8715 struct Context * ctx;
8716 struct Symbol * symbol = (((void *)0));
8717
8718 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
8719 {
8720 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
8721 {
8722 symbol = (((void *)0));
8723 if(thisNameSpace)
8724 {
8725 char curName[1024];
8726
8727 strcpy(curName, thisNameSpace);
8728 strcat(curName, "::");
8729 strcat(curName, name);
8730 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
8731 }
8732 if(!symbol)
8733 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
8734 }
8735 else
8736 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
8737 if(symbol || ctx == endContext)
8738 break;
8739 }
8740 if(inCompiler && symbol && ctx == globalContext && symbol->__anon2.__anon1.pointerExternal && curExternal && symbol->__anon2.__anon1.pointerExternal != curExternal)
8741 __ecereMethod_External_CreateUniqueEdge(curExternal, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
8742 return symbol;
8743 }
8744
8745 struct PropertyDef;
8746
8747 struct ClassDef
8748 {
8749 struct ClassDef * prev;
8750 struct ClassDef * next;
8751 struct Location loc;
8752 int type;
8753 union
8754 {
8755 struct Declaration * decl;
8756 struct ClassFunction * function;
8757 struct __ecereNameSpace__ecere__sys__OldList *  defProperties;
8758 struct PropertyDef * propertyDef;
8759 struct PropertyWatch * propertyWatch;
8760 char *  designer;
8761 struct Identifier * defaultProperty;
8762 struct
8763 {
8764 struct Identifier * id;
8765 struct Initializer * initializer;
8766 } ecere_gcc_struct __anon1;
8767 } ecere_gcc_struct __anon1;
8768 int memberAccess;
8769 void *  object;
8770 } ecere_gcc_struct;
8771
8772 struct PropertyDef
8773 {
8774 struct PropertyDef * prev;
8775 struct PropertyDef * next;
8776 struct Location loc;
8777 struct __ecereNameSpace__ecere__sys__OldList *  specifiers;
8778 struct Declarator * declarator;
8779 struct Identifier * id;
8780 struct Statement * getStmt;
8781 struct Statement * setStmt;
8782 struct Statement * issetStmt;
8783 struct Symbol * symbol;
8784 struct Expression * category;
8785 struct
8786 {
8787 unsigned int conversion : 1;
8788 unsigned int isWatchable : 1;
8789 unsigned int isDBProp : 1;
8790 } ecere_gcc_struct __anon1;
8791 } ecere_gcc_struct;
8792
8793 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
8794 {
8795 struct ClassDef * def;
8796 int anonID = 1;
8797
8798 for(def = (*definitions).first; def; def = def->next)
8799 {
8800 if(def->type == 2)
8801 {
8802 struct Declaration * decl = def->__anon1.decl;
8803
8804 if(decl && decl->__anon1.__anon1.specifiers)
8805 {
8806 struct Specifier * spec;
8807 unsigned int isStruct = 0;
8808
8809 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
8810 {
8811 if(spec->type == 3 || spec->type == 4)
8812 {
8813 if(spec->__anon1.__anon2.definitions)
8814 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
8815 isStruct = 1;
8816 }
8817 }
8818 if(isStruct)
8819 {
8820 struct Declarator * d = (((void *)0));
8821
8822 if(decl->__anon1.__anon1.declarators)
8823 {
8824 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
8825 {
8826 struct Identifier * idDecl = GetDeclId(d);
8827
8828 if(idDecl)
8829 break;
8830 }
8831 }
8832 if(!d)
8833 {
8834 char id[100];
8835
8836 sprintf(id, "__anon%d", anonID++);
8837 if(!decl->__anon1.__anon1.declarators)
8838 decl->__anon1.__anon1.declarators = MkList();
8839 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
8840 }
8841 }
8842 }
8843 }
8844 }
8845 }
8846
8847 struct MemberInit;
8848
8849 typedef union YYSTYPE
8850 {
8851 int specifierType;
8852 int i;
8853 int declMode;
8854 struct Identifier * id;
8855 struct Expression * exp;
8856 struct Specifier * specifier;
8857 struct __ecereNameSpace__ecere__sys__OldList * list;
8858 struct Enumerator * enumerator;
8859 struct Declarator * declarator;
8860 struct Pointer * pointer;
8861 struct Initializer * initializer;
8862 struct InitDeclarator * initDeclarator;
8863 struct TypeName * typeName;
8864 struct Declaration * declaration;
8865 struct Statement * stmt;
8866 struct FunctionDefinition * function;
8867 struct External * external;
8868 struct Context * context;
8869 struct AsmField * asmField;
8870 struct Attrib * attrib;
8871 struct ExtDecl * extDecl;
8872 struct Attribute * attribute;
8873 struct Instantiation * instance;
8874 struct MembersInit * membersInit;
8875 struct MemberInit * memberInit;
8876 struct ClassFunction * classFunction;
8877 struct ClassDefinition * _class;
8878 struct ClassDef * classDef;
8879 struct PropertyDef * prop;
8880 char * string;
8881 struct Symbol * symbol;
8882 struct PropertyWatch * propertyWatch;
8883 struct TemplateParameter * templateParameter;
8884 struct TemplateArgument * templateArgument;
8885 struct TemplateDatatype * templateDatatype;
8886 struct DBTableEntry * dbtableEntry;
8887 struct DBIndexItem * dbindexItem;
8888 struct DBTableDef * dbtableDef;
8889 } ecere_gcc_struct YYSTYPE;
8890
8891 extern YYSTYPE yylval;
8892
8893 struct MemberInit
8894 {
8895 struct MemberInit * prev;
8896 struct MemberInit * next;
8897 struct Location loc;
8898 struct Location realLoc;
8899 struct __ecereNameSpace__ecere__sys__OldList *  identifiers;
8900 struct Initializer * initializer;
8901 unsigned int used;
8902 unsigned int variable;
8903 unsigned int takeOutExp;
8904 } ecere_gcc_struct;
8905
8906 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
8907
8908 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
8909
8910 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
8911 {
8912 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
8913 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
8914 const char *  name;
8915 int type;
8916 union
8917 {
8918 const char *  dataTypeString;
8919 int memberType;
8920 } ecere_gcc_struct __anon1;
8921 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
8922 void *  param;
8923 } ecere_gcc_struct;
8924
8925 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
8926 {
8927 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
8928 int id = 0;
8929 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
8930 struct __ecereNameSpace__ecere__com__Class * sClass;
8931
8932 for(sClass = _class; sClass; sClass = sClass->base)
8933 {
8934 id = 0;
8935 if(sClass->templateClass)
8936 sClass = sClass->templateClass;
8937 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
8938 {
8939 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
8940 {
8941 for(sClass = sClass->base; sClass; sClass = sClass->base)
8942 {
8943 if(sClass->templateClass)
8944 sClass = sClass->templateClass;
8945 id += sClass->templateParams.count;
8946 }
8947 break;
8948 }
8949 id++;
8950 }
8951 if(curParam)
8952 break;
8953 }
8954 if(curParam)
8955 {
8956 arg = &_class->templateArgs[id];
8957 if(arg && param->type == 0)
8958 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
8959 }
8960 return arg;
8961 }
8962
8963 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
8964 {
8965 struct Context * context = PushContext();
8966
8967 context->templateTypesOnly = 1;
8968 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
8969 {
8970 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
8971
8972 for(; param; param = param->next)
8973 {
8974 if(param->type == 0 && param->identifier)
8975 {
8976 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
8977
8978 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
8979 }
8980 }
8981 }
8982 else if(_class)
8983 {
8984 struct __ecereNameSpace__ecere__com__Class * sClass;
8985
8986 for(sClass = _class; sClass; sClass = sClass->base)
8987 {
8988 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
8989
8990 for(p = sClass->templateParams.first; p; p = p->next)
8991 {
8992 if(p->type == 0)
8993 {
8994 struct TemplateParameter * param = p->param;
8995 struct TemplatedType * type;
8996
8997 if(!param)
8998 {
8999 p->param = param = __extension__ ({
9000 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
9001
9002 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
9003 });
9004 }
9005 type = __extension__ ({
9006 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
9007
9008 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
9009 });
9010 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
9011 }
9012 }
9013 }
9014 }
9015 return context;
9016 }
9017
9018 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
9019 {
9020 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9021 {
9022 unsigned int first = 1;
9023 int p = 0;
9024 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9025 int lastParam = -1;
9026 char className[1024];
9027
9028 strcpy(className, _class->fullName);
9029 for(param = _class->templateParams.first; param; param = param->next)
9030 {
9031 {
9032 if(first)
9033 strcat(className, "<");
9034 if(!first)
9035 strcat(className, ", ");
9036 if(lastParam + 1 != p)
9037 {
9038 strcat(className, param->name);
9039 strcat(className, " = ");
9040 }
9041 strcat(className, param->name);
9042 first = 0;
9043 lastParam = p;
9044 }
9045 p++;
9046 }
9047 if(!first)
9048 {
9049 int len = strlen(className);
9050
9051 if(className[len - 1] == '>')
9052 className[len++] = ' ';
9053 className[len++] = '>';
9054 className[len++] = '\0';
9055 }
9056 return __ecereNameSpace__ecere__sys__CopyString(className);
9057 }
9058 else
9059 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
9060 }
9061
9062 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
9063 {
9064 struct Type * type;
9065
9066 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
9067 {
9068 unsigned int first = 1;
9069 int p = 0;
9070 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9071 int lastParam = -1;
9072 char className[1024];
9073
9074 strcpy(className, _class->fullName);
9075 for(param = _class->templateParams.first; param; param = param->next)
9076 {
9077 {
9078 if(first)
9079 strcat(className, "<");
9080 if(!first)
9081 strcat(className, ", ");
9082 if(lastParam + 1 != p)
9083 {
9084 strcat(className, param->name);
9085 strcat(className, " = ");
9086 }
9087 strcat(className, param->name);
9088 first = 0;
9089 lastParam = p;
9090 }
9091 p++;
9092 }
9093 if(!first)
9094 {
9095 int len = strlen(className);
9096
9097 if(className[len - 1] == '>')
9098 className[len++] = ' ';
9099 className[len++] = '>';
9100 className[len++] = '\0';
9101 }
9102 type = MkClassType(className);
9103 }
9104 else
9105 {
9106 type = MkClassType(_class->fullName);
9107 }
9108 return type;
9109 }
9110
9111 static int DeclareMembers(struct External * neededBy, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
9112 {
9113 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
9114 struct __ecereNameSpace__ecere__com__DataMember * member;
9115 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
9116
9117 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
9118 DeclareMembers(neededBy, _class->base, 0);
9119 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
9120 {
9121 if(!member->isProperty)
9122 {
9123 switch(member->type)
9124 {
9125 case 0:
9126 {
9127 if(!member->dataType && member->dataTypeString)
9128 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9129 if(member->dataType)
9130 DeclareType(neededBy, member->dataType, 1, 0);
9131 break;
9132 }
9133 case 1:
9134 case 2:
9135 {
9136 DeclareMembers(neededBy, (struct __ecereNameSpace__ecere__com__Class *)member, 1);
9137 break;
9138 }
9139 }
9140 }
9141 }
9142 if(context)
9143 FinishTemplatesContext(context);
9144 return topMember ? topMember->memberID : _class->memberID;
9145 }
9146
9147 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
9148 {
9149 if(!method->dataType)
9150 {
9151 struct Context * context = SetupTemplatesContext(method->_class);
9152
9153 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9154 FinishTemplatesContext(context);
9155 if(method->type != 1 && method->dataType)
9156 {
9157 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
9158 {
9159 if(!method->_class->symbol)
9160 method->_class->symbol = FindClass(method->_class->fullName);
9161 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
9162 }
9163 }
9164 }
9165 }
9166
9167 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
9168 {
9169 if(!prop->dataType)
9170 {
9171 struct Context * context = SetupTemplatesContext(prop->_class);
9172
9173 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
9174 FinishTemplatesContext(context);
9175 }
9176 }
9177
9178 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
9179 {
9180 if(specs != (((void *)0)) && _class)
9181 {
9182 struct Specifier * spec;
9183
9184 for(spec = specs->first; spec; spec = spec->next)
9185 {
9186 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
9187 {
9188 spec->type = 1;
9189 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
9190 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
9191 }
9192 }
9193 }
9194 }
9195
9196 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
9197 {
9198 struct Identifier * id = exp->__anon1.__anon1.identifier;
9199 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9200 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
9201 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9202 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9203
9204 if(_class && _class->type == 4)
9205 {
9206 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
9207 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
9208
9209 if(enumClass)
9210 {
9211 struct __ecereNameSpace__ecere__com__Class * baseClass;
9212
9213 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
9214 {
9215 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
9216
9217 for(value = e->values.first; value; value = value->next)
9218 {
9219 if(!strcmp(value->name, id->string))
9220 break;
9221 }
9222 if(value)
9223 {
9224 exp->isConstant = 1;
9225 if(inCompiler || inPreCompiler || inDebugger)
9226 {
9227 char constant[256];
9228
9229 FreeExpContents(exp);
9230 exp->type = 2;
9231 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
9232 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
9233 else
9234 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
9235 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9236 }
9237 exp->expType = MkClassType(baseClass->fullName);
9238 break;
9239 }
9240 }
9241 }
9242 if(value)
9243 return 1;
9244 }
9245 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
9246 {
9247 ProcessMethodType(method);
9248 exp->expType = __extension__ ({
9249 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
9250
9251 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
9252 });
9253 return 1;
9254 }
9255 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
9256 {
9257 if(!prop->dataType)
9258 ProcessPropertyType(prop);
9259 exp->expType = prop->dataType;
9260 if(prop->dataType)
9261 prop->dataType->refCount++;
9262 return 1;
9263 }
9264 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
9265 {
9266 if(!member->dataType)
9267 member->dataType = ProcessTypeString(member->dataTypeString, 0);
9268 exp->expType = member->dataType;
9269 if(member->dataType)
9270 member->dataType->refCount++;
9271 return 1;
9272 }
9273 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
9274 {
9275 if(!classProp->dataType)
9276 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
9277 if(classProp->constant)
9278 {
9279 FreeExpContents(exp);
9280 exp->isConstant = 1;
9281 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
9282 {
9283 exp->type = 3;
9284 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
9285 }
9286 else
9287 {
9288 char constant[256];
9289
9290 exp->type = 2;
9291 sprintf(constant, "%d", (int)classProp->Get(_class));
9292 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
9293 }
9294 }
9295 else
9296 {
9297 }
9298 exp->expType = classProp->dataType;
9299 if(classProp->dataType)
9300 classProp->dataType->refCount++;
9301 return 1;
9302 }
9303 return 0;
9304 }
9305
9306 void DeclareProperty(struct External * neededBy, struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
9307 {
9308 struct Symbol * symbol = prop->symbol;
9309 unsigned int imported = 0;
9310 unsigned int dllImport = 0;
9311 struct External * structExternal = (((void *)0));
9312 struct External * instExternal = (((void *)0));
9313
9314 strcpy(setName, "__ecereProp_");
9315 FullClassNameCat(setName, prop->_class->fullName, 0);
9316 strcat(setName, "_Set_");
9317 FullClassNameCat(setName, prop->name, 1);
9318 strcpy(getName, "__ecereProp_");
9319 FullClassNameCat(getName, prop->_class->fullName, 0);
9320 strcat(getName, "_Get_");
9321 FullClassNameCat(getName, prop->name, 1);
9322 if(!symbol || symbol->_import)
9323 {
9324 if(!symbol)
9325 {
9326 struct Symbol * classSym;
9327
9328 if(!prop->_class->symbol)
9329 prop->_class->symbol = FindClass(prop->_class->fullName);
9330 classSym = prop->_class->symbol;
9331 if(classSym && !classSym->_import)
9332 {
9333 struct ModuleImport * module;
9334
9335 if(prop->_class->module)
9336 module = FindModule(prop->_class->module);
9337 else
9338 module = mainModule;
9339 classSym->_import = __extension__ ({
9340 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9341
9342 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
9343 });
9344 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9345 }
9346 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9347 symbol->_import = (struct ClassImport *)__extension__ ({
9348 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
9349
9350 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
9351 });
9352 if(classSym)
9353 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
9354 }
9355 imported = 1;
9356 if((prop->_class->module != privateModule || !strcmp(prop->_class->name, "float") || !strcmp(prop->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9357 dllImport = 1;
9358 }
9359 if(!symbol->type)
9360 {
9361 struct Context * context = SetupTemplatesContext(prop->_class);
9362
9363 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
9364 FinishTemplatesContext(context);
9365 }
9366 if((prop->Get && !symbol->__anon2.__anon2.externalGet) || (prop->Set && !symbol->__anon2.__anon2.externalSet))
9367 {
9368 if(prop->_class->type == 0 && prop->_class->structSize)
9369 instExternal = DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
9370 structExternal = DeclareStruct((((void *)0)), prop->_class->fullName, prop->_class->type != 1, 0);
9371 }
9372 if(prop->Get && !symbol->__anon2.__anon2.externalGet)
9373 {
9374 struct Declaration * decl;
9375 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9376 struct Declarator * d;
9377 struct __ecereNameSpace__ecere__sys__OldList * params;
9378 struct Specifier * spec = (((void *)0));
9379 struct External * external;
9380 struct Declarator * typeDecl;
9381 unsigned int simple = 0;
9382 unsigned int needReference;
9383
9384 specifiers = MkList();
9385 declarators = MkList();
9386 params = MkList();
9387 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9388 d = MkDeclaratorIdentifier(MkIdentifier(getName));
9389 if(dllImport)
9390 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9391 {
9392 struct Context * context = SetupTemplatesContext(prop->_class);
9393
9394 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
9395 FinishTemplatesContext(context);
9396 }
9397 needReference = !typeDecl || typeDecl->type == 1;
9398 for(spec = (*specifiers).first; spec; spec = spec->next)
9399 {
9400 if(spec->type == 1)
9401 {
9402 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9403
9404 if(needReference)
9405 {
9406 symbol->_class = classSym->__anon1.registered;
9407 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
9408 simple = 1;
9409 }
9410 break;
9411 }
9412 }
9413 if(!simple)
9414 d = PlugDeclarator(typeDecl, d);
9415 else
9416 {
9417 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
9418 specifiers = MkList();
9419 }
9420 d = MkDeclaratorFunction(d, params);
9421 if(dllImport)
9422 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9423 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9424 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9425 if(simple)
9426 ListAdd(specifiers, MkSpecifier(VOID));
9427 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9428 decl = MkDeclaration(specifiers, declarators);
9429 external = MkExternalDeclaration(decl);
9430 if(structExternal)
9431 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9432 if(instExternal)
9433 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9434 if(spec)
9435 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9436 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9437 external->symbol = symbol;
9438 symbol->__anon2.__anon2.externalGet = external;
9439 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9440 if(typeDecl)
9441 FreeDeclarator(typeDecl);
9442 }
9443 if(prop->Set && !symbol->__anon2.__anon2.externalSet)
9444 {
9445 struct Declaration * decl;
9446 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9447 struct Declarator * d;
9448 struct __ecereNameSpace__ecere__sys__OldList * params;
9449 struct Specifier * spec = (((void *)0));
9450 struct External * external;
9451 struct Declarator * typeDecl;
9452 unsigned int needReference;
9453
9454 declarators = MkList();
9455 params = MkList();
9456 if(!prop->conversion || prop->_class->type == 1)
9457 {
9458 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
9459 }
9460 specifiers = MkList();
9461 {
9462 struct Context * context = SetupTemplatesContext(prop->_class);
9463
9464 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
9465 FinishTemplatesContext(context);
9466 }
9467 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
9468 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
9469 ListAdd(params, MkTypeName(specifiers, d));
9470 d = MkDeclaratorIdentifier(MkIdentifier(setName));
9471 if(dllImport)
9472 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9473 d = MkDeclaratorFunction(d, params);
9474 needReference = !typeDecl || typeDecl->type == 1;
9475 for(spec = (*specifiers).first; spec; spec = spec->next)
9476 {
9477 if(spec->type == 1)
9478 {
9479 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
9480
9481 if(needReference)
9482 symbol->_class = classSym->__anon1.registered;
9483 break;
9484 }
9485 }
9486 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9487 specifiers = MkList();
9488 if(dllImport)
9489 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9490 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
9491 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9492 if(!prop->conversion || prop->_class->type == 1)
9493 ListAdd(specifiers, MkSpecifier(VOID));
9494 else
9495 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
9496 decl = MkDeclaration(specifiers, declarators);
9497 external = MkExternalDeclaration(decl);
9498 if(structExternal)
9499 __ecereMethod_External_CreateEdge(external, structExternal, 0);
9500 if(instExternal)
9501 __ecereMethod_External_CreateEdge(external, instExternal, 0);
9502 if(spec)
9503 DeclareStruct(external, spec->__anon1.__anon1.name, 0, needReference);
9504 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9505 external->symbol = symbol;
9506 symbol->__anon2.__anon2.externalSet = external;
9507 ReplaceThisClassSpecifiers(specifiers, prop->_class);
9508 }
9509 if(!symbol->__anon2.__anon2.externalPtr)
9510 {
9511 struct Declaration * decl;
9512 struct External * external;
9513 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
9514 char propName[1024];
9515
9516 if(imported)
9517 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
9518 else
9519 {
9520 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
9521 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
9522 }
9523 ListAdd(specifiers, MkSpecifierName("Property"));
9524 strcpy(propName, "__ecereProp_");
9525 FullClassNameCat(propName, prop->_class->fullName, 0);
9526 strcat(propName, "_");
9527 FullClassNameCat(propName, prop->name, 1);
9528 {
9529 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
9530
9531 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9532 if(!imported)
9533 {
9534 strcpy(propName, "__ecerePropM_");
9535 FullClassNameCat(propName, prop->_class->fullName, 0);
9536 strcat(propName, "_");
9537 FullClassNameCat(propName, prop->name, 1);
9538 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
9539 }
9540 decl = MkDeclaration(specifiers, list);
9541 }
9542 external = MkExternalDeclaration(decl);
9543 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
9544 external->symbol = symbol;
9545 symbol->__anon2.__anon2.externalPtr = external;
9546 }
9547 if(inCompiler && neededBy)
9548 {
9549 if(symbol->__anon2.__anon2.externalPtr)
9550 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalPtr, 0);
9551 if(symbol->__anon2.__anon2.externalGet)
9552 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalGet, symbol->__anon2.__anon2.externalGet->type == 0);
9553 if(symbol->__anon2.__anon2.externalSet)
9554 __ecereMethod_External_CreateUniqueEdge(neededBy, symbol->__anon2.__anon2.externalSet, symbol->__anon2.__anon2.externalSet->type == 0);
9555 }
9556 }
9557
9558 static void ProcessDeclarator(struct Declarator *  decl, unsigned int isFunction);
9559
9560 void DeclareMethod(struct External * neededFor, struct __ecereNameSpace__ecere__com__Method * method, const char * name)
9561 {
9562 struct Symbol * symbol = method->symbol;
9563
9564 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && (!symbol->__anon2.__anon3.methodCodeExternal || method->type == 1)))
9565 {
9566 unsigned int dllImport = 0;
9567
9568 if(!method->dataType)
9569 method->dataType = ProcessTypeString(method->dataTypeString, 0);
9570 {
9571 if(!symbol || method->type == 1)
9572 {
9573 struct Symbol * classSym;
9574
9575 if(!method->_class->symbol)
9576 method->_class->symbol = FindClass(method->_class->fullName);
9577 classSym = method->_class->symbol;
9578 if(!classSym->_import)
9579 {
9580 struct ModuleImport * module;
9581
9582 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->name)
9583 module = FindModule(method->_class->module);
9584 else
9585 module = mainModule;
9586 classSym->_import = __extension__ ({
9587 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
9588
9589 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
9590 });
9591 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
9592 }
9593 if(!symbol)
9594 {
9595 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9596 }
9597 if(!symbol->_import)
9598 {
9599 symbol->_import = (struct ClassImport *)__extension__ ({
9600 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
9601
9602 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
9603 });
9604 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
9605 }
9606 if(!symbol)
9607 {
9608 symbol->type = method->dataType;
9609 if(symbol->type)
9610 symbol->type->refCount++;
9611 }
9612 }
9613 if(!method->dataType->dllExport)
9614 {
9615 if((method->_class->module != privateModule || !strcmp(method->_class->name, "float") || !strcmp(method->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9616 dllImport = 1;
9617 }
9618 }
9619 if(inCompiler)
9620 {
9621 struct Declaration * decl;
9622 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9623 struct Declarator * d;
9624 struct Declarator * funcDecl;
9625 struct External * external;
9626
9627 specifiers = MkList();
9628 declarators = MkList();
9629 if(dllImport)
9630 ListAdd(specifiers, MkSpecifier(EXTERN));
9631 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
9632 ListAdd(specifiers, MkSpecifier(STATIC));
9633 if(method->type == 1)
9634 {
9635 ListAdd(specifiers, MkSpecifier(INT));
9636 d = MkDeclaratorIdentifier(MkIdentifier(name));
9637 }
9638 else
9639 {
9640 d = MkDeclaratorIdentifier(MkIdentifier(name));
9641 if(dllImport)
9642 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9643 {
9644 struct Context * context = SetupTemplatesContext(method->_class);
9645
9646 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
9647 FinishTemplatesContext(context);
9648 }
9649 funcDecl = GetFuncDecl(d);
9650 if(dllImport)
9651 {
9652 struct Specifier * spec, * next;
9653
9654 for(spec = (*specifiers).first; spec; spec = next)
9655 {
9656 next = spec->next;
9657 if(spec->type == 5)
9658 {
9659 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9660 FreeSpecifier(spec);
9661 }
9662 }
9663 }
9664 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
9665 {
9666 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
9667 {
9668 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
9669 struct TypeName * thisParam = MkTypeName(MkListOne(MkSpecifierName(method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->string : method->_class->fullName)), (_class && _class->type == 1000) ? MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("this"))) : MkDeclaratorIdentifier(MkIdentifier("this")));
9670 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
9671 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
9672
9673 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
9674 {
9675 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
9676
9677 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
9678 FreeTypeName(param);
9679 }
9680 if(!funcDecl->__anon1.function.parameters)
9681 funcDecl->__anon1.function.parameters = MkList();
9682 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
9683 }
9684 }
9685 }
9686 ProcessDeclarator(d, 1);
9687 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9688 decl = MkDeclaration(specifiers, declarators);
9689 ReplaceThisClassSpecifiers(specifiers, method->_class);
9690 external = MkExternalDeclaration(decl);
9691 external->symbol = symbol;
9692 symbol->__anon2.__anon1.pointerExternal = external;
9693 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9694 DeclareStruct(external, method->_class->fullName, 1, 1);
9695 if(method->dataType)
9696 DeclareType(external, method->dataType, 1, 1);
9697 }
9698 }
9699 if(inCompiler && neededFor)
9700 {
9701 struct External * external = symbol->__anon2.__anon1.pointerExternal ? symbol->__anon2.__anon1.pointerExternal : symbol->__anon2.__anon3.methodCodeExternal;
9702
9703 __ecereMethod_External_CreateUniqueEdge(neededFor, external, external->type == 0);
9704 }
9705 }
9706
9707 struct __ecereNameSpace__ecere__com__GlobalFunction;
9708
9709 struct __ecereNameSpace__ecere__com__GlobalFunction
9710 {
9711 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
9712 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
9713 const char *  name;
9714 int (*  function)();
9715 struct __ecereNameSpace__ecere__com__Instance * module;
9716 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
9717 const char *  dataTypeString;
9718 struct Type * dataType;
9719 void *  symbol;
9720 } ecere_gcc_struct;
9721
9722 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
9723
9724 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);
9725
9726 unsigned int DeclareFunction(struct External * neededFor, struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
9727 {
9728 struct Symbol * symbol = function->symbol;
9729
9730 if(!symbol || !symbol->__anon2.__anon1.pointerExternal)
9731 {
9732 unsigned int imported = 0;
9733 unsigned int dllImport = 0;
9734
9735 if(!function->dataType)
9736 {
9737 function->dataType = ProcessTypeString(function->dataTypeString, 0);
9738 if(!function->dataType->__anon1.__anon2.thisClass)
9739 function->dataType->__anon1.__anon2.staticMethod = 1;
9740 }
9741 if(inCompiler)
9742 {
9743 if(!symbol)
9744 {
9745 struct ModuleImport * module = FindModule(function->module);
9746
9747 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
9748 if(module->name)
9749 {
9750 if(!function->dataType->dllExport)
9751 {
9752 symbol->_import = (struct ClassImport *)__extension__ ({
9753 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
9754
9755 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
9756 });
9757 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
9758 }
9759 }
9760 {
9761 symbol->type = ProcessTypeString(function->dataTypeString, 0);
9762 if(!symbol->type->__anon1.__anon2.thisClass)
9763 symbol->type->__anon1.__anon2.staticMethod = 1;
9764 }
9765 }
9766 imported = symbol->_import ? 1 : 0;
9767 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1)
9768 dllImport = 1;
9769 }
9770 if(inCompiler)
9771 {
9772 {
9773 struct Declaration * decl;
9774 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
9775 struct Declarator * d;
9776 struct Declarator * funcDecl;
9777 struct External * external;
9778
9779 specifiers = MkList();
9780 declarators = MkList();
9781 ListAdd(specifiers, MkSpecifier(EXTERN));
9782 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
9783 if(dllImport)
9784 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
9785 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
9786 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType == 1)
9787 {
9788 struct Specifier * spec;
9789
9790 for(spec = (*specifiers).first; spec; spec = spec->next)
9791 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
9792 {
9793 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
9794 FreeSpecifier(spec);
9795 break;
9796 }
9797 }
9798 funcDecl = GetFuncDecl(d);
9799 if(funcDecl && !funcDecl->__anon1.function.parameters)
9800 {
9801 funcDecl->__anon1.function.parameters = MkList();
9802 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
9803 }
9804 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
9805 {
9806 struct Context * oldCtx = curContext;
9807
9808 curContext = globalContext;
9809 decl = MkDeclaration(specifiers, declarators);
9810 curContext = oldCtx;
9811 }
9812 external = MkExternalDeclaration(decl);
9813 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
9814 external->symbol = symbol;
9815 symbol->__anon2.__anon1.pointerExternal = external;
9816 DeclareType(external, function->dataType, 1, 1);
9817 }
9818 }
9819 }
9820 if(inCompiler && neededFor && symbol && symbol->__anon2.__anon1.pointerExternal)
9821 __ecereMethod_External_CreateUniqueEdge(neededFor, symbol->__anon2.__anon1.pointerExternal, symbol->__anon2.__anon1.pointerExternal->type == 0);
9822 return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1) ? 1 : 0;
9823 }
9824
9825 void DeclareFunctionUtil(struct External * neededBy, const char * s)
9826 {
9827 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
9828
9829 if(function)
9830 {
9831 char name[1024];
9832
9833 name[0] = 0;
9834 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
9835 strcpy(name, "__ecereFunction_");
9836 FullClassNameCat(name, s, 0);
9837 DeclareFunction(neededBy, function, name);
9838 }
9839 else if(neededBy)
9840 FindSymbol(s, globalContext, globalContext, 0, 0);
9841 }
9842
9843 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
9844 {
9845 char propName[1024], propNameM[1024];
9846 char getName[1024], setName[1024];
9847 struct __ecereNameSpace__ecere__sys__OldList * args;
9848
9849 DeclareProperty(curExternal, prop, setName, getName);
9850 strcpy(propName, "__ecereProp_");
9851 FullClassNameCat(propName, prop->_class->fullName, 0);
9852 strcat(propName, "_");
9853 FullClassNameCat(propName, prop->name, 1);
9854 strcpy(propNameM, "__ecerePropM_");
9855 FullClassNameCat(propNameM, prop->_class->fullName, 0);
9856 strcat(propNameM, "_");
9857 FullClassNameCat(propNameM, prop->name, 1);
9858 if(prop->isWatchable)
9859 {
9860 args = MkList();
9861 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9862 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9863 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9864 args = MkList();
9865 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9866 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9867 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
9868 DeclareFunctionUtil(curExternal, "eInstance_FireWatchers");
9869 }
9870 {
9871 args = MkList();
9872 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9873 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
9874 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9875 args = MkList();
9876 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
9877 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
9878 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
9879 DeclareFunctionUtil(curExternal, "eInstance_FireSelfWatchers");
9880 }
9881 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
9882 curFunction->propSet->fireWatchersDone = 1;
9883 }
9884
9885 struct __ecereNameSpace__ecere__com__SubModule;
9886
9887 struct __ecereNameSpace__ecere__com__SubModule
9888 {
9889 struct __ecereNameSpace__ecere__com__SubModule * prev;
9890 struct __ecereNameSpace__ecere__com__SubModule * next;
9891 struct __ecereNameSpace__ecere__com__Instance * module;
9892 int importMode;
9893 } ecere_gcc_struct;
9894
9895 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
9896 {
9897 struct __ecereNameSpace__ecere__com__SubModule * subModule;
9898
9899 if(searchFor == searchIn)
9900 return 1;
9901 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
9902 {
9903 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
9904 {
9905 if(ModuleVisibility(subModule->module, searchFor))
9906 return 1;
9907 }
9908 }
9909 return 0;
9910 }
9911
9912 void ProcessExpressionType(struct Expression *  exp);
9913
9914 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
9915 {
9916 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
9917 {
9918 struct Identifier * id = exp->__anon1.__anon1.identifier;
9919 struct Context * ctx;
9920 struct Symbol * symbol = (((void *)0));
9921
9922 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
9923 {
9924 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
9925 {
9926 if(!ctx)
9927 break;
9928 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
9929 if(symbol)
9930 break;
9931 }
9932 }
9933 if(!symbol && ((!id->_class || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))) || (id->classSym && __ecereNameSpace__ecere__com__eClass_IsDerived(_class, id->classSym->__anon1.registered))))
9934 {
9935 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
9936 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
9937 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
9938 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
9939
9940 if(!prop)
9941 {
9942 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
9943 }
9944 if(!prop && !method)
9945 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
9946 if(!prop && !method && !member)
9947 {
9948 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
9949 }
9950 if(prop || method || member || classProp)
9951 {
9952 exp->type = 8;
9953 exp->__anon1.member.member = id;
9954 exp->__anon1.member.memberType = 0;
9955 exp->__anon1.member.exp = QMkExpId("this");
9956 exp->addedThis = 1;
9957 }
9958 else if(_class && _class->templateParams.first)
9959 {
9960 struct __ecereNameSpace__ecere__com__Class * sClass;
9961
9962 for(sClass = _class; sClass; sClass = sClass->base)
9963 {
9964 if(sClass->templateParams.first)
9965 {
9966 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
9967
9968 for(param = sClass->templateParams.first; param; param = param->next)
9969 {
9970 if(param->type == 2 && !strcmp(param->name, id->string))
9971 {
9972 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
9973
9974 if(argExp)
9975 {
9976 struct Declarator * decl;
9977 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
9978
9979 FreeIdentifier(exp->__anon1.member.member);
9980 ProcessExpressionType(argExp);
9981 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
9982 exp->expType = ProcessType(specs, decl);
9983 exp->type = 5;
9984 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
9985 }
9986 }
9987 }
9988 }
9989 }
9990 }
9991 }
9992 }
9993 }
9994
9995 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
9996 {
9997 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
9998
9999 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
10000 {
10001 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10002 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
10003 else
10004 {
10005 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10006 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10007 struct Type * type;
10008 void * ptr = inst->data + dataMember->offset + offset;
10009 char * result = (((void *)0));
10010
10011 exp->loc = member->loc = inst->loc;
10012 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10013 if(!dataMember->dataType)
10014 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10015 type = dataMember->dataType;
10016 if(type->kind == 8)
10017 {
10018 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10019
10020 if(_class->type == 4)
10021 {
10022 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10023
10024 if(enumClass)
10025 {
10026 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10027 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10028
10029 for(item = e->values.first; item; item = item->next)
10030 {
10031 if(item->data == GetEnumValue(_class, ptr))
10032 {
10033 result = item->name;
10034 break;
10035 }
10036 }
10037 if(result)
10038 {
10039 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10040 exp->type = 0;
10041 exp->destType = MkClassType(_class->fullName);
10042 ProcessExpressionType(exp);
10043 }
10044 }
10045 }
10046 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10047 {
10048 if(!_class->dataType)
10049 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10050 type = _class->dataType;
10051 }
10052 }
10053 if(!result)
10054 {
10055 switch(type->kind)
10056 {
10057 case 6:
10058 {
10059 FreeExpContents(exp);
10060 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10061 exp->type = 2;
10062 break;
10063 }
10064 case 7:
10065 {
10066 FreeExpContents(exp);
10067 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10068 exp->type = 2;
10069 break;
10070 }
10071 case 3:
10072 {
10073 FreeExpContents(exp);
10074 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10075 exp->type = 2;
10076 break;
10077 }
10078 case 4:
10079 {
10080 FreeExpContents(exp);
10081 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10082 exp->type = 2;
10083 break;
10084 }
10085 case 22:
10086 {
10087 FreeExpContents(exp);
10088 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10089 exp->type = 2;
10090 break;
10091 }
10092 case 23:
10093 {
10094 FreeExpContents(exp);
10095 exp->__anon1.__anon1.constant = PrintInt64((long long)*(ssize_t *)ptr);
10096 exp->type = 2;
10097 break;
10098 }
10099 default:
10100 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10101 }
10102 }
10103 ListAdd(memberList, member);
10104 }
10105 if(parentDataMember->type == 1)
10106 break;
10107 }
10108 }
10109
10110 void CheckTemplateTypes(struct Expression * exp)
10111 {
10112 struct Expression * nbExp = GetNonBracketsExp(exp);
10113
10114 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
10115 {
10116 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10117 struct Context * context;
10118 int kind = exp->expType->kind;
10119
10120 *newExp = *exp;
10121 if(exp->destType)
10122 exp->destType->refCount++;
10123 if(exp->expType)
10124 exp->expType->refCount++;
10125 newExp->prev = (((void *)0));
10126 newExp->next = (((void *)0));
10127 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10128 {
10129 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10130
10131 if(c->type == 2 || c->type == 4 || c->type == 3)
10132 {
10133 if(!c->dataType)
10134 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10135 kind = c->dataType->kind;
10136 }
10137 }
10138 switch(kind)
10139 {
10140 case 7:
10141 if(exp->destType->classObjectType)
10142 {
10143 if(exp->destType)
10144 exp->destType->refCount--;
10145 if(exp->expType)
10146 exp->expType->refCount--;
10147 ((newExp ? __extension__ ({
10148 void * __ecerePtrToDelete = (newExp);
10149
10150 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10151 }) : 0), newExp = 0);
10152 }
10153 else
10154 {
10155 struct __ecereNameSpace__ecere__sys__OldList * specs;
10156 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10157 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10158
10159 context = PushContext();
10160 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10161 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10162 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10163 exp->type = 23;
10164 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10165 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
10166 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
10167 exp->__anon1.compound->__anon1.compound.context = context;
10168 PopContext(context);
10169 }
10170 break;
10171 default:
10172 exp->type = 11;
10173 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
10174 if((exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1) || __ecereProp_Type_Get_isPointerType(exp->expType))
10175 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
10176 else
10177 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10178 exp->needCast = 1;
10179 break;
10180 }
10181 }
10182 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
10183 {
10184 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10185 struct Context * context;
10186 int kind = exp->expType->kind;
10187
10188 *newExp = *exp;
10189 if(exp->destType)
10190 exp->destType->refCount++;
10191 if(exp->expType)
10192 exp->expType->refCount++;
10193 newExp->prev = (((void *)0));
10194 newExp->next = (((void *)0));
10195 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
10196 {
10197 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
10198
10199 if(c->type == 2 || c->type == 4 || c->type == 3)
10200 {
10201 if(!c->dataType)
10202 c->dataType = ProcessTypeString(c->dataTypeString, 0);
10203 kind = c->dataType->kind;
10204 }
10205 }
10206 switch(kind)
10207 {
10208 case 7:
10209 if(exp->destType->classObjectType)
10210 {
10211 if(exp->destType)
10212 exp->destType->refCount--;
10213 if(exp->expType)
10214 exp->expType->refCount--;
10215 ((newExp ? __extension__ ({
10216 void * __ecerePtrToDelete = (newExp);
10217
10218 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10219 }) : 0), newExp = 0);
10220 }
10221 else
10222 {
10223 struct __ecereNameSpace__ecere__sys__OldList * specs;
10224 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
10225 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
10226
10227 context = PushContext();
10228 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
10229 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
10230 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
10231 exp->type = 23;
10232 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
10233 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
10234 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
10235 exp->__anon1.compound->__anon1.compound.context = context;
10236 PopContext(context);
10237 }
10238 break;
10239 case 8:
10240 {
10241 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
10242 {
10243 exp->type = 5;
10244 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10245 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp)));
10246 ProcessExpressionType((*exp->__anon1.list).first);
10247 break;
10248 }
10249 else
10250 {
10251 exp->type = 5;
10252 if(__ecereProp_Type_Get_isPointerType(exp->expType))
10253 {
10254 exp->needTemplateCast = 2;
10255 newExp->needCast = 1;
10256 newExp->needTemplateCast = 2;
10257 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
10258 }
10259 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
10260 exp->needTemplateCast = 2;
10261 newExp->needCast = 1;
10262 newExp->needTemplateCast = 2;
10263 ProcessExpressionType((*exp->__anon1.list).first);
10264 break;
10265 }
10266 }
10267 default:
10268 {
10269 if(exp->expType->kind == 20)
10270 {
10271 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
10272
10273 if(type)
10274 {
10275 FreeType(exp->destType);
10276 FreeType(exp->expType);
10277 ((newExp ? __extension__ ({
10278 void * __ecerePtrToDelete = (newExp);
10279
10280 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
10281 }) : 0), newExp = 0);
10282 break;
10283 }
10284 }
10285 {
10286 char typeString[1024];
10287 struct Declarator * decl;
10288 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
10289
10290 typeString[0] = '\0';
10291 PrintType(exp->expType, typeString, 0, 0);
10292 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
10293 exp->type = 11;
10294 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
10295 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
10296 exp->__anon1.cast.exp->needCast = 1;
10297 exp->needTemplateCast = 2;
10298 newExp->needTemplateCast = 2;
10299 }
10300 break;
10301 }
10302 }
10303 }
10304 }
10305
10306 static void ProcessInitializer(struct Initializer * init, struct Type * type)
10307 {
10308 switch(init->type)
10309 {
10310 case 0:
10311 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
10312 {
10313 if(init->__anon1.exp && !init->__anon1.exp->destType)
10314 {
10315 FreeType(init->__anon1.exp->destType);
10316 init->__anon1.exp->destType = type;
10317 if(type)
10318 type->refCount++;
10319 }
10320 if(init->__anon1.exp)
10321 {
10322 ProcessExpressionType(init->__anon1.exp);
10323 init->isConstant = init->__anon1.exp->isConstant;
10324 }
10325 break;
10326 }
10327 else
10328 {
10329 struct Expression * exp = init->__anon1.exp;
10330 struct Instantiation * inst = exp->__anon1.instance;
10331 struct MembersInit * members;
10332
10333 init->type = 1;
10334 init->__anon1.list = MkList();
10335 if(inst->members)
10336 {
10337 for(members = (*inst->members).first; members; members = members->next)
10338 {
10339 if(members->type == 0)
10340 {
10341 struct MemberInit * member;
10342
10343 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
10344 {
10345 ListAdd(init->__anon1.list, member->initializer);
10346 member->initializer = (((void *)0));
10347 }
10348 }
10349 }
10350 }
10351 FreeExpression(exp);
10352 }
10353 case 1:
10354 {
10355 struct Initializer * i;
10356 struct Type * initializerType = (((void *)0));
10357 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
10358 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
10359 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
10360 int subMemberStackPos = 0;
10361
10362 if(type && type->kind == 12)
10363 initializerType = Dereference(type);
10364 else if(type && (type->kind == 9 || type->kind == 10))
10365 initializerType = type->__anon1.__anon1.members.first;
10366 for(i = (*init->__anon1.list).first; i; i = i->next)
10367 {
10368 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
10369 {
10370 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
10371 if(curMember)
10372 {
10373 if(!curMember->dataType)
10374 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
10375 initializerType = curMember->dataType;
10376 }
10377 }
10378 ProcessInitializer(i, initializerType);
10379 if(initializerType && type && (type->kind == 9 || type->kind == 10))
10380 initializerType = initializerType->next;
10381 if(!i->isConstant)
10382 init->isConstant = 0;
10383 }
10384 if(type && type->kind == 12)
10385 FreeType(initializerType);
10386 if(type && type->kind != 12 && type->kind != 9 && type->kind != 10 && (type->kind != 8 || !type->__anon1._class->__anon1.registered || type->__anon1._class->__anon1.registered->type != 1))
10387 {
10388 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
10389 }
10390 break;
10391 }
10392 }
10393 }
10394
10395 void PopulateInstance(struct Instantiation * inst)
10396 {
10397 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
10398 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
10399 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10400 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
10401
10402 if(!inst->members)
10403 inst->members = MkListOne(MkMembersInitList(memberList));
10404 else
10405 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
10406 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10407 {
10408 if(!dataMember->isProperty)
10409 {
10410 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
10411 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
10412 else
10413 {
10414 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
10415 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
10416 struct Type * type;
10417 void * ptr = inst->data + dataMember->offset;
10418 char * result = (((void *)0));
10419
10420 exp->loc = member->loc = inst->loc;
10421 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
10422 if(!dataMember->dataType)
10423 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10424 type = dataMember->dataType;
10425 if(type->kind == 8)
10426 {
10427 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
10428
10429 if(_class->type == 4)
10430 {
10431 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
10432
10433 if(enumClass)
10434 {
10435 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
10436 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
10437
10438 for(item = e->values.first; item; item = item->next)
10439 {
10440 if(item->data == GetEnumValue(_class, ptr))
10441 {
10442 result = item->name;
10443 break;
10444 }
10445 }
10446 }
10447 if(result)
10448 {
10449 exp->__anon1.__anon1.identifier = MkIdentifier(result);
10450 exp->type = 0;
10451 exp->destType = MkClassType(_class->fullName);
10452 ProcessExpressionType(exp);
10453 }
10454 }
10455 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
10456 {
10457 if(!_class->dataType)
10458 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
10459 type = _class->dataType;
10460 }
10461 }
10462 if(!result)
10463 {
10464 switch(type->kind)
10465 {
10466 case 6:
10467 {
10468 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
10469 exp->type = 2;
10470 break;
10471 }
10472 case 7:
10473 {
10474 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
10475 exp->type = 2;
10476 break;
10477 }
10478 case 3:
10479 {
10480 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
10481 exp->type = 2;
10482 break;
10483 }
10484 case 4:
10485 {
10486 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
10487 exp->type = 2;
10488 break;
10489 }
10490 case 22:
10491 {
10492 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
10493 exp->type = 2;
10494 break;
10495 }
10496 default:
10497 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
10498 }
10499 }
10500 ListAdd(memberList, member);
10501 }
10502 }
10503 }
10504 }
10505
10506 int ComputeTypeSize(struct Type *  type);
10507
10508 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
10509 {
10510 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10511 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10512
10513 if(member || ((_class->type == 2 || _class->type == 0 || _class->type == 1 || _class->type == 5) && (_class->type == 2 || (!_class->structSize || _class->structSize == _class->offset)) && _class->computeSize))
10514 {
10515 int unionMemberOffset = 0;
10516 int bitFields = 0;
10517
10518 if(member)
10519 {
10520 member->memberOffset = 0;
10521 if(targetBits < sizeof(void *) * 8)
10522 member->structAlignment = 0;
10523 }
10524 else if(targetBits < sizeof(void *) * 8)
10525 _class->structAlignment = 0;
10526 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
10527 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
10528 if(!member && _class->destructionWatchOffset)
10529 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10530 {
10531 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10532
10533 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10534 {
10535 if(!dataMember->isProperty)
10536 {
10537 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
10538 {
10539 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
10540 }
10541 }
10542 }
10543 }
10544 {
10545 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
10546
10547 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
10548 {
10549 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
10550 {
10551 if(!isMember && _class->type == 2 && dataMember->dataType)
10552 {
10553 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
10554 uint64 mask = 0;
10555 int d;
10556
10557 ComputeTypeSize(dataMember->dataType);
10558 if(bitMember->pos == -1)
10559 bitMember->pos = _class->memberOffset;
10560 if(!bitMember->size)
10561 bitMember->size = dataMember->dataType->size * 8;
10562 _class->memberOffset = bitMember->pos + bitMember->size;
10563 for(d = 0; d < bitMember->size; d++)
10564 {
10565 if(d)
10566 mask <<= 1;
10567 mask |= 1;
10568 }
10569 bitMember->mask = mask << bitMember->pos;
10570 }
10571 else if(dataMember->type == 0 && dataMember->dataType)
10572 {
10573 int size;
10574 int alignment = 0;
10575
10576 if(dataMember->dataType->kind != 8 || ((!dataMember->dataType->__anon1._class || !dataMember->dataType->__anon1._class->__anon1.registered || dataMember->dataType->__anon1._class->__anon1.registered != _class || _class->type != 1)))
10577 ComputeTypeSize(dataMember->dataType);
10578 if(dataMember->dataType->bitFieldCount)
10579 {
10580 bitFields += dataMember->dataType->bitFieldCount;
10581 size = 0;
10582 }
10583 else
10584 {
10585 if(bitFields)
10586 {
10587 int size = (bitFields + 7) / 8;
10588
10589 if(isMember)
10590 {
10591 int __simpleStruct0;
10592
10593 if(alignment)
10594 {
10595 short __simpleStruct0;
10596
10597 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10598 if(member->memberOffset % alignment)
10599 member->memberOffset += alignment - (member->memberOffset % alignment);
10600 }
10601 dataMember->offset = member->memberOffset;
10602 if(member->type == 1)
10603 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10604 else
10605 {
10606 member->memberOffset += size;
10607 }
10608 }
10609 else
10610 {
10611 if(alignment)
10612 {
10613 short __simpleStruct0;
10614
10615 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10616 if(_class->memberOffset % alignment)
10617 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10618 }
10619 dataMember->offset = _class->memberOffset;
10620 _class->memberOffset += size;
10621 }
10622 bitFields = 0;
10623 }
10624 size = dataMember->dataType->size;
10625 alignment = dataMember->dataType->alignment;
10626 }
10627 if(isMember)
10628 {
10629 int __simpleStruct0;
10630
10631 if(alignment)
10632 {
10633 short __simpleStruct0;
10634
10635 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10636 if(member->memberOffset % alignment)
10637 member->memberOffset += alignment - (member->memberOffset % alignment);
10638 }
10639 dataMember->offset = member->memberOffset;
10640 if(member->type == 1)
10641 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10642 else
10643 {
10644 member->memberOffset += size;
10645 }
10646 }
10647 else
10648 {
10649 if(alignment)
10650 {
10651 short __simpleStruct0;
10652
10653 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10654 if(_class->memberOffset % alignment)
10655 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10656 }
10657 dataMember->offset = _class->memberOffset;
10658 _class->memberOffset += size;
10659 }
10660 }
10661 else
10662 {
10663 int alignment;
10664
10665 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
10666 alignment = dataMember->structAlignment;
10667 if(isMember)
10668 {
10669 int __simpleStruct0;
10670
10671 if(alignment)
10672 {
10673 short __simpleStruct0;
10674
10675 if(member->memberOffset % alignment)
10676 member->memberOffset += alignment - (member->memberOffset % alignment);
10677 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10678 }
10679 dataMember->offset = member->memberOffset;
10680 if(member->type == 1)
10681 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10682 else
10683 member->memberOffset += dataMember->memberOffset;
10684 }
10685 else
10686 {
10687 if(alignment)
10688 {
10689 short __simpleStruct0;
10690
10691 if(_class->memberOffset % alignment)
10692 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10693 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10694 }
10695 dataMember->offset = _class->memberOffset;
10696 _class->memberOffset += dataMember->memberOffset;
10697 }
10698 }
10699 }
10700 }
10701 if(bitFields)
10702 {
10703 int alignment = 0;
10704 int size = (bitFields + 7) / 8;
10705
10706 if(isMember)
10707 {
10708 int __simpleStruct0;
10709
10710 if(alignment)
10711 {
10712 short __simpleStruct0;
10713
10714 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10715 if(member->memberOffset % alignment)
10716 member->memberOffset += alignment - (member->memberOffset % alignment);
10717 }
10718 if(member->type == 1)
10719 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
10720 else
10721 {
10722 member->memberOffset += size;
10723 }
10724 }
10725 else
10726 {
10727 if(alignment)
10728 {
10729 short __simpleStruct0;
10730
10731 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
10732 if(_class->memberOffset % alignment)
10733 _class->memberOffset += alignment - (_class->memberOffset % alignment);
10734 }
10735 _class->memberOffset += size;
10736 }
10737 bitFields = 0;
10738 }
10739 }
10740 if(member && member->type == 1)
10741 {
10742 member->memberOffset = unionMemberOffset;
10743 }
10744 if(!isMember)
10745 {
10746 if(_class->type != 2)
10747 {
10748 int extra = 0;
10749
10750 if(_class->structAlignment)
10751 {
10752 if(_class->memberOffset % _class->structAlignment)
10753 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
10754 }
10755 _class->structSize = (_class->base ? (_class->base->templateClass ? (_class->base->type == 5 ? _class->base->templateClass->memberOffset : _class->base->templateClass->structSize) : (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize)) : 0) + _class->memberOffset + extra;
10756 if(!member)
10757 {
10758 struct __ecereNameSpace__ecere__com__Property * prop;
10759
10760 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
10761 {
10762 if(prop->isProperty && prop->isWatchable)
10763 {
10764 prop->watcherOffset = _class->structSize;
10765 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
10766 }
10767 }
10768 }
10769 {
10770 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
10771
10772 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
10773 {
10774 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
10775
10776 if(deriv->computeSize)
10777 {
10778 deriv->offset = (_class->type == 5 ? _class->memberOffset : _class->structSize);
10779 deriv->memberOffset = 0;
10780 deriv->structSize = deriv->offset;
10781 ComputeClassMembers(deriv, 0);
10782 }
10783 }
10784 }
10785 }
10786 }
10787 }
10788 if(context)
10789 FinishTemplatesContext(context);
10790 }
10791
10792 int AddMembers(struct External * neededBy, struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember, unsigned int * retSize, struct __ecereNameSpace__ecere__com__Class * topClass, unsigned int * addedPadding)
10793 {
10794 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
10795 unsigned int totalSize = 0;
10796 unsigned int maxSize = 0;
10797 int alignment;
10798 unsigned int size;
10799 struct __ecereNameSpace__ecere__com__DataMember * member;
10800 int anonID = 1;
10801 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
10802
10803 if(addedPadding)
10804 *addedPadding = 0;
10805 if(!isMember && _class->base)
10806 {
10807 maxSize = _class->structSize;
10808 {
10809 if(_class->type == 1 || _class->type == 5)
10810 AddMembers(neededBy, declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
10811 else
10812 {
10813 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
10814
10815 if(maxSize > baseSize)
10816 maxSize -= baseSize;
10817 else
10818 maxSize = 0;
10819 }
10820 }
10821 }
10822 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
10823 {
10824 if(!member->isProperty)
10825 {
10826 switch(member->type)
10827 {
10828 case 0:
10829 {
10830 if(member->dataTypeString)
10831 {
10832 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
10833 struct Declarator * decl;
10834
10835 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
10836 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
10837 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
10838 if(!member->dataType)
10839 member->dataType = ProcessType(specs, decl);
10840 ReplaceThisClassSpecifiers(specs, topClass);
10841 {
10842 struct Type * type = ProcessType(specs, decl);
10843
10844 DeclareType(neededBy, member->dataType, 1, 0);
10845 FreeType(type);
10846 }
10847 ComputeTypeSize(member->dataType);
10848 size = member->dataType->size;
10849 alignment = member->dataType->alignment;
10850 if(alignment)
10851 {
10852 if(totalSize % alignment)
10853 totalSize += alignment - (totalSize % alignment);
10854 }
10855 totalSize += size;
10856 }
10857 break;
10858 }
10859 case 1:
10860 case 2:
10861 {
10862 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
10863 char id[100];
10864
10865 sprintf(id, "__anon%d", anonID++);
10866 size = 0;
10867 AddMembers(neededBy, list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
10868 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
10869 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
10870 alignment = member->structAlignment;
10871 if(alignment)
10872 {
10873 if(totalSize % alignment)
10874 totalSize += alignment - (totalSize % alignment);
10875 }
10876 totalSize += size;
10877 break;
10878 }
10879 }
10880 }
10881 }
10882 if(retSize)
10883 {
10884 unsigned int __simpleStruct0;
10885
10886 if(topMember && topMember->type == 1)
10887 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
10888 else
10889 *retSize += totalSize;
10890 }
10891 else if(totalSize < maxSize && _class->type != 1000)
10892 {
10893 int autoPadding = 0;
10894
10895 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
10896 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
10897 if(totalSize + autoPadding < maxSize)
10898 {
10899 char sizeString[50];
10900
10901 sprintf(sizeString, "%d", maxSize - totalSize);
10902 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
10903 if(addedPadding)
10904 *addedPadding = 1;
10905 }
10906 }
10907 if(context)
10908 FinishTemplatesContext(context);
10909 return topMember ? topMember->memberID : _class->memberID;
10910 }
10911
10912 unsigned int MatchTypes(struct Type * source, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, struct __ecereNameSpace__ecere__com__Class * owningClassSource, struct __ecereNameSpace__ecere__com__Class * owningClassDest, unsigned int doConversion, unsigned int enumBaseType, unsigned int acceptReversedParams, unsigned int isConversionExploration, unsigned int warnConst)
10913 {
10914 if(source && dest)
10915 {
10916 if(warnConst)
10917 CheckConstCompatibility(source, dest, 1);
10918 if(source->kind == 20 && dest->kind != 20)
10919 {
10920 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
10921
10922 if(type)
10923 source = type;
10924 }
10925 if(dest->kind == 20 && source->kind != 20)
10926 {
10927 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
10928
10929 if(type)
10930 dest = type;
10931 }
10932 if(dest->classObjectType == 2 && dest->kind != 11)
10933 {
10934 if(source->classObjectType != 3)
10935 return 1;
10936 else
10937 {
10938 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
10939 {
10940 return 1;
10941 }
10942 }
10943 }
10944 else
10945 {
10946 if(source->kind != 11 && source->classObjectType == 3)
10947 return 1;
10948 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
10949 return 1;
10950 }
10951 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
10952 {
10953 if((dest->__anon1.__anon1.enumName && source->__anon1.__anon1.enumName && !strcmp(dest->__anon1.__anon1.enumName, source->__anon1.__anon1.enumName)) || (source->__anon1.__anon1.members.first && source->__anon1.__anon1.members.first == dest->__anon1.__anon1.members.first))
10954 return 1;
10955 }
10956 if(dest->kind == 14 && source->kind != 0)
10957 return 1;
10958 if(dest->kind == 13 && dest->__anon1.type->kind == 0 && ((source->kind == 8 && (!source->__anon1._class || !source->__anon1._class->__anon1.registered || source->__anon1._class->__anon1.registered->type == 1 || source->__anon1._class->__anon1.registered->type == 0 || source->__anon1._class->__anon1.registered->type == 5 || source->__anon1._class->__anon1.registered->type == 1000)) || source->kind == 19 || source->kind == 13 || source->kind == 12 || source->kind == 11 || source->kind == 21))
10959 return 1;
10960 if(!isConversionExploration && source->kind == 13 && source->__anon1.type->kind == 0 && ((dest->kind == 8 && (!dest->__anon1._class || !dest->__anon1._class->__anon1.registered || dest->__anon1._class->__anon1.registered->type == 1 || dest->__anon1._class->__anon1.registered->type == 0 || dest->__anon1._class->__anon1.registered->type == 5 || dest->__anon1._class->__anon1.registered->type == 1000)) || dest->kind == 19 || dest->kind == 13 || dest->kind == 12 || dest->kind == 11 || dest->kind == 21))
10961 return 1;
10962 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
10963 {
10964 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
10965 {
10966 if(conversions != (((void *)0)))
10967 {
10968 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
10969 return 1;
10970 }
10971 else
10972 {
10973 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
10974
10975 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
10976 ;
10977 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
10978 ;
10979 if(sourceBase == destBase)
10980 return 1;
10981 }
10982 }
10983 else if(source->__anon1._class && dest->__anon1._class && (dest->classObjectType == source->classObjectType || !dest->classObjectType) && (enumBaseType || (!source->__anon1._class->__anon1.registered || source->__anon1._class->__anon1.registered->type != 4) || (!dest->__anon1._class->__anon1.registered || dest->__anon1._class->__anon1.registered->type != 4)) && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, dest->__anon1._class->__anon1.registered))
10984 return 1;
10985 else
10986 {
10987 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && source->__anon1._class && source->__anon1._class->__anon1.registered && (dest->casted || (enumBaseType && dest->__anon1._class->__anon1.registered->type == 4 && (source->kind == 8 || source->__anon1._class->__anon1.registered->type != 4))))
10988 {
10989 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
10990 {
10991 return 1;
10992 }
10993 }
10994 }
10995 }
10996 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
10997 return 1;
10998 if(doConversion)
10999 {
11000 if(source->kind == 8)
11001 {
11002 struct __ecereNameSpace__ecere__com__Class * _class;
11003
11004 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11005 {
11006 struct __ecereNameSpace__ecere__com__Property * convert;
11007
11008 for(convert = _class->conversions.first; convert; convert = convert->next)
11009 {
11010 if(convert->memberAccess == 1 || _class->module == privateModule)
11011 {
11012 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11013
11014 if(!convert->dataType)
11015 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11016 if((!isConversionExploration || convert->dataType->kind == 8 || !strcmp(_class->name, "String")) && MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), (convert->dataType->kind == 8 && !strcmp(convert->dataTypeString, "String")) ? 1 : 0, convert->dataType->kind == 8, 0, 1, warnConst))
11017 {
11018 if(!conversions && !convert->Get)
11019 return 1;
11020 else if(conversions != (((void *)0)))
11021 {
11022 if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (dest->kind != 8 || dest->__anon1._class->__anon1.registered != _class->base))
11023 return 1;
11024 else
11025 {
11026 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11027
11028 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11029 return 1;
11030 }
11031 }
11032 }
11033 }
11034 }
11035 }
11036 }
11037 if(dest->kind == 8)
11038 {
11039 struct __ecereNameSpace__ecere__com__Class * _class;
11040
11041 for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11042 {
11043 struct __ecereNameSpace__ecere__com__Property * convert;
11044
11045 for(convert = _class->conversions.first; convert; convert = convert->next)
11046 {
11047 if(convert->memberAccess == 1 || _class->module == privateModule)
11048 {
11049 struct Type * constType = (((void *)0));
11050 unsigned int success = 0;
11051
11052 if(!convert->dataType)
11053 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11054 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
11055 {
11056 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11057
11058 constType = __extension__ ({
11059 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
11060
11061 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
11062 });
11063 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
11064 ptrType->constant = 1;
11065 }
11066 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
11067 {
11068 if(!conversions && !convert->Set)
11069 success = 1;
11070 else if(conversions != (((void *)0)))
11071 {
11072 if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (source->kind != 8 || source->__anon1._class->__anon1.registered != _class->base))
11073 success = 1;
11074 else
11075 {
11076 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
11077
11078 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
11079 success = 1;
11080 }
11081 }
11082 }
11083 if(constType)
11084 FreeType(constType);
11085 if(success)
11086 return 1;
11087 }
11088 }
11089 }
11090 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
11091 {
11092 if(!dest->__anon1._class->__anon1.registered->dataType)
11093 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
11094 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
11095 {
11096 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, dest->__anon1._class->__anon1.registered->dataType->kind == 8, 0, 0, warnConst))
11097 {
11098 return 1;
11099 }
11100 }
11101 }
11102 }
11103 if(source->kind == 8)
11104 {
11105 struct __ecereNameSpace__ecere__com__Class * _class;
11106
11107 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
11108 {
11109 struct __ecereNameSpace__ecere__com__Property * convert;
11110
11111 for(convert = _class->conversions.first; convert; convert = convert->next)
11112 {
11113 if(convert->memberAccess == 1 || _class->module == privateModule)
11114 {
11115 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
11116
11117 if(!convert->dataType)
11118 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
11119 if(convert->dataType != source && (!isConversionExploration || convert->dataType->kind == 8 || !strcmp(_class->name, "String")) && MatchTypes(convert->dataType, dest, conversions, (((void *)0)), (((void *)0)), convert->dataType->kind == 8, convert->dataType->kind == 8, 0, 1, warnConst))
11120 {
11121 if(!conversions && !convert->Get)
11122 return 1;
11123 else if(conversions != (((void *)0)))
11124 {
11125 if(_class->type == 3 && convert->dataType->kind == 8 && convert->dataType->__anon1._class && convert->dataType->__anon1._class->__anon1.registered && _class->base == convert->dataType->__anon1._class->__anon1.registered->base && (dest->kind != 8 || dest->__anon1._class->__anon1.registered != _class->base))
11126 return 1;
11127 else
11128 {
11129 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
11130
11131 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
11132 return 1;
11133 }
11134 }
11135 }
11136 }
11137 }
11138 }
11139 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
11140 {
11141 if(!source->__anon1._class->__anon1.registered->dataType)
11142 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
11143 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
11144 {
11145 if(MatchTypes(source->__anon1._class->__anon1.registered->dataType, dest, conversions, (((void *)0)), (((void *)0)), source->__anon1._class->__anon1.registered->dataType->kind == 8, source->__anon1._class->__anon1.registered->dataType->kind == 8, 0, 0, warnConst))
11146 return 1;
11147 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
11148 return 1;
11149 }
11150 }
11151 }
11152 }
11153 if(source->kind == 8 || source->kind == 19)
11154 ;
11155 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
11156 return 1;
11157 else if(dest->kind == 7 && source->kind == 6)
11158 return 1;
11159 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
11160 return 1;
11161 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
11162 return 1;
11163 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
11164 return 1;
11165 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
11166 return 1;
11167 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
11168 return 1;
11169 else if(source->kind == 15 && (dest->kind == 3 || dest->kind == 2 || dest->kind == 1 || source->kind == 24 || dest->kind == 5 || dest->kind == 4 || dest->kind == 22 || dest->kind == 23))
11170 return 1;
11171 else if(dest->kind == 15 && !isConversionExploration && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 5 || source->kind == 4 || source->kind == 22 || source->kind == 23))
11172 return 1;
11173 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && ((source->kind == 11 || (source->kind == 13 && source->__anon1.type->kind == 11) || source->kind == 16)))
11174 {
11175 struct Type * paramSource, * paramDest;
11176
11177 if(dest->kind == 16)
11178 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
11179 if(source->kind == 16)
11180 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
11181 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
11182 dest = dest->__anon1.type;
11183 if(source->kind == 13 && source->__anon1.type->kind == 11)
11184 source = source->__anon1.type;
11185 if(dest->kind == 16)
11186 dest = dest->__anon1.__anon3.method->dataType;
11187 if(source->kind == 16)
11188 source = source->__anon1.__anon3.method->dataType;
11189 paramSource = source->__anon1.__anon2.params.first;
11190 if(paramSource && paramSource->kind == 0)
11191 paramSource = (((void *)0));
11192 paramDest = dest->__anon1.__anon2.params.first;
11193 if(paramDest && paramDest->kind == 0)
11194 paramDest = (((void *)0));
11195 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11196 {
11197 if(!paramDest || (!(paramDest->kind == 13 && paramDest->__anon1.type && paramDest->__anon1.type->kind == 0) && (paramDest->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, paramDest->__anon1._class->__anon1.registered))))
11198 {
11199 if(paramDest && paramDest->kind == 8)
11200 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
11201 else
11202 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
11203 return 0;
11204 }
11205 paramDest = paramDest->next;
11206 }
11207 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
11208 {
11209 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
11210 {
11211 if(dest->__anon1.__anon2.thisClass)
11212 {
11213 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
11214 {
11215 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11216 return 0;
11217 }
11218 }
11219 else
11220 {
11221 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
11222 {
11223 if(owningClassDest)
11224 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
11225 else
11226 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
11227 return 0;
11228 }
11229 }
11230 paramSource = paramSource->next;
11231 }
11232 else
11233 {
11234 if(dest->__anon1.__anon2.thisClass)
11235 {
11236 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
11237 {
11238 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
11239 return 0;
11240 }
11241 }
11242 else
11243 {
11244 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
11245 {
11246 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
11247 return 0;
11248 }
11249 }
11250 }
11251 }
11252 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11253 {
11254 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
11255 return 0;
11256 }
11257 else
11258 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
11259 for(; paramDest; paramDest = paramDest->next)
11260 {
11261 if(!paramSource)
11262 {
11263 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
11264 return 0;
11265 }
11266 {
11267 struct Type * paramDestType = paramDest;
11268 struct Type * paramSourceType = paramSource;
11269 struct Type * type = paramDestType;
11270
11271 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
11272 {
11273 int id = 0;
11274 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
11275 struct __ecereNameSpace__ecere__com__Class * sClass;
11276
11277 for(sClass = owningClassSource; sClass; sClass = sClass->base)
11278 {
11279 id = 0;
11280 if(sClass->templateClass)
11281 sClass = sClass->templateClass;
11282 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
11283 {
11284 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
11285 {
11286 for(sClass = sClass->base; sClass; sClass = sClass->base)
11287 {
11288 if(sClass->templateClass)
11289 sClass = sClass->templateClass;
11290 id += sClass->templateParams.count;
11291 }
11292 break;
11293 }
11294 id++;
11295 }
11296 if(curParam)
11297 break;
11298 }
11299 if(curParam)
11300 {
11301 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
11302
11303 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
11304 }
11305 }
11306 if(!MatchTypes(paramDestType, paramSourceType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst) && (!acceptReversedParams || !MatchTypes(paramSourceType, paramDestType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst)))
11307 {
11308 char type[1024];
11309
11310 type[0] = 0;
11311 PrintType(paramDest, type, 0, 1);
11312 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
11313 if(paramDestType != paramDest)
11314 FreeType(paramDestType);
11315 return 0;
11316 }
11317 if(paramDestType != paramDest)
11318 FreeType(paramDestType);
11319 }
11320 paramSource = paramSource->next;
11321 }
11322 if(paramSource)
11323 {
11324 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
11325 return 0;
11326 }
11327 return 1;
11328 }
11329 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
11330 {
11331 return 1;
11332 }
11333 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
11334 {
11335 if(!(dest->__anon1.type && dest->__anon1.type->kind == 13 && source->__anon1.type->kind == 8 && source->__anon1.type->__anon1._class && source->__anon1.type->__anon1._class->__anon1.registered && (source->__anon1.type->__anon1._class->__anon1.registered->type != 0 && source->__anon1.type->__anon1._class->__anon1.registered->type != 5) && !source->__anon1.type->byReference))
11336 {
11337 ComputeTypeSize(source->__anon1.type);
11338 ComputeTypeSize(dest->__anon1.type);
11339 if(source->__anon1.type->size == dest->__anon1.type->size && MatchTypes(source->__anon1.type, dest->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
11340 return 1;
11341 }
11342 }
11343 }
11344 return 0;
11345 }
11346
11347 void ComputeInstantiation(struct Expression * exp)
11348 {
11349 struct Instantiation * inst = exp->__anon1.instance;
11350 struct MembersInit * members;
11351 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11352 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11353 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11354 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11355 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11356 int subMemberStackPos = 0;
11357 uint64 bits = 0;
11358
11359 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11360 {
11361 if(inst->data)
11362 return ;
11363 if(_class->type == 0 || _class->type == 5)
11364 {
11365 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11366 if(_class->type == 0)
11367 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11368 }
11369 else
11370 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11371 }
11372 if(inst->members)
11373 {
11374 for(members = (*inst->members).first; members; members = members->next)
11375 {
11376 switch(members->type)
11377 {
11378 case 0:
11379 {
11380 if(members->__anon1.dataMembers)
11381 {
11382 struct MemberInit * member;
11383
11384 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11385 {
11386 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11387 unsigned int found = 0;
11388 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11389 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11390 unsigned int dataMemberOffset;
11391
11392 if(!ident)
11393 {
11394 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11395 if(curMember)
11396 {
11397 if(curMember->isProperty)
11398 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11399 else
11400 {
11401 dataMember = curMember;
11402 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11403 if(_class->type == 0)
11404 dataMemberOffset += _class->base->structSize;
11405 }
11406 found = 1;
11407 }
11408 }
11409 else
11410 {
11411 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11412 if(prop)
11413 {
11414 found = 1;
11415 if(prop->memberAccess == 1)
11416 {
11417 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11418 curClass = prop->_class;
11419 }
11420 }
11421 else
11422 {
11423 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11424 int _subMemberStackPos = 0;
11425
11426 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11427 if(dataMember)
11428 {
11429 found = 1;
11430 if(dataMember->memberAccess == 1)
11431 {
11432 curMember = dataMember;
11433 curClass = dataMember->_class;
11434 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11435 subMemberStackPos = _subMemberStackPos;
11436 }
11437 }
11438 }
11439 }
11440 if(found && member->initializer && member->initializer->type == 0)
11441 {
11442 struct Expression * value = member->initializer->__anon1.exp;
11443 struct Type * type = (((void *)0));
11444 unsigned int deepMember = 0;
11445
11446 if(prop)
11447 {
11448 type = prop->dataType;
11449 }
11450 else if(dataMember)
11451 {
11452 if(!dataMember->dataType)
11453 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11454 type = dataMember->dataType;
11455 }
11456 if(ident && ident->next)
11457 {
11458 deepMember = 1;
11459 for(ident = ident->next; ident && type; ident = ident->next)
11460 {
11461 if(type->kind == 8)
11462 {
11463 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11464 if(prop)
11465 type = prop->dataType;
11466 else
11467 {
11468 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11469 if(dataMember)
11470 type = dataMember->dataType;
11471 }
11472 }
11473 else if(type->kind == 9 || type->kind == 10)
11474 {
11475 struct Type * memberType;
11476
11477 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11478 {
11479 if(!strcmp(memberType->name, ident->string))
11480 {
11481 type = memberType;
11482 break;
11483 }
11484 }
11485 }
11486 }
11487 }
11488 if(value)
11489 {
11490 FreeType(value->destType);
11491 value->destType = type;
11492 if(type)
11493 type->refCount++;
11494 ComputeExpression(value);
11495 }
11496 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11497 {
11498 if(type->kind == 8)
11499 {
11500 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11501
11502 if(_class && (_class->type == 2 || _class->type == 3 || _class->type == 4))
11503 {
11504 if(!_class->dataType)
11505 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11506 type = _class->dataType;
11507 }
11508 }
11509 if(dataMember)
11510 {
11511 void * ptr = inst->data + dataMemberOffset;
11512
11513 if(value->type == 2)
11514 {
11515 switch(type->kind)
11516 {
11517 case 3:
11518 {
11519 GetInt(value, (int *)ptr);
11520 break;
11521 }
11522 case 4:
11523 {
11524 GetInt64(value, (long long *)ptr);
11525 break;
11526 }
11527 case 22:
11528 {
11529 GetIntPtr(value, (intptr_t *)ptr);
11530 break;
11531 }
11532 case 23:
11533 {
11534 GetIntSize(value, (ssize_t *)ptr);
11535 break;
11536 }
11537 case 6:
11538 {
11539 GetFloat(value, (float *)ptr);
11540 break;
11541 }
11542 case 7:
11543 {
11544 GetDouble(value, (double *)ptr);
11545 break;
11546 }
11547 }
11548 }
11549 else if(value->type == 1)
11550 {
11551 if(type->kind == 8)
11552 {
11553 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11554
11555 if(_class->type == 1)
11556 {
11557 ComputeTypeSize(type);
11558 if(value->__anon1.instance->data)
11559 memcpy(ptr, value->__anon1.instance->data, type->size);
11560 }
11561 }
11562 }
11563 }
11564 else if(prop && prop->Set != (void *)(intptr_t)1)
11565 {
11566 if(value->type == 1 && value->__anon1.instance->data)
11567 {
11568 if(type->kind == 8)
11569 {
11570 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11571
11572 if(_class && (_class->type != 0 || __ecereNameSpace__ecere__com__eClass_IsDerived(((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)value->__anon1.instance->data))->_class, _class)))
11573 {
11574 void (* Set)(void *, void *) = (void *)prop->Set;
11575
11576 Set(inst->data, value->__anon1.instance->data);
11577 PopulateInstance(inst);
11578 }
11579 }
11580 }
11581 else if(value->type == 2)
11582 {
11583 switch(type->kind)
11584 {
11585 case 7:
11586 {
11587 void (* Set)(void *, double) = (void *)prop->Set;
11588
11589 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11590 break;
11591 }
11592 case 6:
11593 {
11594 void (* Set)(void *, float) = (void *)prop->Set;
11595
11596 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11597 break;
11598 }
11599 case 3:
11600 {
11601 void (* Set)(void *, int) = (void *)prop->Set;
11602
11603 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11604 break;
11605 }
11606 case 4:
11607 {
11608 void (* Set)(void *, long long) = (void *)prop->Set;
11609
11610 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11611 break;
11612 }
11613 case 22:
11614 {
11615 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11616
11617 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11618 break;
11619 }
11620 case 23:
11621 {
11622 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11623
11624 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11625 break;
11626 }
11627 }
11628 }
11629 else if(value->type == 3)
11630 {
11631 char temp[1024];
11632
11633 ReadString(temp, value->__anon1.__anon2.string);
11634 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11635 }
11636 }
11637 }
11638 else if(!deepMember && type && _class->type == 3)
11639 {
11640 if(prop)
11641 {
11642 if(value->type == 2)
11643 {
11644 if(type->kind == 8)
11645 {
11646 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11647
11648 if(_class->type == 3)
11649 {
11650 if(!_class->dataType)
11651 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11652 type = _class->dataType;
11653 }
11654 }
11655 switch(type->kind)
11656 {
11657 case 6:
11658 {
11659 float fValue;
11660 float (* Set)(float) = (void *)prop->Set;
11661
11662 GetFloat(member->initializer->__anon1.exp, &fValue);
11663 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11664 exp->type = 2;
11665 break;
11666 }
11667 case 7:
11668 {
11669 double dValue;
11670 double (* Set)(double) = (void *)prop->Set;
11671
11672 GetDouble(member->initializer->__anon1.exp, &dValue);
11673 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11674 exp->type = 2;
11675 break;
11676 }
11677 }
11678 }
11679 }
11680 }
11681 else if(!deepMember && type && _class->type == 2)
11682 {
11683 if(prop)
11684 {
11685 if(value->type == 1 && value->__anon1.instance->data)
11686 {
11687 unsigned int (* Set)(void *) = (void *)prop->Set;
11688
11689 bits = Set(value->__anon1.instance->data);
11690 }
11691 else if(value->type == 2)
11692 {
11693 }
11694 }
11695 else if(dataMember)
11696 {
11697 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11698 struct Type * type;
11699 uint64 part = 0;
11700
11701 bits = (bits & ~bitMember->mask);
11702 if(!bitMember->dataType)
11703 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11704 type = bitMember->dataType;
11705 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11706 {
11707 if(!type->__anon1._class->__anon1.registered->dataType)
11708 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11709 type = type->__anon1._class->__anon1.registered->dataType;
11710 }
11711 switch(type->kind)
11712 {
11713 case 24:
11714 case 1:
11715 {
11716 unsigned char v;
11717
11718 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11719 part = (uint64)v;
11720 break;
11721 }
11722 case 2:
11723 {
11724 unsigned short v;
11725
11726 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11727 part = (uint64)v;
11728 break;
11729 }
11730 case 3:
11731 case 5:
11732 {
11733 unsigned int v;
11734
11735 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11736 part = (uint64)v;
11737 break;
11738 }
11739 case 4:
11740 {
11741 uint64 v;
11742
11743 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11744 part = v;
11745 break;
11746 }
11747 case 22:
11748 {
11749 uintptr_t v;
11750
11751 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11752 part = (uint64)v;
11753 break;
11754 }
11755 case 23:
11756 {
11757 size_t v;
11758
11759 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11760 part = (uint64)v;
11761 break;
11762 }
11763 }
11764 bits |= part << bitMember->pos;
11765 }
11766 }
11767 }
11768 else
11769 {
11770 if(_class && _class->type == 3)
11771 {
11772 ComputeExpression(member->initializer->__anon1.exp);
11773 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11774 exp->type = 2;
11775 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11776 }
11777 }
11778 }
11779 }
11780 break;
11781 }
11782 }
11783 }
11784 }
11785 if(_class && _class->type == 2)
11786 {
11787 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11788 exp->type = 2;
11789 }
11790 if(exp->type != 1)
11791 {
11792 FreeInstance(inst);
11793 }
11794 }
11795
11796 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11797 {
11798 if(exp->__anon1.op.op == SIZEOF)
11799 {
11800 FreeExpContents(exp);
11801 exp->type = 2;
11802 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11803 }
11804 else
11805 {
11806 if(!exp->__anon1.op.exp1)
11807 {
11808 switch(exp->__anon1.op.op)
11809 {
11810 case '+':
11811 {
11812 struct Expression * exp2 = exp->__anon1.op.exp2;
11813
11814 exp->__anon1.op.exp2 = (((void *)0));
11815 FreeExpContents(exp);
11816 FreeType(exp->expType);
11817 FreeType(exp->destType);
11818 *exp = *exp2;
11819 ((exp2 ? __extension__ ({
11820 void * __ecerePtrToDelete = (exp2);
11821
11822 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
11823 }) : 0), exp2 = 0);
11824 break;
11825 }
11826 case '-':
11827 if(op1->ops.Neg)
11828 {
11829 FreeExpContents(exp);
11830 op1->ops.Neg(exp, op1);
11831 }
11832 break;
11833 case '~':
11834 if(op1->ops.BitNot)
11835 {
11836 FreeExpContents(exp);
11837 op1->ops.BitNot(exp, op1);
11838 }
11839 break;
11840 case '!':
11841 if(op1->ops.Not)
11842 {
11843 FreeExpContents(exp);
11844 op1->ops.Not(exp, op1);
11845 }
11846 break;
11847 }
11848 }
11849 else
11850 {
11851 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11852 {
11853 if(Promote(op2, op1->kind, op1->type->isSigned))
11854 op2->kind = op1->kind, op2->ops = op1->ops;
11855 else if(Promote(op1, op2->kind, op2->type->isSigned))
11856 op1->kind = op2->kind, op1->ops = op2->ops;
11857 }
11858 switch(exp->__anon1.op.op)
11859 {
11860 case '+':
11861 if(op1->ops.Add)
11862 {
11863 FreeExpContents(exp);
11864 op1->ops.Add(exp, op1, op2);
11865 }
11866 break;
11867 case '-':
11868 if(op1->ops.Sub)
11869 {
11870 FreeExpContents(exp);
11871 op1->ops.Sub(exp, op1, op2);
11872 }
11873 break;
11874 case '*':
11875 if(op1->ops.Mul)
11876 {
11877 FreeExpContents(exp);
11878 op1->ops.Mul(exp, op1, op2);
11879 }
11880 break;
11881 case '/':
11882 if(op1->ops.Div)
11883 {
11884 FreeExpContents(exp);
11885 op1->ops.Div(exp, op1, op2);
11886 }
11887 break;
11888 case '%':
11889 if(op1->ops.Mod)
11890 {
11891 FreeExpContents(exp);
11892 op1->ops.Mod(exp, op1, op2);
11893 }
11894 break;
11895 case '&':
11896 if(exp->__anon1.op.exp2)
11897 {
11898 if(op1->ops.BitAnd)
11899 {
11900 FreeExpContents(exp);
11901 op1->ops.BitAnd(exp, op1, op2);
11902 }
11903 }
11904 break;
11905 case '|':
11906 if(op1->ops.BitOr)
11907 {
11908 FreeExpContents(exp);
11909 op1->ops.BitOr(exp, op1, op2);
11910 }
11911 break;
11912 case '^':
11913 if(op1->ops.BitXor)
11914 {
11915 FreeExpContents(exp);
11916 op1->ops.BitXor(exp, op1, op2);
11917 }
11918 break;
11919 case LEFT_OP:
11920 if(op1->ops.LShift)
11921 {
11922 FreeExpContents(exp);
11923 op1->ops.LShift(exp, op1, op2);
11924 }
11925 break;
11926 case RIGHT_OP:
11927 if(op1->ops.RShift)
11928 {
11929 FreeExpContents(exp);
11930 op1->ops.RShift(exp, op1, op2);
11931 }
11932 break;
11933 case EQ_OP:
11934 if(op1->ops.Equ)
11935 {
11936 FreeExpContents(exp);
11937 op1->ops.Equ(exp, op1, op2);
11938 }
11939 break;
11940 case NE_OP:
11941 if(op1->ops.Nqu)
11942 {
11943 FreeExpContents(exp);
11944 op1->ops.Nqu(exp, op1, op2);
11945 }
11946 break;
11947 case AND_OP:
11948 if(op1->ops.And)
11949 {
11950 FreeExpContents(exp);
11951 op1->ops.And(exp, op1, op2);
11952 }
11953 break;
11954 case OR_OP:
11955 if(op1->ops.Or)
11956 {
11957 FreeExpContents(exp);
11958 op1->ops.Or(exp, op1, op2);
11959 }
11960 break;
11961 case '>':
11962 if(op1->ops.Grt)
11963 {
11964 FreeExpContents(exp);
11965 op1->ops.Grt(exp, op1, op2);
11966 }
11967 break;
11968 case '<':
11969 if(op1->ops.Sma)
11970 {
11971 FreeExpContents(exp);
11972 op1->ops.Sma(exp, op1, op2);
11973 }
11974 break;
11975 case GE_OP:
11976 if(op1->ops.GrtEqu)
11977 {
11978 FreeExpContents(exp);
11979 op1->ops.GrtEqu(exp, op1, op2);
11980 }
11981 break;
11982 case LE_OP:
11983 if(op1->ops.SmaEqu)
11984 {
11985 FreeExpContents(exp);
11986 op1->ops.SmaEqu(exp, op1, op2);
11987 }
11988 break;
11989 }
11990 }
11991 }
11992 }
11993
11994 void ApplyAnyObjectLogic(struct Expression * e)
11995 {
11996 struct Type * destType = e->destType;
11997
11998 if(destType && (destType->classObjectType == 3))
11999 {
12000 if(e && e->expType)
12001 {
12002 struct Type * type = e->expType;
12003 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
12004
12005 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
12006 {
12007 _class = type->__anon1._class->__anon1.registered;
12008 }
12009 else if(type->kind == 19)
12010 {
12011 _class = FindClass("ecere::com::Class")->__anon1.registered;
12012 }
12013 else
12014 {
12015 char string[1024] = "";
12016 struct Symbol * classSym;
12017
12018 PrintTypeNoConst(type, string, 0, 1);
12019 classSym = FindClass(string);
12020 if(classSym)
12021 _class = classSym->__anon1.registered;
12022 }
12023 if((_class && (_class->type == 4 || _class->type == 3 || _class->type == 2 || _class->type == 1000) && strcmp(_class->fullName, "class") && strcmp(_class->fullName, "uintptr") && strcmp(_class->fullName, "intptr")) || (!e->expType->classObjectType && (((type->kind != 13 && type->kind != 22 && type->kind != 19 && (type->kind != 8 || !type->__anon1._class || !type->__anon1._class->__anon1.registered || type->__anon1._class->__anon1.registered->type == 1))) || destType->byReference)))
12024 {
12025 if(!_class || strcmp(_class->fullName, "char *"))
12026 {
12027 struct Expression * checkedExp = e, * newExp;
12028
12029 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12030 {
12031 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12032 {
12033 if(checkedExp->type == 23)
12034 {
12035 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12036 }
12037 else
12038 checkedExp = (*checkedExp->__anon1.list).last;
12039 }
12040 else if(checkedExp->type == 11)
12041 checkedExp = checkedExp->__anon1.cast.exp;
12042 }
12043 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
12044 {
12045 newExp = checkedExp->__anon1.op.exp2;
12046 checkedExp->__anon1.op.exp2 = (((void *)0));
12047 FreeExpContents(checkedExp);
12048 if(e->expType && e->expType->passAsTemplate)
12049 {
12050 char size[100];
12051
12052 ComputeTypeSize(e->expType);
12053 sprintf(size, "%d", e->expType->size);
12054 newExp = MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), newExp), '+', MkExpCall(MkExpIdentifier(MkIdentifier("__ENDIAN_PAD")), MkListOne(MkExpConstant(size))))));
12055 }
12056 ReplaceExpContents(checkedExp, newExp);
12057 e->byReference = 1;
12058 }
12059 else if(!e->byReference || (_class && _class->type == 5))
12060 {
12061 struct Expression * checkedExp;
12062
12063 {
12064 unsigned int hasAddress = e->type == 0 || (e->type == 8 && e->__anon1.member.memberType == 3) || (e->type == 9 && e->__anon1.member.memberType == 3) || (e->type == 4 && !e->__anon1.op.exp1 && e->__anon1.op.op == '*') || e->type == 6;
12065
12066 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
12067 {
12068 struct Context * context = PushContext();
12069 struct Declarator * decl;
12070 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12071 char typeString[1024];
12072 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12073
12074 typeString[0] = '\0';
12075 *newExp = *e;
12076 newExp->prev = (((void *)0));
12077 newExp->next = (((void *)0));
12078 newExp->expType = (((void *)0));
12079 PrintTypeNoConst(e->expType, typeString, 0, 1);
12080 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12081 newExp->destType = ProcessType(specs, decl);
12082 curContext = context;
12083 if(curCompound)
12084 {
12085 char name[100];
12086 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
12087
12088 e->type = 23;
12089 sprintf(name, "__internalValue%03X", internalValueCounter++);
12090 if(!curCompound->__anon1.compound.declarations)
12091 curCompound->__anon1.compound.declarations = MkList();
12092 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
12093 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
12094 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
12095 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
12096 }
12097 else
12098 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
12099 {
12100 struct Type * type = e->destType;
12101
12102 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12103 CopyTypeInto(e->destType, type);
12104 e->destType->refCount = 1;
12105 e->destType->classObjectType = 0;
12106 FreeType(type);
12107 }
12108 e->__anon1.compound->__anon1.compound.context = context;
12109 PopContext(context);
12110 curContext = context->parent;
12111 }
12112 }
12113 checkedExp = e;
12114 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
12115 {
12116 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
12117 {
12118 if(checkedExp->type == 23)
12119 {
12120 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12121 }
12122 else
12123 checkedExp = (*checkedExp->__anon1.list).last;
12124 }
12125 else if(checkedExp->type == 11)
12126 checkedExp = checkedExp->__anon1.cast.exp;
12127 }
12128 {
12129 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12130
12131 *operand = *checkedExp;
12132 __ecereMethod_Expression_Clear(checkedExp);
12133 checkedExp->destType = ProcessTypeString("void *", 0);
12134 checkedExp->expType = checkedExp->destType;
12135 checkedExp->destType->refCount++;
12136 checkedExp->type = 4;
12137 checkedExp->__anon1.op.op = '&';
12138 checkedExp->__anon1.op.exp1 = (((void *)0));
12139 checkedExp->__anon1.op.exp2 = operand;
12140 }
12141 }
12142 }
12143 }
12144 }
12145 }
12146 {
12147 }
12148 if((!destType || destType->kind == 14 || destType->kind == 0) && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && (e->expType->byReference || (e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && (e->expType->__anon1._class->__anon1.registered->type == 2 || e->expType->__anon1._class->__anon1.registered->type == 4 || e->expType->__anon1._class->__anon1.registered->type == 3))))
12149 {
12150 if(e->expType->classObjectType && destType && destType->classObjectType)
12151 {
12152 return ;
12153 }
12154 else
12155 {
12156 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12157
12158 *thisExp = *e;
12159 thisExp->prev = (((void *)0));
12160 thisExp->next = (((void *)0));
12161 __ecereMethod_Expression_Clear(e);
12162 e->type = 5;
12163 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
12164 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
12165 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
12166 {
12167 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12168 CopyTypeInto(e->expType, thisExp->expType);
12169 e->expType->byReference = 0;
12170 e->expType->refCount = 1;
12171 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && (e->expType->__anon1._class->__anon1.registered->type == 2 || e->expType->__anon1._class->__anon1.registered->type == 4 || e->expType->__anon1._class->__anon1.registered->type == 3))
12172 {
12173 e->expType->classObjectType = 0;
12174 }
12175 }
12176 }
12177 }
12178 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
12179 {
12180 if(destType->kind == 14)
12181 {
12182 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
12183 }
12184 else if(!(destType->truth && e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && e->expType->__anon1._class->__anon1.registered->type == 1))
12185 {
12186 unsigned int byReference = e->expType->byReference;
12187 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12188 struct Declarator * decl;
12189 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12190 char typeString[1024];
12191 struct Type * type;
12192 int backupClassObjectType;
12193 unsigned int backupByReference;
12194
12195 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
12196 type = e->expType;
12197 else
12198 type = destType;
12199 backupClassObjectType = type->classObjectType;
12200 backupByReference = type->byReference;
12201 type->classObjectType = 0;
12202 type->byReference = 0;
12203 typeString[0] = '\0';
12204 PrintType(type, typeString, 0, 1);
12205 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
12206 type->classObjectType = backupClassObjectType;
12207 type->byReference = backupByReference;
12208 *thisExp = *e;
12209 thisExp->prev = (((void *)0));
12210 thisExp->next = (((void *)0));
12211 __ecereMethod_Expression_Clear(e);
12212 if((type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 1000 || type->__anon1._class->__anon1.registered->type == 2 || type->__anon1._class->__anon1.registered->type == 4 || type->__anon1._class->__anon1.registered->type == 3)) || (type->kind != 13 && type->kind != 22 && type->kind != 12 && type->kind != 8) || (!destType->byReference && byReference && (destType->kind != 13 || type->kind != 13)))
12213 {
12214 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
12215 struct Type * t;
12216
12217 destType->refCount++;
12218 e->type = 4;
12219 e->__anon1.op.op = '*';
12220 e->__anon1.op.exp1 = (((void *)0));
12221 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
12222 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12223 CopyTypeInto(t, thisExp->destType);
12224 t->passAsTemplate = 0;
12225 FreeType(thisExp->destType);
12226 thisExp->destType = t;
12227 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12228 CopyTypeInto(t, destType);
12229 t->passAsTemplate = passAsTemplate;
12230 FreeType(destType);
12231 destType = t;
12232 destType->refCount = 0;
12233 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12234 CopyTypeInto(e->expType, type);
12235 if(type->passAsTemplate)
12236 {
12237 e->expType->classObjectType = 0;
12238 e->expType->passAsTemplate = 0;
12239 }
12240 e->expType->byReference = 0;
12241 e->expType->refCount = 1;
12242 }
12243 else
12244 {
12245 e->type = 11;
12246 e->__anon1.cast.typeName = MkTypeName(specs, decl);
12247 e->__anon1.cast.exp = thisExp;
12248 e->byReference = 1;
12249 e->expType = type;
12250 type->refCount++;
12251 }
12252 if(e->destType)
12253 FreeType(e->destType);
12254 e->destType = destType;
12255 destType->refCount++;
12256 }
12257 }
12258 }
12259
12260 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
12261 {
12262 struct __ecereNameSpace__ecere__com__Class * _class;
12263 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
12264
12265 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->modules.first; subModule; subModule = subModule->next)
12266 ComputeModuleClasses(subModule->data);
12267 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->classes.first; _class; _class = _class->next)
12268 ComputeClassMembers(_class, 0);
12269 }
12270
12271 int ComputeTypeSize(struct Type * type)
12272 {
12273 unsigned int size = type ? type->size : 0;
12274
12275 if(!size && type && !type->computing)
12276 {
12277 type->computing = 1;
12278 switch(type->kind)
12279 {
12280 case 24:
12281 type->alignment = size = sizeof(char);
12282 break;
12283 case 1:
12284 type->alignment = size = sizeof(char);
12285 break;
12286 case 3:
12287 type->alignment = size = sizeof(int);
12288 break;
12289 case 4:
12290 type->alignment = size = sizeof(long long);
12291 break;
12292 case 22:
12293 type->alignment = size = targetBits / 8;
12294 type->pointerAlignment = 1;
12295 break;
12296 case 23:
12297 type->alignment = size = targetBits / 8;
12298 type->pointerAlignment = 1;
12299 break;
12300 case 5:
12301 type->alignment = size = sizeof(long);
12302 break;
12303 case 2:
12304 type->alignment = size = sizeof(short);
12305 break;
12306 case 6:
12307 type->alignment = size = sizeof(float);
12308 break;
12309 case 7:
12310 type->alignment = size = sizeof(double);
12311 break;
12312 case 8:
12313 {
12314 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
12315
12316 if(_class && _class->type == 1)
12317 {
12318 ComputeClassMembers(_class, 0);
12319 type->alignment = _class->structAlignment;
12320 type->pointerAlignment = (unsigned int)_class->pointerAlignment;
12321 size = _class->structSize;
12322 if(type->alignment && size % type->alignment)
12323 size += type->alignment - (size % type->alignment);
12324 }
12325 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
12326 {
12327 if(!_class->dataType)
12328 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12329 size = type->alignment = ComputeTypeSize(_class->dataType);
12330 }
12331 else
12332 {
12333 size = type->alignment = targetBits / 8;
12334 type->pointerAlignment = 1;
12335 }
12336 break;
12337 }
12338 case 13:
12339 case 19:
12340 size = type->alignment = targetBits / 8;
12341 type->pointerAlignment = 1;
12342 break;
12343 case 12:
12344 if(type->__anon1.__anon4.arraySizeExp)
12345 {
12346 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
12347 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
12348 if(!type->__anon1.__anon4.arraySizeExp->isConstant || (type->__anon1.__anon4.arraySizeExp->expType->kind != 3 && type->__anon1.__anon4.arraySizeExp->expType->kind != 2 && type->__anon1.__anon4.arraySizeExp->expType->kind != 1 && type->__anon1.__anon4.arraySizeExp->expType->kind != 5 && type->__anon1.__anon4.arraySizeExp->expType->kind != 4 && type->__anon1.__anon4.arraySizeExp->expType->kind != 23 && type->__anon1.__anon4.arraySizeExp->expType->kind != 22 && type->__anon1.__anon4.arraySizeExp->expType->kind != 15 && (type->__anon1.__anon4.arraySizeExp->expType->kind != 8 || !type->__anon1.__anon4.arraySizeExp->expType->__anon1._class->__anon1.registered || type->__anon1.__anon4.arraySizeExp->expType->__anon1._class->__anon1.registered->type != 4)))
12349 {
12350 struct Location oldLoc = yylloc;
12351 char expression[10240];
12352
12353 expression[0] = '\0';
12354 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
12355 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
12356 if(inCompiler)
12357 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
12358 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
12359 yylloc = oldLoc;
12360 }
12361 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
12362 }
12363 else if(type->__anon1.__anon4.enumClass)
12364 {
12365 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
12366 {
12367 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
12368 }
12369 else
12370 type->__anon1.__anon4.arraySize = 0;
12371 }
12372 else
12373 {
12374 type->__anon1.__anon4.arraySize = 0;
12375 }
12376 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
12377 if(type->__anon1.type)
12378 {
12379 type->alignment = type->__anon1.type->alignment;
12380 type->pointerAlignment = type->__anon1.type->pointerAlignment;
12381 }
12382 break;
12383 case 9:
12384 {
12385 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12386 {
12387 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12388
12389 if(symbol && symbol->type)
12390 {
12391 ComputeTypeSize(symbol->type);
12392 size = symbol->type->size;
12393 }
12394 }
12395 else
12396 {
12397 struct Type * member;
12398
12399 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12400 {
12401 int __simpleStruct0, __simpleStruct1;
12402 unsigned int addSize = ComputeTypeSize(member);
12403
12404 member->offset = size;
12405 if(member->alignment && size % member->alignment)
12406 member->offset += member->alignment - (size % member->alignment);
12407 size = member->offset;
12408 if(member->pointerAlignment && type->size <= 4)
12409 type->pointerAlignment = 1;
12410 else if(!member->pointerAlignment && member->alignment >= 8)
12411 type->pointerAlignment = 0;
12412 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12413 size += addSize;
12414 }
12415 if(type->alignment && size % type->alignment)
12416 size += type->alignment - (size % type->alignment);
12417 }
12418 break;
12419 }
12420 case 10:
12421 {
12422 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
12423 {
12424 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
12425
12426 if(symbol && symbol->type)
12427 {
12428 ComputeTypeSize(symbol->type);
12429 size = symbol->type->size;
12430 type->alignment = symbol->type->alignment;
12431 }
12432 }
12433 else
12434 {
12435 struct Type * member;
12436
12437 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
12438 {
12439 int __simpleStruct0, __simpleStruct1;
12440 unsigned int addSize = ComputeTypeSize(member);
12441
12442 member->offset = size;
12443 if(member->alignment && size % member->alignment)
12444 member->offset += member->alignment - (size % member->alignment);
12445 size = member->offset;
12446 if(member->pointerAlignment && type->size <= 4)
12447 type->pointerAlignment = 1;
12448 else if(!member->pointerAlignment && member->alignment >= 8)
12449 type->pointerAlignment = 0;
12450 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
12451 size = ((size > addSize) ? size : addSize);
12452 }
12453 if(type->alignment && size % type->alignment)
12454 size += type->alignment - (size % type->alignment);
12455 }
12456 break;
12457 }
12458 case 20:
12459 {
12460 struct TemplateParameter * param = type->__anon1.templateParameter;
12461 struct Type * baseType = ProcessTemplateParameterType(param);
12462
12463 if(baseType)
12464 {
12465 size = ComputeTypeSize(baseType);
12466 type->alignment = baseType->alignment;
12467 type->pointerAlignment = baseType->pointerAlignment;
12468 }
12469 else
12470 type->alignment = size = sizeof(uint64);
12471 break;
12472 }
12473 case 15:
12474 {
12475 type->alignment = size = sizeof(enum
12476 {
12477 test
12478 });
12479 break;
12480 }
12481 case 21:
12482 {
12483 type->alignment = size = targetBits / 8;
12484 type->pointerAlignment = 1;
12485 break;
12486 }
12487 }
12488 type->size = size;
12489 type->computing = 0;
12490 }
12491 return size;
12492 }
12493
12494 struct External * _DeclareStruct(struct External * neededBy, const char * name, unsigned int skipNoHead, unsigned int needDereference, unsigned int fwdDecl)
12495 {
12496 struct External * external = (((void *)0));
12497 struct Symbol * classSym = FindClass(name);
12498 struct __ecereNameSpace__ecere__sys__OldList * curDeclarations = (((void *)0));
12499
12500 if(!inCompiler || !classSym)
12501 return (((void *)0));
12502 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
12503 return (((void *)0));
12504 if(!classSym->__anon1.registered || (classSym->__anon1.registered->type == 0 && classSym->__anon1.registered->structSize && classSym->__anon1.registered->base && classSym->__anon1.registered->base->base))
12505 _DeclareStruct(neededBy, "ecere::com::Instance", 0, 1, fwdDecl);
12506 external = classSym->__anon2.__anon1.structExternal;
12507 if(external && external->__anon1.declaration)
12508 {
12509 struct Specifier * spec;
12510
12511 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12512 if(spec->type == 3 || spec->type == 4)
12513 {
12514 curDeclarations = spec->__anon1.__anon2.definitions;
12515 break;
12516 }
12517 }
12518 if(classSym->__anon1.registered && !classSym->declaring && classSym->imported && (!classSym->declaredStructSym || (classSym->__anon1.registered->type == 5 && !skipNoHead && external && !curDeclarations)))
12519 {
12520 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12521 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
12522 char structName[1024];
12523 unsigned int addedPadding = 0;
12524 struct Specifier * curSpec = (((void *)0));
12525
12526 classSym->declaring++;
12527 if(strchr(classSym->string, '<'))
12528 {
12529 if(classSym->__anon1.registered->templateClass)
12530 external = _DeclareStruct(neededBy, classSym->__anon1.registered->templateClass->fullName, skipNoHead, needDereference, fwdDecl);
12531 classSym->declaring--;
12532 return external;
12533 }
12534 structName[0] = 0;
12535 FullClassNameCat(structName, name, 0);
12536 classSym->declaredStructSym = 1;
12537 if(!external || (classSym->__anon1.registered->type == 5 && !skipNoHead && !curDeclarations))
12538 {
12539 unsigned int add = 0;
12540
12541 if(!external)
12542 {
12543 external = MkExternalDeclaration((((void *)0)));
12544 classSym->__anon2.__anon1.structExternal = external;
12545 external->symbol = classSym;
12546 add = 1;
12547 }
12548 if(!skipNoHead)
12549 {
12550 declarations = MkList();
12551 AddMembers(external, declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
12552 }
12553 if(external->__anon1.declaration)
12554 {
12555 struct Specifier * spec;
12556
12557 for(spec = external->__anon1.declaration->__anon1.__anon1.specifiers ? (*external->__anon1.declaration->__anon1.__anon1.specifiers).first : (((void *)0)); spec; spec = spec->next)
12558 if(spec->type == 3 || spec->type == 4)
12559 {
12560 curSpec = spec;
12561 curDeclarations = spec->__anon1.__anon2.definitions;
12562 break;
12563 }
12564 }
12565 if(declarations && (!(*declarations).count || ((*declarations).count == 1 && addedPadding)))
12566 {
12567 FreeList(declarations, (void *)(FreeClassDef));
12568 declarations = (((void *)0));
12569 }
12570 if(classSym->__anon1.registered->type != 5 && !declarations)
12571 {
12572 FreeExternal(external);
12573 external = (((void *)0));
12574 classSym->__anon2.__anon1.structExternal = (((void *)0));
12575 }
12576 else
12577 {
12578 if(curSpec)
12579 curSpec->__anon1.__anon2.definitions = declarations;
12580 else
12581 {
12582 specifiers = MkList();
12583 declarators = MkList();
12584 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
12585 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12586 }
12587 if(add)
12588 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12589 }
12590 }
12591 classSym->declaring--;
12592 }
12593 else if(!classSym->declaredStructSym && classSym->__anon2.__anon1.structExternal)
12594 {
12595 classSym->declaredStructSym = 1;
12596 if(classSym->__anon1.registered)
12597 DeclareMembers(classSym->__anon2.__anon1.structExternal, classSym->__anon1.registered, 0);
12598 if(classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
12599 {
12600 struct Specifier * spec;
12601
12602 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
12603 {
12604 if(spec->__anon1.__anon2.definitions)
12605 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
12606 }
12607 }
12608 }
12609 if(inCompiler && neededBy && (external || !classSym->imported))
12610 {
12611 if(!external)
12612 {
12613 classSym->__anon2.__anon1.structExternal = external = MkExternalDeclaration((((void *)0)));
12614 external->symbol = classSym;
12615 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*ast), external);
12616 }
12617 if(reachedPass15 && !external->__anon1.declaration && classSym->__anon1.registered && classSym->__anon1.registered->type == 5)
12618 {
12619 char structName[1024];
12620 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
12621
12622 structName[0] = 0;
12623 FullClassNameCat(structName, name, 0);
12624 specifiers = MkList();
12625 declarators = MkList();
12626 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))));
12627 external->__anon1.declaration = MkDeclaration(specifiers, declarators);
12628 }
12629 if(fwdDecl)
12630 {
12631 struct External * e = external->fwdDecl ? external->fwdDecl : external;
12632
12633 if(((struct __ecereNameSpace__ecere__com__LinkList *)(((char *)e->incoming + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->count)
12634 __ecereMethod_External_CreateUniqueEdge(neededBy, e, !needDereference && !external->fwdDecl);
12635 }
12636 else
12637 __ecereMethod_External_CreateUniqueEdge(neededBy, external, !needDereference);
12638 }
12639 return external;
12640 }
12641
12642 void ProcessMemberInitData(struct MemberInit * member, 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)
12643 {
12644 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
12645 unsigned int found = 0;
12646 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
12647 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
12648 unsigned int freeType = 0;
12649
12650 yylloc = member->loc;
12651 if(!ident)
12652 {
12653 if(curMember)
12654 {
12655 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
12656 if(*curMember)
12657 {
12658 found = 1;
12659 dataMember = *curMember;
12660 }
12661 }
12662 }
12663 else
12664 {
12665 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
12666 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
12667 int _subMemberStackPos = 0;
12668
12669 if(!thisMember)
12670 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
12671 if(thisMember)
12672 {
12673 dataMember = thisMember;
12674 if(curMember && thisMember->memberAccess == 1)
12675 {
12676 *curMember = thisMember;
12677 *curClass = thisMember->_class;
12678 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
12679 *subMemberStackPos = _subMemberStackPos;
12680 }
12681 found = 1;
12682 }
12683 else
12684 {
12685 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
12686 if(method && method->type == 1)
12687 found = 1;
12688 else
12689 method = (((void *)0));
12690 }
12691 }
12692 if(found)
12693 {
12694 struct Type * type = (((void *)0));
12695
12696 if(dataMember)
12697 {
12698 if(!dataMember->dataType && dataMember->dataTypeString)
12699 {
12700 struct Context * context = SetupTemplatesContext(_class);
12701
12702 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
12703 FinishTemplatesContext(context);
12704 }
12705 type = dataMember->dataType;
12706 }
12707 else if(method)
12708 {
12709 if(!method->dataType)
12710 ProcessMethodType(method);
12711 type = method->dataType;
12712 }
12713 if(ident && ident->next)
12714 {
12715 for(ident = ident->next; ident && type; ident = ident->next)
12716 {
12717 if(type->kind == 8)
12718 {
12719 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
12720 if(!dataMember)
12721 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
12722 if(dataMember)
12723 type = dataMember->dataType;
12724 }
12725 else if(type->kind == 9 || type->kind == 10)
12726 {
12727 struct Type * memberType;
12728
12729 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
12730 {
12731 if(!strcmp(memberType->name, ident->string))
12732 {
12733 type = memberType;
12734 break;
12735 }
12736 }
12737 }
12738 }
12739 }
12740 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
12741 {
12742 int id = 0;
12743 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
12744 struct __ecereNameSpace__ecere__com__Class * sClass;
12745
12746 for(sClass = _class; sClass; sClass = sClass->base)
12747 {
12748 id = 0;
12749 if(sClass->templateClass)
12750 sClass = sClass->templateClass;
12751 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
12752 {
12753 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
12754 {
12755 for(sClass = sClass->base; sClass; sClass = sClass->base)
12756 {
12757 if(sClass->templateClass)
12758 sClass = sClass->templateClass;
12759 id += sClass->templateParams.count;
12760 }
12761 break;
12762 }
12763 id++;
12764 }
12765 if(curParam)
12766 break;
12767 }
12768 if(curParam)
12769 {
12770 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
12771
12772 if(arg.__anon1.__anon1.dataTypeString)
12773 {
12774 unsigned int constant = type->constant;
12775
12776 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
12777 if(type->kind == 8 && constant)
12778 type->constant = 1;
12779 else if(type->kind == 13)
12780 {
12781 struct Type * t = type->__anon1.type;
12782
12783 while(t->kind == 13)
12784 t = t->__anon1.type;
12785 if(constant)
12786 t->constant = constant;
12787 }
12788 freeType = 1;
12789 if(type && _class->templateClass)
12790 type->passAsTemplate = 1;
12791 if(type)
12792 {
12793 }
12794 }
12795 }
12796 }
12797 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
12798 {
12799 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
12800 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
12801 int paramCount = 0;
12802 int lastParam = -1;
12803 char templateString[1024];
12804 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
12805
12806 sprintf(templateString, "%s<", expClass->templateClass->fullName);
12807 for(cClass = expClass; cClass; cClass = cClass->base)
12808 {
12809 int p = 0;
12810
12811 if(cClass->templateClass)
12812 cClass = cClass->templateClass;
12813 for(param = cClass->templateParams.first; param; param = param->next)
12814 {
12815 int id = p;
12816 struct __ecereNameSpace__ecere__com__Class * sClass;
12817 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
12818
12819 for(sClass = cClass->base; sClass; sClass = sClass->base)
12820 {
12821 if(sClass->templateClass)
12822 sClass = sClass->templateClass;
12823 id += sClass->templateParams.count;
12824 }
12825 arg = expClass->templateArgs[id];
12826 for(sClass = _class; sClass; sClass = sClass->base)
12827 {
12828 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
12829 int p = 0;
12830 struct __ecereNameSpace__ecere__com__Class * nextClass;
12831
12832 if(sClass->templateClass)
12833 sClass = sClass->templateClass;
12834 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
12835 {
12836 if(nextClass->templateClass)
12837 nextClass = nextClass->templateClass;
12838 p += nextClass->templateParams.count;
12839 }
12840 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
12841 {
12842 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
12843 {
12844 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12845 {
12846 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
12847 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
12848 break;
12849 }
12850 }
12851 }
12852 }
12853 {
12854 char argument[256];
12855
12856 argument[0] = '\0';
12857 switch(param->type)
12858 {
12859 case 2:
12860 {
12861 char expString[1024];
12862 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
12863 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
12864 struct Expression * exp;
12865 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
12866
12867 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
12868 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
12869 ProcessExpressionType(exp);
12870 ComputeExpression(exp);
12871 expString[0] = '\0';
12872 PrintExpression(exp, expString);
12873 strcat(argument, expString);
12874 FreeExpression(exp);
12875 break;
12876 }
12877 case 1:
12878 {
12879 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
12880 break;
12881 }
12882 case 0:
12883 {
12884 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
12885 strcat(argument, arg.__anon1.__anon1.dataTypeString);
12886 break;
12887 }
12888 }
12889 if(argument[0])
12890 {
12891 if(paramCount)
12892 strcat(templateString, ", ");
12893 if(lastParam != p - 1)
12894 {
12895 strcat(templateString, param->name);
12896 strcat(templateString, " = ");
12897 }
12898 strcat(templateString, argument);
12899 paramCount++;
12900 lastParam = p;
12901 }
12902 p++;
12903 }
12904 }
12905 }
12906 {
12907 int len = strlen(templateString);
12908
12909 if(templateString[len - 1] == '<')
12910 len--;
12911 else
12912 {
12913 if(templateString[len - 1] == '>')
12914 templateString[len++] = ' ';
12915 templateString[len++] = '>';
12916 }
12917 templateString[len++] = '\0';
12918 }
12919 {
12920 struct Context * context = SetupTemplatesContext(_class);
12921
12922 if(freeType)
12923 FreeType(type);
12924 type = ProcessTypeString(templateString, 0);
12925 freeType = 1;
12926 FinishTemplatesContext(context);
12927 }
12928 }
12929 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
12930 {
12931 ProcessExpressionType(member->initializer->__anon1.exp);
12932 if(!member->initializer->__anon1.exp->expType)
12933 {
12934 if(inCompiler)
12935 {
12936 char expString[10240];
12937
12938 expString[0] = '\0';
12939 PrintExpression(member->initializer->__anon1.exp, expString);
12940 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
12941 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
12942 }
12943 }
12944 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
12945 {
12946 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
12947 }
12948 }
12949 else if(member->initializer)
12950 {
12951 ProcessInitializer(member->initializer, type);
12952 }
12953 if(freeType)
12954 FreeType(type);
12955 }
12956 else
12957 {
12958 if(_class && _class->type == 3)
12959 {
12960 if(member->initializer)
12961 {
12962 struct Type * type = MkClassType(_class->fullName);
12963
12964 ProcessInitializer(member->initializer, type);
12965 FreeType(type);
12966 }
12967 }
12968 else
12969 {
12970 if(member->initializer)
12971 {
12972 ProcessInitializer(member->initializer, (((void *)0)));
12973 }
12974 if(ident)
12975 {
12976 if(method)
12977 {
12978 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12979 }
12980 else if(_class)
12981 {
12982 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
12983 if(inCompiler)
12984 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
12985 }
12986 }
12987 else if(_class)
12988 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
12989 }
12990 }
12991 }
12992
12993 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
12994 {
12995 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
12996
12997 for(link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->classes); link; link = (struct __ecereNameSpace__ecere__com__BTNamedLink *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)link)))
12998 {
12999 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
13000
13001 if(_class->type == 4)
13002 {
13003 struct __ecereNameSpace__ecere__sys__OldList converts =
13004 {
13005 0, 0, 0, 0, 0
13006 };
13007 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13008
13009 type->kind = 8;
13010 if(!_class->symbol)
13011 _class->symbol = FindClass(_class->fullName);
13012 type->__anon1._class = _class->symbol;
13013 if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), dest->kind != 8 || !dest->__anon1._class || strcmp(dest->__anon1._class->string, "bool"), 0, 0, 0, 0))
13014 {
13015 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13016 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13017
13018 if(enumClass)
13019 {
13020 struct __ecereNameSpace__ecere__com__Class * baseClass;
13021
13022 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
13023 {
13024 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13025
13026 for(value = e->values.first; value; value = value->next)
13027 {
13028 if(!strcmp(value->name, string))
13029 break;
13030 }
13031 if(value)
13032 {
13033 FreeType(sourceExp->expType);
13034 sourceExp->isConstant = 1;
13035 sourceExp->expType = MkClassType(baseClass->fullName);
13036 if(inCompiler || inPreCompiler || inDebugger)
13037 {
13038 char constant[256];
13039
13040 FreeExpContents(sourceExp);
13041 sourceExp->type = 2;
13042 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
13043 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13044 else
13045 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
13046 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13047 }
13048 while(converts.first)
13049 {
13050 struct Conversion * convert = converts.first;
13051
13052 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
13053 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
13054 }
13055 ((type ? __extension__ ({
13056 void * __ecerePtrToDelete = (type);
13057
13058 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13059 }) : 0), type = 0);
13060 return 1;
13061 }
13062 }
13063 }
13064 }
13065 if(converts.first)
13066 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
13067 ((type ? __extension__ ({
13068 void * __ecerePtrToDelete = (type);
13069
13070 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13071 }) : 0), type = 0);
13072 }
13073 }
13074 for(nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(&nameSpace->nameSpaces); nameSpace != (((void *)0)); nameSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(((struct __ecereNameSpace__ecere__sys__BTNode *)nameSpace)))
13075 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
13076 return 1;
13077 return 0;
13078 }
13079
13080 void ComputeExpression(struct Expression * exp)
13081 {
13082 switch(exp->type)
13083 {
13084 case 0:
13085 {
13086 struct Identifier * id = exp->__anon1.__anon1.identifier;
13087
13088 if(id && exp->isConstant && !inCompiler && !inPreCompiler && !inDebugger)
13089 {
13090 struct __ecereNameSpace__ecere__com__Class * c = (exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
13091
13092 if(c && c->type == 4)
13093 {
13094 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13095
13096 if(enumClass)
13097 {
13098 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
13099 struct __ecereNameSpace__ecere__com__EnumClassData * e = (c ? ((void *)(((char *)c->data) + enumClass->offsetClass)) : (((void *)0)));
13100
13101 for(value = e->values.first; value; value = value->next)
13102 {
13103 if(!strcmp(value->name, id->string))
13104 break;
13105 }
13106 if(value)
13107 {
13108 const char * dts = c->dataTypeString;
13109
13110 FreeExpContents(exp);
13111 exp->type = 2;
13112 exp->__anon1.__anon1.constant = (dts && (!strcmp(dts, "int") || !strcmp(dts, "int64") || !strcmp(dts, "short") || !strcmp(dts, "char"))) ? PrintInt64(value->data) : PrintUInt64(value->data);
13113 }
13114 }
13115 }
13116 }
13117 break;
13118 }
13119 case 1:
13120 {
13121 ComputeInstantiation(exp);
13122 break;
13123 }
13124 case 4:
13125 {
13126 struct Expression * exp1, * exp2 = (((void *)0));
13127 struct Operand op1 =
13128 {
13129 0, 0, 0,
13130 .__anon1 = {
13131 .c = 0
13132 },
13133 {
13134 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13135 }
13136 };
13137 struct Operand op2 =
13138 {
13139 0, 0, 0,
13140 .__anon1 = {
13141 .c = 0
13142 },
13143 {
13144 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13145 }
13146 };
13147
13148 if(exp->__anon1.op.exp2)
13149 {
13150 struct Expression * e = exp->__anon1.op.exp2;
13151
13152 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
13153 {
13154 if(e->type == 5 || e->type == 32 || e->type == 23)
13155 {
13156 if(e->type == 23)
13157 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13158 else
13159 e = (*e->__anon1.list).last;
13160 }
13161 }
13162 if(exp->__anon1.op.op == 261 && e && e->expType)
13163 {
13164 if(e->type == 3 && e->__anon1.__anon2.string)
13165 {
13166 char * string = e->__anon1.__anon2.string;
13167 int len = strlen(string);
13168 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
13169
13170 len = UnescapeString(tmp, string + 1, len - 2);
13171 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
13172 FreeExpContents(exp);
13173 exp->type = 2;
13174 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
13175 }
13176 else
13177 {
13178 struct Type * type = e->expType;
13179
13180 type->refCount++;
13181 FreeExpContents(exp);
13182 exp->type = 2;
13183 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13184 FreeType(type);
13185 }
13186 break;
13187 }
13188 else
13189 ComputeExpression(exp->__anon1.op.exp2);
13190 }
13191 if(exp->__anon1.op.exp1)
13192 {
13193 ComputeExpression(exp->__anon1.op.exp1);
13194 exp1 = exp->__anon1.op.exp1;
13195 exp2 = exp->__anon1.op.exp2;
13196 op1 = GetOperand(exp1);
13197 if(op1.type)
13198 op1.type->refCount++;
13199 if(exp2)
13200 {
13201 op2 = GetOperand(exp2);
13202 if(op2.type)
13203 op2.type->refCount++;
13204 }
13205 }
13206 else
13207 {
13208 exp1 = exp->__anon1.op.exp2;
13209 op1 = GetOperand(exp1);
13210 if(op1.type)
13211 op1.type->refCount++;
13212 }
13213 CallOperator(exp, exp1, exp2, &op1, &op2);
13214 if(op1.type)
13215 FreeType(op1.type);
13216 if(op2.type)
13217 FreeType(op2.type);
13218 break;
13219 }
13220 case 5:
13221 case 32:
13222 {
13223 struct Expression * e, * n;
13224
13225 for(e = (*exp->__anon1.list).first; e; e = n)
13226 {
13227 n = e->next;
13228 if(!n)
13229 {
13230 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
13231 struct Expression * prev = exp->prev;
13232 struct Expression * next = exp->next;
13233
13234 if(exp->expType && exp->expType->kind == 8 && (!e->expType || e->expType->kind != 8))
13235 {
13236 FreeType(e->expType);
13237 e->expType = exp->expType;
13238 e->expType->refCount++;
13239 }
13240 ComputeExpression(e);
13241 FreeType(exp->expType);
13242 FreeType(exp->destType);
13243 *exp = *e;
13244 exp->prev = prev;
13245 exp->next = next;
13246 ((e ? __extension__ ({
13247 void * __ecerePtrToDelete = (e);
13248
13249 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
13250 }) : 0), e = 0);
13251 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
13252 }
13253 else
13254 {
13255 FreeExpression(e);
13256 }
13257 }
13258 break;
13259 }
13260 case 8:
13261 {
13262 struct Expression * memberExp = exp->__anon1.member.exp;
13263 struct Identifier * memberID = exp->__anon1.member.member;
13264 struct Type * type;
13265
13266 ComputeExpression(exp->__anon1.member.exp);
13267 type = exp->__anon1.member.exp->expType;
13268 if(type)
13269 {
13270 struct __ecereNameSpace__ecere__com__Class * _class = (exp->__anon1.member.member && exp->__anon1.member.member->classSym) ? exp->__anon1.member.member->classSym->__anon1.registered : (((type->kind == 8 || type->kind == 19) && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0)));
13271 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13272 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13273 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
13274
13275 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
13276 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
13277 if(!_class)
13278 {
13279 char string[256];
13280 struct Symbol * classSym;
13281
13282 string[0] = '\0';
13283 PrintTypeNoConst(type, string, 0, 1);
13284 classSym = FindClass(string);
13285 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13286 }
13287 if(exp->__anon1.member.member)
13288 {
13289 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
13290 if(!prop)
13291 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
13292 }
13293 if(!prop && !member && _class && exp->__anon1.member.member)
13294 {
13295 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
13296
13297 convertTo = _class;
13298 _class = classSym ? classSym->__anon1.registered : (((void *)0));
13299 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
13300 }
13301 if(prop)
13302 {
13303 if(prop->compiled)
13304 {
13305 struct Type * type = prop->dataType;
13306
13307 if(_class->type == 3)
13308 {
13309 if(type->kind == 8)
13310 {
13311 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13312
13313 if(_class->type == 3)
13314 {
13315 if(!_class->dataType)
13316 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13317 type = _class->dataType;
13318 }
13319 }
13320 switch(type->kind)
13321 {
13322 case 6:
13323 {
13324 float value;
13325 float (* Get)(float) = (void *)prop->Get;
13326
13327 GetFloat(exp->__anon1.member.exp, &value);
13328 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
13329 exp->type = 2;
13330 break;
13331 }
13332 case 7:
13333 {
13334 double value;
13335 double (* Get)(double);
13336
13337 GetDouble(exp->__anon1.member.exp, &value);
13338 if(convertTo)
13339 Get = (void *)prop->Set;
13340 else
13341 Get = (void *)prop->Get;
13342 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
13343 exp->type = 2;
13344 break;
13345 }
13346 }
13347 }
13348 else
13349 {
13350 if(convertTo)
13351 {
13352 struct Expression * value = exp->__anon1.member.exp;
13353 struct Type * type;
13354
13355 if(!prop->dataType)
13356 ProcessPropertyType(prop);
13357 type = prop->dataType;
13358 if(!type)
13359 {
13360 }
13361 else if(_class->type == 1)
13362 {
13363 switch(type->kind)
13364 {
13365 case 8:
13366 {
13367 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13368
13369 if(propertyClass->type == 1 && value->type == 1)
13370 {
13371 void (* Set)(void *, void *) = (void *)prop->Set;
13372
13373 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13374 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13375 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13376 exp->__anon1.instance->loc = exp->loc;
13377 exp->type = 1;
13378 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
13379 PopulateInstance(exp->__anon1.instance);
13380 }
13381 break;
13382 }
13383 case 3:
13384 {
13385 int intValue;
13386 void (* Set)(void *, int) = (void *)prop->Set;
13387
13388 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13389 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13390 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13391 exp->__anon1.instance->loc = exp->loc;
13392 exp->type = 1;
13393 GetInt(value, &intValue);
13394 Set(exp->__anon1.instance->data, intValue);
13395 PopulateInstance(exp->__anon1.instance);
13396 break;
13397 }
13398 case 4:
13399 {
13400 long long intValue;
13401 void (* Set)(void *, long long) = (void *)prop->Set;
13402
13403 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13404 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13405 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13406 exp->__anon1.instance->loc = exp->loc;
13407 exp->type = 1;
13408 GetInt64(value, &intValue);
13409 Set(exp->__anon1.instance->data, intValue);
13410 PopulateInstance(exp->__anon1.instance);
13411 break;
13412 }
13413 case 22:
13414 {
13415 intptr_t intValue;
13416 void (* Set)(void *, intptr_t) = (void *)prop->Set;
13417
13418 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13419 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13420 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13421 exp->__anon1.instance->loc = exp->loc;
13422 exp->type = 1;
13423 GetIntPtr(value, &intValue);
13424 Set(exp->__anon1.instance->data, intValue);
13425 PopulateInstance(exp->__anon1.instance);
13426 break;
13427 }
13428 case 23:
13429 {
13430 ssize_t intValue;
13431 void (* Set)(void *, ssize_t) = (void *)prop->Set;
13432
13433 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13434 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13435 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13436 exp->__anon1.instance->loc = exp->loc;
13437 exp->type = 1;
13438 GetIntSize(value, &intValue);
13439 Set(exp->__anon1.instance->data, intValue);
13440 PopulateInstance(exp->__anon1.instance);
13441 break;
13442 }
13443 case 6:
13444 {
13445 float floatValue;
13446 void (* Set)(void *, float) = (void *)prop->Set;
13447
13448 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13449 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13450 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13451 exp->__anon1.instance->loc = exp->loc;
13452 exp->type = 1;
13453 GetFloat(value, &floatValue);
13454 Set(exp->__anon1.instance->data, floatValue);
13455 PopulateInstance(exp->__anon1.instance);
13456 break;
13457 }
13458 case 7:
13459 {
13460 double doubleValue;
13461 void (* Set)(void *, double) = (void *)prop->Set;
13462
13463 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13464 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13465 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13466 exp->__anon1.instance->loc = exp->loc;
13467 exp->type = 1;
13468 GetDouble(value, &doubleValue);
13469 Set(exp->__anon1.instance->data, doubleValue);
13470 PopulateInstance(exp->__anon1.instance);
13471 break;
13472 }
13473 }
13474 }
13475 else if(_class->type == 2)
13476 {
13477 switch(type->kind)
13478 {
13479 case 8:
13480 {
13481 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
13482
13483 if(propertyClass->type == 1 && value->__anon1.instance->data)
13484 {
13485 unsigned int (* Set)(void *) = (void *)prop->Set;
13486 unsigned int bits = Set(value->__anon1.instance->data);
13487
13488 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13489 exp->type = 2;
13490 break;
13491 }
13492 else if(_class->type == 2)
13493 {
13494 unsigned int value;
13495 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
13496 unsigned int bits;
13497
13498 GetUInt(exp->__anon1.member.exp, &value);
13499 bits = Set(value);
13500 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
13501 exp->type = 2;
13502 }
13503 }
13504 }
13505 }
13506 }
13507 else
13508 {
13509 if(_class->type == 2)
13510 {
13511 unsigned int value;
13512
13513 GetUInt(exp->__anon1.member.exp, &value);
13514 switch(type->kind)
13515 {
13516 case 8:
13517 {
13518 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13519
13520 if(_class->type == 1)
13521 {
13522 void (* Get)(unsigned int, void *) = (void *)prop->Get;
13523
13524 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13525 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13526 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13527 exp->__anon1.instance->loc = exp->loc;
13528 exp->type = 1;
13529 Get(value, exp->__anon1.instance->data);
13530 PopulateInstance(exp->__anon1.instance);
13531 }
13532 else if(_class->type == 2)
13533 {
13534 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
13535 uint64 bits = Get(value);
13536
13537 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
13538 exp->type = 2;
13539 }
13540 break;
13541 }
13542 }
13543 }
13544 else if(_class->type == 1)
13545 {
13546 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
13547
13548 switch(type->kind)
13549 {
13550 case 8:
13551 {
13552 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13553
13554 if(_class->type == 1 && value)
13555 {
13556 void (* Get)(void *, void *) = (void *)prop->Get;
13557
13558 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
13559 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
13560 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
13561 exp->__anon1.instance->loc = exp->loc;
13562 exp->type = 1;
13563 Get(value, exp->__anon1.instance->data);
13564 PopulateInstance(exp->__anon1.instance);
13565 }
13566 break;
13567 }
13568 }
13569 }
13570 }
13571 }
13572 }
13573 else
13574 {
13575 exp->isConstant = 0;
13576 }
13577 }
13578 else if(member)
13579 {
13580 }
13581 }
13582 if(exp->type != 8)
13583 {
13584 FreeExpression(memberExp);
13585 FreeIdentifier(memberID);
13586 }
13587 break;
13588 }
13589 case 10:
13590 {
13591 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
13592
13593 FreeExpContents(exp);
13594 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
13595 exp->type = 2;
13596 FreeType(type);
13597 break;
13598 }
13599 case 15:
13600 {
13601 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
13602
13603 if(classSym && classSym->__anon1.registered)
13604 {
13605 if(classSym->__anon1.registered->fixed)
13606 {
13607 FreeSpecifier(exp->__anon1._class);
13608 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
13609 exp->type = 2;
13610 }
13611 else
13612 {
13613 char className[1024];
13614
13615 strcpy(className, "__ecereClass_");
13616 FullClassNameCat(className, classSym->string, 1);
13617 DeclareClass(curExternal, classSym, className);
13618 FreeExpContents(exp);
13619 exp->type = 9;
13620 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
13621 exp->__anon1.member.member = MkIdentifier("structSize");
13622 }
13623 }
13624 break;
13625 }
13626 case 11:
13627 {
13628 struct Type * type;
13629 struct Expression * e = exp;
13630
13631 if(exp->type == 11)
13632 {
13633 if(exp->__anon1.cast.exp)
13634 ComputeExpression(exp->__anon1.cast.exp);
13635 e = exp->__anon1.cast.exp;
13636 }
13637 if(e && exp->expType)
13638 {
13639 type = exp->expType;
13640 if(type->kind == 8)
13641 {
13642 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
13643
13644 if(_class && (_class->type == 3 || _class->type == 2))
13645 {
13646 if(!_class->dataType)
13647 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
13648 type = _class->dataType;
13649 }
13650 }
13651 switch(type->kind)
13652 {
13653 case 24:
13654 case 1:
13655 if(type->isSigned)
13656 {
13657 char value = 0;
13658
13659 if(GetChar(e, &value))
13660 {
13661 FreeExpContents(exp);
13662 exp->__anon1.__anon1.constant = PrintChar(value);
13663 exp->type = 2;
13664 }
13665 }
13666 else
13667 {
13668 unsigned char value = 0;
13669
13670 if(GetUChar(e, &value))
13671 {
13672 FreeExpContents(exp);
13673 exp->__anon1.__anon1.constant = PrintUChar(value);
13674 exp->type = 2;
13675 }
13676 }
13677 break;
13678 case 2:
13679 if(type->isSigned)
13680 {
13681 short value = 0;
13682
13683 if(GetShort(e, &value))
13684 {
13685 FreeExpContents(exp);
13686 exp->__anon1.__anon1.constant = PrintShort(value);
13687 exp->type = 2;
13688 }
13689 }
13690 else
13691 {
13692 unsigned short value = 0;
13693
13694 if(GetUShort(e, &value))
13695 {
13696 FreeExpContents(exp);
13697 exp->__anon1.__anon1.constant = PrintUShort(value);
13698 exp->type = 2;
13699 }
13700 }
13701 break;
13702 case 3:
13703 if(type->isSigned)
13704 {
13705 int value = 0;
13706
13707 if(GetInt(e, &value))
13708 {
13709 FreeExpContents(exp);
13710 exp->__anon1.__anon1.constant = PrintInt(value);
13711 exp->type = 2;
13712 }
13713 }
13714 else
13715 {
13716 unsigned int value = 0;
13717
13718 if(GetUInt(e, &value))
13719 {
13720 FreeExpContents(exp);
13721 exp->__anon1.__anon1.constant = PrintUInt(value);
13722 exp->type = 2;
13723 }
13724 }
13725 break;
13726 case 4:
13727 if(type->isSigned)
13728 {
13729 long long value = 0;
13730
13731 if(GetInt64(e, &value))
13732 {
13733 FreeExpContents(exp);
13734 exp->__anon1.__anon1.constant = PrintInt64(value);
13735 exp->type = 2;
13736 }
13737 }
13738 else
13739 {
13740 uint64 value = 0;
13741
13742 if(GetUInt64(e, &value))
13743 {
13744 FreeExpContents(exp);
13745 exp->__anon1.__anon1.constant = PrintUInt64(value);
13746 exp->type = 2;
13747 }
13748 }
13749 break;
13750 case 22:
13751 if(type->isSigned)
13752 {
13753 intptr_t value = 0;
13754
13755 if(GetIntPtr(e, &value))
13756 {
13757 FreeExpContents(exp);
13758 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13759 exp->type = 2;
13760 }
13761 }
13762 else
13763 {
13764 uintptr_t value = 0;
13765
13766 if(GetUIntPtr(e, &value))
13767 {
13768 FreeExpContents(exp);
13769 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13770 exp->type = 2;
13771 }
13772 }
13773 break;
13774 case 23:
13775 if(type->isSigned)
13776 {
13777 ssize_t value = 0;
13778
13779 if(GetIntSize(e, &value))
13780 {
13781 FreeExpContents(exp);
13782 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
13783 exp->type = 2;
13784 }
13785 }
13786 else
13787 {
13788 size_t value = 0;
13789
13790 if(GetUIntSize(e, &value))
13791 {
13792 FreeExpContents(exp);
13793 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
13794 exp->type = 2;
13795 }
13796 }
13797 break;
13798 case 6:
13799 {
13800 float value = 0;
13801
13802 if(GetFloat(e, &value))
13803 {
13804 FreeExpContents(exp);
13805 exp->__anon1.__anon1.constant = PrintFloat(value);
13806 exp->type = 2;
13807 }
13808 break;
13809 }
13810 case 7:
13811 {
13812 double value = 0;
13813
13814 if(GetDouble(e, &value))
13815 {
13816 FreeExpContents(exp);
13817 exp->__anon1.__anon1.constant = PrintDouble(value);
13818 exp->type = 2;
13819 }
13820 break;
13821 }
13822 }
13823 }
13824 break;
13825 }
13826 case 12:
13827 {
13828 struct Operand op1 =
13829 {
13830 0, 0, 0,
13831 .__anon1 = {
13832 .c = 0
13833 },
13834 {
13835 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13836 }
13837 };
13838 struct Operand op2 =
13839 {
13840 0, 0, 0,
13841 .__anon1 = {
13842 .c = 0
13843 },
13844 {
13845 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13846 }
13847 };
13848 struct Operand op3 =
13849 {
13850 0, 0, 0,
13851 .__anon1 = {
13852 .c = 0
13853 },
13854 {
13855 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
13856 }
13857 };
13858
13859 if(exp->__anon1.cond.exp)
13860 ComputeExpression((*exp->__anon1.cond.exp).last);
13861 if(exp->__anon1.cond.elseExp)
13862 ComputeExpression(exp->__anon1.cond.elseExp);
13863 if(exp->__anon1.cond.cond)
13864 ComputeExpression(exp->__anon1.cond.cond);
13865 op1 = GetOperand(exp->__anon1.cond.cond);
13866 if(op1.type)
13867 op1.type->refCount++;
13868 op2 = GetOperand((*exp->__anon1.cond.exp).last);
13869 if(op2.type)
13870 op2.type->refCount++;
13871 op3 = GetOperand(exp->__anon1.cond.elseExp);
13872 if(op3.type)
13873 op3.type->refCount++;
13874 if(op1.ops.Cond)
13875 {
13876 FreeExpContents(exp);
13877 op1.ops.Cond(exp, &op1, &op2, &op3);
13878 }
13879 if(op1.type)
13880 FreeType(op1.type);
13881 if(op2.type)
13882 FreeType(op2.type);
13883 if(op3.type)
13884 FreeType(op3.type);
13885 break;
13886 }
13887 }
13888 }
13889
13890 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
13891 {
13892 struct __ecereNameSpace__ecere__com__Instance * module;
13893
13894 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Module) + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->systemNameSpace, sourceExp, dest, string, conversions))
13895 return 1;
13896 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->privateNameSpace, sourceExp, dest, string, conversions))
13897 return 1;
13898 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13899 return 1;
13900 for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application + sizeof(struct __ecereNameSpace__ecere__com__Module) + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->allModules.first; module; module = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->next)
13901 {
13902 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->publicNameSpace, sourceExp, dest, string, conversions))
13903 return 1;
13904 }
13905 return 0;
13906 }
13907
13908 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
13909 {
13910 struct Type * source;
13911 struct Type * realDest = dest;
13912 struct Type * backupSourceExpType = (((void *)0));
13913 struct Expression * nbExp = GetNonBracketsExp(sourceExp);
13914 struct Expression * computedExp = nbExp;
13915
13916 dest->refCount++;
13917 if(sourceExp->isConstant && sourceExp->type != 2 && sourceExp->type != 0 && sourceExp->type != 11 && dest->kind == 8 && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
13918 {
13919 computedExp = CopyExpression(nbExp);
13920 ComputeExpression(computedExp);
13921 }
13922 source = sourceExp->expType;
13923 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
13924 {
13925 if(computedExp != nbExp)
13926 {
13927 FreeExpression(computedExp);
13928 computedExp = nbExp;
13929 }
13930 FreeType(dest);
13931 return 1;
13932 }
13933 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
13934 {
13935 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
13936 {
13937 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
13938
13939 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
13940 ;
13941 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
13942 ;
13943 if(sourceBase == destBase)
13944 {
13945 if(computedExp != nbExp)
13946 {
13947 FreeExpression(computedExp);
13948 computedExp = nbExp;
13949 }
13950 FreeType(dest);
13951 return 1;
13952 }
13953 }
13954 }
13955 if(source)
13956 {
13957 struct __ecereNameSpace__ecere__sys__OldList * specs;
13958 unsigned int flag = 0;
13959 long long value = (((int)0x7fffffff));
13960
13961 source->refCount++;
13962 if(computedExp->type == 2)
13963 {
13964 if(source->isSigned)
13965 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13966 else
13967 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
13968 }
13969 else if(computedExp->type == 4 && computedExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
13970 {
13971 if(source->isSigned)
13972 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13973 else
13974 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
13975 }
13976 if(computedExp != nbExp)
13977 {
13978 FreeExpression(computedExp);
13979 computedExp = nbExp;
13980 }
13981 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "unichar"))
13982 {
13983 FreeType(source);
13984 source = __extension__ ({
13985 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13986
13987 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
13988 });
13989 }
13990 if(dest->kind == 8)
13991 {
13992 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
13993
13994 if(_class && _class->type == 3)
13995 {
13996 if(source->kind != 8)
13997 {
13998 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13999 struct Type * tempDest, * tempSource;
14000
14001 for(; _class->base->type != 1000; _class = _class->base)
14002 ;
14003 tempSource = dest;
14004 tempDest = tempType;
14005 tempType->kind = 8;
14006 if(!_class->symbol)
14007 _class->symbol = FindClass(_class->fullName);
14008 tempType->__anon1._class = _class->symbol;
14009 tempType->truth = dest->truth;
14010 if(tempType->__anon1._class)
14011 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14012 backupSourceExpType = sourceExp->expType;
14013 if(dest->passAsTemplate)
14014 {
14015 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14016 CopyTypeInto(sourceExp->expType, dest);
14017 sourceExp->expType->passAsTemplate = 0;
14018 }
14019 else
14020 {
14021 sourceExp->expType = dest;
14022 dest->refCount++;
14023 }
14024 flag = 1;
14025 ((tempType ? __extension__ ({
14026 void * __ecerePtrToDelete = (tempType);
14027
14028 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14029 }) : 0), tempType = 0);
14030 }
14031 }
14032 if(_class && _class->type == 2 && source->kind != 8)
14033 {
14034 if(!dest->__anon1._class->__anon1.registered->dataType)
14035 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
14036 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14037 {
14038 FreeType(source);
14039 FreeType(sourceExp->expType);
14040 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
14041 source->refCount++;
14042 }
14043 }
14044 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
14045 {
14046 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14047 struct Declarator * decl;
14048 char string[1024];
14049
14050 ReadString(string, sourceExp->__anon1.__anon2.string);
14051 decl = SpecDeclFromString(string, specs, (((void *)0)));
14052 FreeExpContents(sourceExp);
14053 FreeType(sourceExp->expType);
14054 sourceExp->type = 24;
14055 sourceExp->__anon1._classExp.specifiers = specs;
14056 sourceExp->__anon1._classExp.decl = decl;
14057 sourceExp->expType = dest;
14058 dest->refCount++;
14059 FreeType(source);
14060 FreeType(dest);
14061 if(backupSourceExpType)
14062 FreeType(backupSourceExpType);
14063 return 1;
14064 }
14065 }
14066 else if(source->kind == 8)
14067 {
14068 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
14069
14070 if(_class && (_class->type == 3 || _class->type == 2))
14071 {
14072 if(dest->kind != 8)
14073 {
14074 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14075 struct Type * tempDest, * tempSource;
14076
14077 if(!source->__anon1._class->__anon1.registered->dataType)
14078 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
14079 for(; _class->base->type != 1000; _class = _class->base)
14080 ;
14081 tempDest = source;
14082 tempSource = tempType;
14083 tempType->kind = 8;
14084 tempType->__anon1._class = FindClass(_class->fullName);
14085 tempType->truth = source->truth;
14086 tempType->classObjectType = source->classObjectType;
14087 if(tempType->__anon1._class)
14088 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14089 if(conversions && conversions->last)
14090 {
14091 ((struct Conversion *)conversions->last)->resultType = dest;
14092 dest->refCount++;
14093 }
14094 FreeType(sourceExp->expType);
14095 sourceExp->expType = MkClassType(_class->fullName);
14096 sourceExp->expType->truth = source->truth;
14097 sourceExp->expType->classObjectType = source->classObjectType;
14098 if(!sourceExp->destType)
14099 {
14100 FreeType(sourceExp->destType);
14101 sourceExp->destType = sourceExp->expType;
14102 if(sourceExp->expType)
14103 sourceExp->expType->refCount++;
14104 }
14105 if(!_class->dataType)
14106 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14107 FreeType(dest);
14108 dest = MkClassType(source->__anon1._class->string);
14109 dest->truth = source->truth;
14110 dest->classObjectType = source->classObjectType;
14111 FreeType(source);
14112 source = _class->dataType;
14113 source->refCount++;
14114 ((tempType ? __extension__ ({
14115 void * __ecerePtrToDelete = (tempType);
14116
14117 __ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
14118 }) : 0), tempType = 0);
14119 }
14120 }
14121 }
14122 if(!flag)
14123 {
14124 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
14125 {
14126 FreeType(source);
14127 FreeType(dest);
14128 return 1;
14129 }
14130 }
14131 if(dest->kind == 8)
14132 {
14133 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
14134 unsigned int fittingValue = 0;
14135
14136 if(_class && _class->type == 4)
14137 {
14138 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14139 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14140
14141 if(c && value >= 0 && value <= c->largest)
14142 fittingValue = 1;
14143 }
14144 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
14145 {
14146 if(_class->type == 0 || _class->type == 5)
14147 {
14148 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14149
14150 *newExp = *sourceExp;
14151 if(sourceExp->destType)
14152 sourceExp->destType->refCount++;
14153 if(sourceExp->expType)
14154 sourceExp->expType->refCount++;
14155 sourceExp->type = 11;
14156 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
14157 sourceExp->__anon1.cast.exp = newExp;
14158 FreeType(sourceExp->expType);
14159 sourceExp->expType = (((void *)0));
14160 ProcessExpressionType(sourceExp);
14161 if(!inCompiler)
14162 {
14163 FreeType(sourceExp->expType);
14164 sourceExp->expType = dest;
14165 }
14166 FreeType(source);
14167 if(inCompiler)
14168 FreeType(dest);
14169 if(backupSourceExpType)
14170 FreeType(backupSourceExpType);
14171 return 1;
14172 }
14173 if(!_class->dataType)
14174 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
14175 FreeType(dest);
14176 dest = _class->dataType;
14177 dest->refCount++;
14178 }
14179 if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24))
14180 {
14181 specs = MkListOne(MkSpecifier(DOUBLE));
14182 }
14183 else if(dest->kind == 6 && (source->kind == 6 || dest->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 7))
14184 {
14185 specs = MkListOne(MkSpecifier(FLOAT));
14186 }
14187 else if(dest->kind == 4 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14188 {
14189 specs = MkList();
14190 if(!dest->isSigned)
14191 ListAdd(specs, MkSpecifier(UNSIGNED));
14192 ListAdd(specs, MkSpecifier(INT64));
14193 }
14194 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
14195 {
14196 specs = MkList();
14197 if(!dest->isSigned)
14198 ListAdd(specs, MkSpecifier(UNSIGNED));
14199 ListAdd(specs, MkSpecifier(INT));
14200 }
14201 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14202 {
14203 specs = MkList();
14204 if(!dest->isSigned)
14205 ListAdd(specs, MkSpecifier(UNSIGNED));
14206 ListAdd(specs, MkSpecifier(SHORT));
14207 }
14208 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
14209 {
14210 specs = MkList();
14211 if(!dest->isSigned)
14212 ListAdd(specs, MkSpecifier(UNSIGNED));
14213 ListAdd(specs, MkSpecifier(CHAR));
14214 }
14215 else
14216 {
14217 FreeType(source);
14218 FreeType(dest);
14219 if(backupSourceExpType)
14220 {
14221 if(sourceExp->expType)
14222 FreeType(sourceExp->expType);
14223 sourceExp->expType = backupSourceExpType;
14224 }
14225 return 0;
14226 }
14227 }
14228 else if(dest->kind == 7 && (source->kind == 7 || source->kind == 6 || source->kind == 4 || source->kind == 3 || source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14229 {
14230 specs = MkListOne(MkSpecifier(DOUBLE));
14231 }
14232 else if(dest->kind == 6 && (source->kind == 6 || source->kind == 15 || source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14233 {
14234 specs = MkListOne(MkSpecifier(FLOAT));
14235 }
14236 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
14237 {
14238 specs = MkList();
14239 ListAdd(specs, MkSpecifier(BOOL));
14240 }
14241 else if(dest->kind == 1 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (dest->isSigned ? (value >= -128 && value <= 127) : (value >= 0 && value <= 255)))
14242 {
14243 if(source->kind == 3)
14244 {
14245 FreeType(dest);
14246 FreeType(source);
14247 if(backupSourceExpType)
14248 FreeType(backupSourceExpType);
14249 return 1;
14250 }
14251 else
14252 {
14253 specs = MkList();
14254 if(!dest->isSigned)
14255 ListAdd(specs, MkSpecifier(UNSIGNED));
14256 ListAdd(specs, MkSpecifier(CHAR));
14257 }
14258 }
14259 else if(dest->kind == 2 && (source->kind == 15 || source->kind == 24 || source->kind == 1 || source->kind == 2 || (source->kind == 3 && (dest->isSigned ? (value >= -32768 && value <= 32767) : (value >= 0 && value <= 65535)))))
14260 {
14261 if(source->kind == 3)
14262 {
14263 FreeType(dest);
14264 FreeType(source);
14265 if(backupSourceExpType)
14266 FreeType(backupSourceExpType);
14267 return 1;
14268 }
14269 else
14270 {
14271 specs = MkList();
14272 if(!dest->isSigned)
14273 ListAdd(specs, MkSpecifier(UNSIGNED));
14274 ListAdd(specs, MkSpecifier(SHORT));
14275 }
14276 }
14277 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
14278 {
14279 specs = MkList();
14280 if(!dest->isSigned)
14281 ListAdd(specs, MkSpecifier(UNSIGNED));
14282 ListAdd(specs, MkSpecifier(INT));
14283 }
14284 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
14285 {
14286 specs = MkList();
14287 if(!dest->isSigned)
14288 ListAdd(specs, MkSpecifier(UNSIGNED));
14289 ListAdd(specs, MkSpecifier(INT64));
14290 }
14291 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
14292 {
14293 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
14294 }
14295 else
14296 {
14297 FreeType(source);
14298 FreeType(dest);
14299 if(backupSourceExpType)
14300 {
14301 if(sourceExp->expType)
14302 FreeType(sourceExp->expType);
14303 sourceExp->expType = backupSourceExpType;
14304 }
14305 return 0;
14306 }
14307 if(!flag && !sourceExp->opDestType)
14308 {
14309 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14310
14311 *newExp = *sourceExp;
14312 newExp->prev = (((void *)0));
14313 newExp->next = (((void *)0));
14314 if(sourceExp->destType)
14315 sourceExp->destType->refCount++;
14316 if(sourceExp->expType)
14317 sourceExp->expType->refCount++;
14318 sourceExp->type = 11;
14319 if(realDest->kind == 8)
14320 {
14321 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
14322 FreeList(specs, (void *)(FreeSpecifier));
14323 }
14324 else
14325 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
14326 if(newExp->type == 4)
14327 {
14328 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
14329 }
14330 else
14331 sourceExp->__anon1.cast.exp = newExp;
14332 FreeType(sourceExp->expType);
14333 sourceExp->expType = (((void *)0));
14334 ProcessExpressionType(sourceExp);
14335 }
14336 else
14337 FreeList(specs, (void *)(FreeSpecifier));
14338 FreeType(dest);
14339 FreeType(source);
14340 if(backupSourceExpType)
14341 FreeType(backupSourceExpType);
14342 return 1;
14343 }
14344 else
14345 {
14346 if(computedExp != nbExp)
14347 {
14348 FreeExpression(computedExp);
14349 computedExp = nbExp;
14350 }
14351 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
14352 sourceExp = (*sourceExp->__anon1.list).last;
14353 if(sourceExp->type == 0)
14354 {
14355 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
14356
14357 if(dest->kind == 8)
14358 {
14359 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
14360 {
14361 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
14362 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
14363
14364 if(enumClass)
14365 {
14366 for(; _class && _class->type == 4; _class = _class->base)
14367 {
14368 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
14369 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
14370
14371 for(value = e->values.first; value; value = value->next)
14372 {
14373 if(!strcmp(value->name, id->string))
14374 break;
14375 }
14376 if(value)
14377 {
14378 FreeType(sourceExp->expType);
14379 sourceExp->isConstant = 1;
14380 sourceExp->expType = MkClassType(_class->fullName);
14381 if(inCompiler || inPreCompiler || inDebugger)
14382 {
14383 FreeExpContents(sourceExp);
14384 sourceExp->type = 2;
14385 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
14386 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
14387 else
14388 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
14389 }
14390 FreeType(dest);
14391 return 1;
14392 }
14393 }
14394 }
14395 }
14396 }
14397 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
14398 {
14399 FreeType(dest);
14400 return 1;
14401 }
14402 }
14403 FreeType(dest);
14404 }
14405 return 0;
14406 }
14407
14408 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
14409 {
14410 unsigned int result = 1;
14411
14412 if(destType)
14413 {
14414 struct __ecereNameSpace__ecere__sys__OldList converts =
14415 {
14416 0, 0, 0, 0, 0
14417 };
14418 struct Conversion * convert;
14419
14420 if(destType->kind == 0)
14421 return 0;
14422 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
14423 result = 0;
14424 if(converts.count)
14425 {
14426 for(convert = converts.first; convert; convert = convert->next)
14427 {
14428 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
14429
14430 if(!empty)
14431 {
14432 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14433 int objectType = exp->expType ? exp->expType->classObjectType : 0;
14434
14435 *newExp = *exp;
14436 newExp->prev = (((void *)0));
14437 newExp->next = (((void *)0));
14438 newExp->destType = (((void *)0));
14439 if(convert->isGet)
14440 {
14441 exp->type = 8;
14442 exp->addedThis = 1;
14443 exp->__anon1.member.exp = newExp;
14444 FreeType(exp->__anon1.member.exp->expType);
14445 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
14446 exp->__anon1.member.exp->expType->classObjectType = objectType;
14447 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
14448 exp->__anon1.member.memberType = 1;
14449 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14450 exp->needCast = 1;
14451 if(exp->expType)
14452 exp->expType->refCount++;
14453 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14454 }
14455 else
14456 {
14457 {
14458 exp->type = 8;
14459 exp->addedThis = 1;
14460 exp->__anon1.member.exp = newExp;
14461 if(newExp->expType && newExp->expType->kind == 8 && newExp->expType->__anon1._class && newExp->expType->__anon1._class->__anon1.registered && newExp->expType->__anon1._class->__anon1.registered->type == 5)
14462 {
14463 newExp->byReference = 1;
14464 }
14465 FreeType(exp->__anon1.member.exp->expType);
14466 exp->__anon1.member.exp->expType = (((void *)0));
14467 if(convert->convert->dataType)
14468 {
14469 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14470 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
14471 exp->__anon1.member.exp->expType->refCount = 1;
14472 exp->__anon1.member.exp->expType->classObjectType = objectType;
14473 ApplyAnyObjectLogic(exp->__anon1.member.exp);
14474 }
14475 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
14476 exp->__anon1.member.memberType = 4;
14477 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14478 exp->needCast = 1;
14479 if(convert->resultType)
14480 convert->resultType->refCount++;
14481 }
14482 }
14483 }
14484 else
14485 {
14486 FreeType(exp->expType);
14487 if(convert->isGet)
14488 {
14489 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
14490 if(exp->destType->casted)
14491 exp->needCast = 1;
14492 if(exp->expType)
14493 exp->expType->refCount++;
14494 }
14495 else
14496 {
14497 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
14498 if(exp->destType->casted)
14499 exp->needCast = 1;
14500 if(convert->resultType)
14501 convert->resultType->refCount++;
14502 }
14503 }
14504 }
14505 if(exp->isConstant && inCompiler)
14506 ComputeExpression(exp);
14507 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
14508 }
14509 if(!result && exp->expType && converts.count)
14510 {
14511 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
14512 }
14513 if(!result && exp->expType && exp->destType)
14514 {
14515 if((exp->destType->kind == 8 && exp->expType->kind == 13 && exp->expType->__anon1.type->kind == 8 && exp->expType->__anon1.type->__anon1._class == exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered->type == 1) || (exp->expType->kind == 8 && exp->destType->kind == 13 && exp->destType->__anon1.type->kind == 8 && exp->destType->__anon1.type->__anon1._class == exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1))
14516 result = 1;
14517 }
14518 }
14519 return result;
14520 }
14521
14522 static void ProcessFunction(struct FunctionDefinition *  function);
14523
14524 void ProcessInstantiationType(struct Instantiation * inst)
14525 {
14526 yylloc = inst->loc;
14527 if(inst->_class)
14528 {
14529 struct MembersInit * members;
14530 struct Symbol * classSym;
14531 struct __ecereNameSpace__ecere__com__Class * _class;
14532
14533 classSym = inst->_class->__anon1.__anon1.symbol;
14534 _class = classSym ? classSym->__anon1.registered : (((void *)0));
14535 if(!_class || _class->type != 5)
14536 DeclareStruct(curExternal, inst->_class->__anon1.__anon1.name, 0, 1);
14537 afterExternal = afterExternal ? afterExternal : curExternal;
14538 if(inst->exp)
14539 ProcessExpressionType(inst->exp);
14540 inst->isConstant = 1;
14541 if(inst->members)
14542 {
14543 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
14544 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
14545 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
14546 int subMemberStackPos = 0;
14547
14548 for(members = (*inst->members).first; members; members = members->next)
14549 {
14550 switch(members->type)
14551 {
14552 case 1:
14553 {
14554 char name[1024];
14555 static unsigned int instMethodID = 0;
14556 struct External * external = curExternal;
14557 struct Context * context = curContext;
14558 struct Declarator * declarator = members->__anon1.function->declarator;
14559 struct Identifier * nameID = GetDeclId(declarator);
14560 char * unmangled = nameID ? nameID->string : (((void *)0));
14561 struct Expression * exp;
14562 struct External * createdExternal = (((void *)0));
14563
14564 if(inCompiler)
14565 {
14566 char number[16];
14567
14568 strcpy(name, "__ecereInstMeth_");
14569 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
14570 strcat(name, "_");
14571 strcat(name, nameID->string);
14572 strcat(name, "_");
14573 sprintf(number, "_%08d", instMethodID++);
14574 strcat(name, number);
14575 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
14576 }
14577 if(declarator)
14578 {
14579 struct Symbol * symbol = declarator->symbol;
14580 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
14581
14582 if(method && method->type == 1)
14583 {
14584 symbol->__anon1.method = method;
14585 ProcessMethodType(method);
14586 if(!symbol->type->__anon1.__anon2.thisClass)
14587 {
14588 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
14589 {
14590 if(!currentClass->symbol)
14591 currentClass->symbol = FindClass(currentClass->fullName);
14592 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
14593 }
14594 else
14595 {
14596 if(!_class->symbol)
14597 _class->symbol = FindClass(_class->fullName);
14598 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
14599 }
14600 }
14601 DeclareType(curExternal, symbol->type, 1, 1);
14602 }
14603 else if(classSym)
14604 {
14605 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
14606 }
14607 }
14608 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
14609 if(nameID)
14610 {
14611 FreeSpecifier(nameID->_class);
14612 nameID->_class = (((void *)0));
14613 }
14614 curExternal = createdExternal;
14615 if(inCompiler)
14616 {
14617 if(createdExternal->__anon1.function)
14618 ProcessFunction(createdExternal->__anon1.function);
14619 }
14620 else if(declarator)
14621 {
14622 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
14623 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
14624 }
14625 curExternal = external;
14626 curContext = context;
14627 if(inCompiler)
14628 {
14629 FreeClassFunction(members->__anon1.function);
14630 exp = QMkExpId(name);
14631 members->type = 0;
14632 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
14633 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
14634 }
14635 break;
14636 }
14637 case 0:
14638 {
14639 if(members->__anon1.dataMembers && classSym)
14640 {
14641 struct MemberInit * member;
14642 struct Location oldyyloc = yylloc;
14643
14644 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
14645 {
14646 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
14647 if(member->initializer && !member->initializer->isConstant)
14648 inst->isConstant = 0;
14649 }
14650 yylloc = oldyyloc;
14651 }
14652 break;
14653 }
14654 }
14655 }
14656 }
14657 }
14658 }
14659
14660 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList *  definitions, struct Symbol *  symbol);
14661
14662 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct, unsigned int warnClasses)
14663 {
14664 switch(spec->type)
14665 {
14666 case 0:
14667 {
14668 if(spec->__anon1.specifier == THISCLASS)
14669 {
14670 if(thisClass)
14671 {
14672 spec->type = 1;
14673 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14674 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14675 ProcessSpecifier(spec, declareStruct, 0);
14676 }
14677 }
14678 break;
14679 }
14680 case 1:
14681 {
14682 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
14683
14684 if(symbol)
14685 DeclareType(curExternal, symbol->type, 1, 1);
14686 else if(spec->__anon1.__anon1.symbol)
14687 {
14688 struct __ecereNameSpace__ecere__com__Class * c = spec->__anon1.__anon1.symbol->__anon1.registered;
14689
14690 if(warnClasses && !c)
14691 Compiler_Warning("Undeclared class %s\n", spec->__anon1.__anon1.name);
14692 DeclareStruct(curExternal, spec->__anon1.__anon1.name, c && c->type == 5, declareStruct && c && c->type == 1);
14693 }
14694 break;
14695 }
14696 case 2:
14697 {
14698 struct Enumerator * e;
14699
14700 if(spec->__anon1.__anon2.list)
14701 {
14702 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
14703 {
14704 if(e->exp)
14705 ProcessExpressionType(e->exp);
14706 }
14707 }
14708 if(inCompiler)
14709 break;
14710 }
14711 case 3:
14712 case 4:
14713 {
14714 if(spec->__anon1.__anon2.definitions)
14715 {
14716 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
14717
14718 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
14719 }
14720 break;
14721 }
14722 }
14723 }
14724
14725 static void ProcessDeclarator(struct Declarator * decl, unsigned int isFunction)
14726 {
14727 switch(decl->type)
14728 {
14729 case 1:
14730 if(decl->__anon1.identifier->classSym)
14731 {
14732 FreeSpecifier(decl->__anon1.identifier->_class);
14733 decl->__anon1.identifier->_class = (((void *)0));
14734 }
14735 break;
14736 case 3:
14737 if(decl->__anon1.array.exp)
14738 ProcessExpressionType(decl->__anon1.array.exp);
14739 case 0:
14740 case 2:
14741 case 4:
14742 case 5:
14743 case 6:
14744 case 7:
14745 {
14746 struct Identifier * id = (((void *)0));
14747 struct Specifier * classSpec = (((void *)0));
14748
14749 if(decl->type == 4)
14750 {
14751 id = GetDeclId(decl);
14752 if(id && id->_class)
14753 {
14754 classSpec = id->_class;
14755 id->_class = (((void *)0));
14756 }
14757 }
14758 if(decl->declarator)
14759 ProcessDeclarator(decl->declarator, isFunction);
14760 if(decl->type == 4)
14761 {
14762 if(classSpec)
14763 {
14764 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(classSpec), param->declarator = (((void *)0)), param);
14765
14766 if(!decl->__anon1.function.parameters)
14767 decl->__anon1.function.parameters = MkList();
14768 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
14769 }
14770 if(decl->__anon1.function.parameters)
14771 {
14772 struct TypeName * param;
14773
14774 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
14775 {
14776 if(param->qualifiers)
14777 {
14778 struct Specifier * spec;
14779
14780 for(spec = (*param->qualifiers).first; spec; spec = spec->next)
14781 {
14782 if(spec->type == 0)
14783 {
14784 if(spec->__anon1.specifier == TYPED_OBJECT)
14785 {
14786 struct Declarator * d = param->declarator;
14787 struct TypeName * newParam = (newParam = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), newParam->qualifiers = MkListOne(MkSpecifier(VOID)), newParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d), newParam);
14788
14789 if(!d || d->type != 5)
14790 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
14791 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14792 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
14793 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
14794 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
14795 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
14796 param = newParam;
14797 break;
14798 }
14799 else if(spec->__anon1.specifier == ANY_OBJECT)
14800 {
14801 struct Declarator * d = param->declarator;
14802
14803 FreeList(param->qualifiers, (void *)(FreeSpecifier));
14804 param->qualifiers = MkListOne(MkSpecifier(VOID));
14805 if(!d || d->type != 5)
14806 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
14807 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
14808 break;
14809 }
14810 else if(spec->__anon1.specifier == THISCLASS)
14811 {
14812 if(thisClass)
14813 {
14814 spec->type = 1;
14815 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
14816 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
14817 ProcessSpecifier(spec, 0, 0);
14818 }
14819 break;
14820 }
14821 }
14822 else if(spec->type == 1)
14823 {
14824 ProcessSpecifier(spec, isFunction, 1);
14825 }
14826 else if((spec->type == 3 || spec->type == 4) && !spec->__anon1.__anon2.definitions && spec->__anon1.__anon2.id && spec->__anon1.__anon2.id->string)
14827 {
14828 struct Declarator * d = param->declarator;
14829
14830 if(!d || d->type != 5)
14831 DeclareStruct(curExternal, spec->__anon1.__anon2.id->string, 0, 1);
14832 }
14833 }
14834 }
14835 if(param->declarator)
14836 ProcessDeclarator(param->declarator, 0);
14837 }
14838 }
14839 }
14840 break;
14841 }
14842 }
14843 }
14844
14845 static void ProcessDeclaration(struct Declaration * decl, unsigned int warnClasses)
14846 {
14847 yylloc = decl->loc;
14848 switch(decl->type)
14849 {
14850 case 1:
14851 {
14852 unsigned int declareStruct = 0;
14853
14854 if(decl->__anon1.__anon1.declarators)
14855 {
14856 struct InitDeclarator * d;
14857
14858 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14859 {
14860 struct Type * type, * subType;
14861
14862 ProcessDeclarator(d->declarator, 0);
14863 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14864 if(d->initializer)
14865 {
14866 ProcessInitializer(d->initializer, type);
14867 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
14868 {
14869 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
14870 {
14871 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
14872
14873 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
14874 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
14875 if(decl->__anon1.__anon1.specifiers)
14876 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
14877 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
14878 d = (((void *)0));
14879 decl->type = 2;
14880 decl->__anon1.inst = inst;
14881 }
14882 }
14883 }
14884 for(subType = type; subType; )
14885 {
14886 if(subType->kind == 8)
14887 {
14888 declareStruct = 1;
14889 break;
14890 }
14891 else if(subType->kind == 13)
14892 break;
14893 else if(subType->kind == 12)
14894 subType = subType->__anon1.__anon4.arrayType;
14895 else
14896 break;
14897 }
14898 FreeType(type);
14899 if(!d)
14900 break;
14901 }
14902 }
14903 if(decl->__anon1.__anon1.specifiers)
14904 {
14905 struct Specifier * s;
14906
14907 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
14908 {
14909 ProcessSpecifier(s, declareStruct, 1);
14910 }
14911 }
14912 break;
14913 }
14914 case 2:
14915 {
14916 ProcessInstantiationType(decl->__anon1.inst);
14917 break;
14918 }
14919 case 0:
14920 {
14921 struct Specifier * spec;
14922 struct Declarator * d;
14923 unsigned int declareStruct = 0;
14924
14925 if(decl->__anon1.__anon1.declarators)
14926 {
14927 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
14928 {
14929 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
14930 struct Type * subType;
14931
14932 ProcessDeclarator(d, 0);
14933 for(subType = type; subType; )
14934 {
14935 if(subType->kind == 8)
14936 {
14937 declareStruct = 1;
14938 break;
14939 }
14940 else if(subType->kind == 13)
14941 break;
14942 else if(subType->kind == 12)
14943 subType = subType->__anon1.__anon4.arrayType;
14944 else
14945 break;
14946 }
14947 FreeType(type);
14948 }
14949 }
14950 if(decl->__anon1.__anon1.specifiers)
14951 {
14952 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
14953 ProcessSpecifier(spec, declareStruct, warnClasses);
14954 }
14955 break;
14956 }
14957 }
14958 }
14959
14960 static void ProcessStatement(struct Statement * stmt)
14961 {
14962 yylloc = stmt->loc;
14963 switch(stmt->type)
14964 {
14965 case 0:
14966 ProcessStatement(stmt->__anon1.labeled.stmt);
14967 break;
14968 case 1:
14969 if(stmt->__anon1.caseStmt.exp)
14970 {
14971 FreeType(stmt->__anon1.caseStmt.exp->destType);
14972 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
14973 if(curSwitchType)
14974 curSwitchType->refCount++;
14975 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
14976 ComputeExpression(stmt->__anon1.caseStmt.exp);
14977 }
14978 if(stmt->__anon1.caseStmt.stmt)
14979 ProcessStatement(stmt->__anon1.caseStmt.stmt);
14980 break;
14981 case 2:
14982 {
14983 if(stmt->__anon1.compound.context)
14984 {
14985 struct Declaration * decl;
14986 struct Statement * s;
14987 struct Statement * prevCompound = curCompound;
14988 struct Context * prevContext = curContext;
14989
14990 if(!stmt->__anon1.compound.isSwitch)
14991 curCompound = stmt;
14992 curContext = stmt->__anon1.compound.context;
14993 if(stmt->__anon1.compound.declarations)
14994 {
14995 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
14996 ProcessDeclaration(decl, 1);
14997 }
14998 if(stmt->__anon1.compound.statements)
14999 {
15000 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
15001 ProcessStatement(s);
15002 }
15003 curContext = prevContext;
15004 curCompound = prevCompound;
15005 }
15006 break;
15007 }
15008 case 3:
15009 {
15010 struct Expression * exp;
15011
15012 if(stmt->__anon1.expressions)
15013 {
15014 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15015 ProcessExpressionType(exp);
15016 }
15017 break;
15018 }
15019 case 4:
15020 {
15021 struct Expression * exp;
15022
15023 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
15024 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
15025 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
15026 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
15027 {
15028 ProcessExpressionType(exp);
15029 }
15030 if(stmt->__anon1.ifStmt.stmt)
15031 ProcessStatement(stmt->__anon1.ifStmt.stmt);
15032 if(stmt->__anon1.ifStmt.elseStmt)
15033 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
15034 break;
15035 }
15036 case 5:
15037 {
15038 struct Type * oldSwitchType = curSwitchType;
15039
15040 if(stmt->__anon1.switchStmt.exp)
15041 {
15042 struct Expression * exp;
15043
15044 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
15045 {
15046 if(!exp->next)
15047 {
15048 ProcessExpressionType(exp);
15049 }
15050 if(!exp->next)
15051 curSwitchType = exp->expType;
15052 }
15053 }
15054 ProcessStatement(stmt->__anon1.switchStmt.stmt);
15055 curSwitchType = oldSwitchType;
15056 break;
15057 }
15058 case 6:
15059 {
15060 if(stmt->__anon1.whileStmt.exp)
15061 {
15062 struct Expression * exp;
15063
15064 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
15065 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
15066 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
15067 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
15068 {
15069 ProcessExpressionType(exp);
15070 }
15071 }
15072 if(stmt->__anon1.whileStmt.stmt)
15073 ProcessStatement(stmt->__anon1.whileStmt.stmt);
15074 break;
15075 }
15076 case 7:
15077 {
15078 if(stmt->__anon1.doWhile.exp)
15079 {
15080 struct Expression * exp;
15081
15082 if((*stmt->__anon1.doWhile.exp).last)
15083 {
15084 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
15085 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
15086 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
15087 }
15088 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
15089 {
15090 ProcessExpressionType(exp);
15091 }
15092 }
15093 if(stmt->__anon1.doWhile.stmt)
15094 ProcessStatement(stmt->__anon1.doWhile.stmt);
15095 break;
15096 }
15097 case 8:
15098 {
15099 struct Expression * exp;
15100
15101 if(stmt->__anon1.forStmt.init)
15102 ProcessStatement(stmt->__anon1.forStmt.init);
15103 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
15104 {
15105 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
15106 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
15107 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
15108 }
15109 if(stmt->__anon1.forStmt.check)
15110 ProcessStatement(stmt->__anon1.forStmt.check);
15111 if(stmt->__anon1.forStmt.increment)
15112 {
15113 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
15114 ProcessExpressionType(exp);
15115 }
15116 if(stmt->__anon1.forStmt.stmt)
15117 ProcessStatement(stmt->__anon1.forStmt.stmt);
15118 break;
15119 }
15120 case 18:
15121 {
15122 struct Identifier * id = stmt->__anon1.forEachStmt.id;
15123 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
15124 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
15125 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
15126 char iteratorType[1024];
15127 struct Type * source;
15128 struct Expression * e;
15129 unsigned int isBuiltin = exp && (*exp).last && (((struct Expression *)(*exp).last)->type == 35 || (((struct Expression *)(*exp).last)->type == 11 && ((struct Expression *)(*exp).last)->__anon1.cast.exp->type == 35));
15130 struct Expression * arrayExp;
15131 const char * typeString = (((void *)0));
15132 int builtinCount = 0;
15133
15134 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
15135 {
15136 if(!e->next)
15137 {
15138 FreeType(e->destType);
15139 e->destType = ProcessTypeString("Container", 0);
15140 }
15141 if(!isBuiltin || e->next)
15142 ProcessExpressionType(e);
15143 }
15144 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
15145 if(isBuiltin || (source && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, containerClass)))
15146 {
15147 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
15148 struct Symbol * symbol;
15149 struct Expression * expIt = (((void *)0));
15150 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
15151 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
15152 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
15153 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
15154
15155 if(inCompiler)
15156 {
15157 stmt->type = 2;
15158 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
15159 stmt->__anon1.compound.context->parent = curContext;
15160 curContext = stmt->__anon1.compound.context;
15161 }
15162 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
15163 {
15164 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
15165
15166 isCustomAVLTree = 1;
15167 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
15168 isMap = 1;
15169 }
15170 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
15171 isArray = 1;
15172 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
15173 {
15174 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
15175
15176 isLinkList = 1;
15177 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
15178 }
15179 if(inCompiler && isArray)
15180 {
15181 struct Declarator * decl;
15182 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15183
15184 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
15185 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15186 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
15187 }
15188 else if(isBuiltin)
15189 {
15190 struct Type * type = (((void *)0));
15191 char typeStringBuf[1024];
15192
15193 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
15194 if(((struct Expression *)(*exp).last)->type == 11)
15195 {
15196 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
15197
15198 if(typeName)
15199 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
15200 }
15201 if(arrayExp->destType && arrayExp->destType->kind == 8 && arrayExp->destType->__anon1._class && arrayExp->destType->__anon1._class->__anon1.registered && arrayExp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(arrayExp->destType->__anon1._class->__anon1.registered, containerClass) && arrayExp->destType->__anon1._class->__anon1.registered->templateArgs)
15202 {
15203 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
15204
15205 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
15206 }
15207 else if(arrayExp->__anon1.list)
15208 {
15209 struct Expression * e;
15210
15211 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15212 {
15213 ProcessExpressionType(e);
15214 if(e->expType)
15215 {
15216 if(!type)
15217 {
15218 type = e->expType;
15219 type->refCount++;
15220 }
15221 else
15222 {
15223 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15224 {
15225 FreeType(type);
15226 type = e->expType;
15227 e->expType = (((void *)0));
15228 e = (*arrayExp->__anon1.list).first;
15229 ProcessExpressionType(e);
15230 if(e->expType)
15231 {
15232 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
15233 {
15234 FreeType(e->expType);
15235 e->expType = (((void *)0));
15236 FreeType(type);
15237 type = (((void *)0));
15238 break;
15239 }
15240 }
15241 }
15242 }
15243 if(e->expType)
15244 {
15245 FreeType(e->expType);
15246 e->expType = (((void *)0));
15247 }
15248 }
15249 }
15250 if(type)
15251 {
15252 typeStringBuf[0] = '\0';
15253 PrintType(type, typeStringBuf, 0, 1);
15254 typeString = typeStringBuf;
15255 FreeType(type);
15256 }
15257 }
15258 if(typeString)
15259 {
15260 if(inCompiler)
15261 {
15262 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
15263 struct Declarator * decl;
15264 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15265
15266 if(arrayExp->__anon1.list)
15267 {
15268 struct Expression * e;
15269
15270 builtinCount = (*arrayExp->__anon1.list).count;
15271 type = ProcessTypeString(typeString, 0);
15272 while((e = (*arrayExp->__anon1.list).first))
15273 {
15274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
15275 e->destType = type;
15276 type->refCount++;
15277 ProcessExpressionType(e);
15278 if(inCompiler)
15279 ListAdd(initializers, MkInitializerAssignment(e));
15280 }
15281 FreeType(type);
15282 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
15283 }
15284 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
15285 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
15286 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
15287 FreeList(exp, (void *)(FreeExpression));
15288 }
15289 else if(arrayExp->__anon1.list)
15290 {
15291 struct Expression * e;
15292
15293 type = ProcessTypeString(typeString, 0);
15294 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
15295 {
15296 e->destType = type;
15297 type->refCount++;
15298 ProcessExpressionType(e);
15299 }
15300 FreeType(type);
15301 }
15302 }
15303 else
15304 {
15305 arrayExp->expType = ProcessTypeString("Container", 0);
15306 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
15307 }
15308 }
15309 else if(inCompiler && isLinkList && !isList)
15310 {
15311 struct Declarator * decl;
15312 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15313
15314 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
15315 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
15316 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
15317 }
15318 else if(inCompiler && _class->templateArgs)
15319 {
15320 if(isMap)
15321 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
15322 else
15323 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
15324 stmt->__anon1.compound.declarations = MkListOne(MkDeclarationInst(MkInstantiationNamed(MkListOne(MkSpecifierName(iteratorType)), MkExpIdentifier(id), MkListOne(MkMembersInitList(MkListOne(MkMemberInit(isMap ? MkListOne(MkIdentifier("map")) : (((void *)0)), MkInitializerAssignment(MkExpBrackets(exp)))))))));
15325 }
15326 if(inCompiler)
15327 {
15328 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
15329 if(block)
15330 {
15331 switch(block->type)
15332 {
15333 case 2:
15334 if(block->__anon1.compound.context)
15335 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15336 break;
15337 case 4:
15338 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
15339 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15340 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
15341 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15342 break;
15343 case 5:
15344 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
15345 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15346 break;
15347 case 6:
15348 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
15349 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15350 break;
15351 case 7:
15352 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
15353 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15354 break;
15355 case 8:
15356 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
15357 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15358 break;
15359 case 18:
15360 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
15361 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
15362 break;
15363 }
15364 }
15365 if(filter)
15366 {
15367 block = MkIfStmt(filter, block, (((void *)0)));
15368 }
15369 if(isArray)
15370 {
15371 stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("array")), '+', MkExpMember(MkExpIdentifier(MkIdentifier("__internalArray")), MkIdentifier("count")))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
15372 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15373 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15374 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15375 }
15376 else if(isBuiltin)
15377 {
15378 char count[128];
15379
15380 sprintf(count, "%d", builtinCount);
15381 stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpIdentifier(MkIdentifier("__internalArray"))))), MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '<', MkExpOp(MkExpIdentifier(MkIdentifier("__internalArray")), '+', MkExpConstant(count))))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), INC_OP, (((void *)0)))), block));
15382 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15383 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15384 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15385 }
15386 else if(isLinkList && !isList)
15387 {
15388 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
15389 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
15390
15391 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
15392 {
15393 stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("next")))), block));
15394 }
15395 else
15396 {
15397 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15398 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
15399
15400 stmt->__anon1.compound.statements = MkListOne(MkForStmt(MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("first"))))), MkExpressionStmt(MkListOne(MkExpIdentifier(CopyIdentifier(id)))), MkListOne(MkExpOp(MkExpIdentifier(CopyIdentifier(id)), '=', MkExpCast(MkTypeName(specs, decl), MkExpCall(MkExpMember(MkExpIdentifier(MkIdentifier("__internalLinkList")), MkIdentifier("GetNext")), MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("IteratorPointer")), (((void *)0))), MkExpIdentifier(CopyIdentifier(id)))))))), block));
15401 }
15402 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
15403 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
15404 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
15405 }
15406 else
15407 {
15408 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
15409 }
15410 ProcessExpressionType(expIt);
15411 if((*stmt->__anon1.compound.declarations).first)
15412 ProcessDeclaration((*stmt->__anon1.compound.declarations).first, 1);
15413 if(symbol)
15414 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
15415 ProcessStatement(stmt);
15416 }
15417 else
15418 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
15419 if(inCompiler)
15420 curContext = stmt->__anon1.compound.context->parent;
15421 break;
15422 }
15423 else
15424 {
15425 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
15426 }
15427 break;
15428 }
15429 case 9:
15430 break;
15431 case 10:
15432 break;
15433 case 11:
15434 break;
15435 case 12:
15436 {
15437 struct Expression * exp;
15438
15439 if(stmt->__anon1.expressions)
15440 {
15441 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
15442 {
15443 if(!exp->next)
15444 {
15445 if(curFunction && !curFunction->type)
15446 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
15447 FreeType(exp->destType);
15448 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
15449 if(exp->destType)
15450 exp->destType->refCount++;
15451 }
15452 ProcessExpressionType(exp);
15453 }
15454 }
15455 break;
15456 }
15457 case 14:
15458 {
15459 ProcessDeclaration(stmt->__anon1.decl, 1);
15460 break;
15461 }
15462 case 13:
15463 {
15464 struct AsmField * field;
15465
15466 if(stmt->__anon1.asmStmt.inputFields)
15467 {
15468 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
15469 if(field->expression)
15470 ProcessExpressionType(field->expression);
15471 }
15472 if(stmt->__anon1.asmStmt.outputFields)
15473 {
15474 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
15475 if(field->expression)
15476 ProcessExpressionType(field->expression);
15477 }
15478 if(stmt->__anon1.asmStmt.clobberedFields)
15479 {
15480 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
15481 {
15482 if(field->expression)
15483 ProcessExpressionType(field->expression);
15484 }
15485 }
15486 break;
15487 }
15488 case 17:
15489 {
15490 struct PropertyWatch * propWatch;
15491 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15492 struct Expression * object = stmt->__anon1._watch.object;
15493 struct Expression * watcher = stmt->__anon1._watch.watcher;
15494
15495 if(watcher)
15496 ProcessExpressionType(watcher);
15497 if(object)
15498 ProcessExpressionType(object);
15499 if(inCompiler)
15500 {
15501 if(watcher || thisClass)
15502 {
15503 struct External * external = curExternal;
15504 struct Context * context = curContext;
15505
15506 stmt->type = 3;
15507 stmt->__anon1.expressions = MkList();
15508 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15509 {
15510 struct ClassFunction * func;
15511 char watcherName[1024];
15512 struct __ecereNameSpace__ecere__com__Class * watcherClass = watcher ? ((watcher->expType && watcher->expType->kind == 8 && watcher->expType->__anon1._class) ? watcher->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15513 struct External * createdExternal;
15514
15515 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
15516 if(propWatch->deleteWatch)
15517 strcat(watcherName, "_delete");
15518 else
15519 {
15520 struct Identifier * propID;
15521
15522 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15523 {
15524 strcat(watcherName, "_");
15525 strcat(watcherName, propID->string);
15526 }
15527 }
15528 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
15529 {
15530 func = MkClassFunction(MkListOne(MkSpecifier(VOID)), (((void *)0)), MkDeclaratorFunction(MkDeclaratorIdentifier(MkIdentifier(watcherName)), MkListOne(MkTypeName(MkListOne(MkSpecifierName(object->expType->__anon1._class->string)), MkDeclaratorIdentifier(MkIdentifier("value"))))), (((void *)0)));
15531 ProcessClassFunctionBody(func, propWatch->compound);
15532 propWatch->compound = (((void *)0));
15533 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
15534 FreeClassFunction(func);
15535 curExternal = createdExternal;
15536 ProcessFunction(createdExternal->__anon1.function);
15537 if(propWatch->deleteWatch)
15538 {
15539 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15540
15541 ListAdd(args, CopyExpression(object));
15542 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15543 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
15544 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
15545 }
15546 else
15547 {
15548 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
15549 struct Identifier * propID;
15550
15551 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
15552 {
15553 char propName[1024];
15554 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15555
15556 if(prop)
15557 {
15558 char getName[1024], setName[1024];
15559 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15560
15561 DeclareProperty(createdExternal, prop, setName, getName);
15562 strcpy(propName, "__ecereProp_");
15563 FullClassNameCat(propName, prop->_class->fullName, 0);
15564 strcat(propName, "_");
15565 FullClassNameCat(propName, prop->name, 1);
15566 ListAdd(args, CopyExpression(object));
15567 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15568 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15569 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
15570 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
15571 __ecereMethod_External_CreateUniqueEdge(external, createdExternal, 1);
15572 }
15573 else
15574 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15575 }
15576 }
15577 }
15578 else
15579 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
15580 }
15581 curExternal = external;
15582 curContext = context;
15583 if(watcher)
15584 FreeExpression(watcher);
15585 if(object)
15586 FreeExpression(object);
15587 FreeList(watches, (void *)(FreePropertyWatch));
15588 }
15589 else
15590 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15591 }
15592 else
15593 {
15594 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
15595 {
15596 ProcessStatement(propWatch->compound);
15597 }
15598 }
15599 break;
15600 }
15601 case 15:
15602 {
15603 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15604 struct Expression * object = stmt->__anon1._watch.object;
15605 struct __ecereNameSpace__ecere__com__Class * _class;
15606
15607 if(object)
15608 ProcessExpressionType(object);
15609 if(inCompiler)
15610 {
15611 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
15612 if(_class)
15613 {
15614 struct Identifier * propID;
15615
15616 stmt->type = 3;
15617 stmt->__anon1.expressions = MkList();
15618 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
15619 {
15620 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
15621 }
15622 else if(!watches)
15623 {
15624 }
15625 if(watches)
15626 {
15627 for(propID = (*watches).first; propID; propID = propID->next)
15628 {
15629 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15630
15631 if(prop)
15632 {
15633 CreateFireWatcher(prop, object, stmt);
15634 }
15635 else
15636 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15637 }
15638 }
15639 else
15640 {
15641 struct __ecereNameSpace__ecere__com__Property * prop;
15642 struct __ecereNameSpace__ecere__com__Class * base;
15643
15644 for(base = _class; base; base = base->base)
15645 {
15646 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
15647 {
15648 if(prop->isProperty && prop->isWatchable)
15649 {
15650 CreateFireWatcher(prop, object, stmt);
15651 }
15652 }
15653 }
15654 }
15655 if(object)
15656 FreeExpression(object);
15657 FreeList(watches, (void *)(FreeIdentifier));
15658 }
15659 else
15660 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15661 }
15662 break;
15663 }
15664 case 16:
15665 {
15666 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
15667 struct Expression * object = stmt->__anon1._watch.object;
15668 struct Expression * watcher = stmt->__anon1._watch.watcher;
15669 struct __ecereNameSpace__ecere__com__Class * _class;
15670
15671 if(object)
15672 ProcessExpressionType(object);
15673 if(watcher)
15674 ProcessExpressionType(watcher);
15675 if(inCompiler)
15676 {
15677 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
15678 if(watcher || thisClass)
15679 {
15680 if(_class)
15681 {
15682 struct Identifier * propID;
15683
15684 stmt->type = 3;
15685 stmt->__anon1.expressions = MkList();
15686 if(!watches)
15687 {
15688 struct __ecereNameSpace__ecere__sys__OldList * args;
15689
15690 args = MkList();
15691 ListAdd(args, CopyExpression(object));
15692 ListAdd(args, MkExpConstant("0"));
15693 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15694 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15695 }
15696 else
15697 {
15698 for(propID = (*watches).first; propID; propID = propID->next)
15699 {
15700 char propName[1024];
15701 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
15702
15703 if(prop)
15704 {
15705 char getName[1024], setName[1024];
15706 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
15707
15708 DeclareProperty(curExternal, prop, setName, getName);
15709 strcpy(propName, "__ecereProp_");
15710 FullClassNameCat(propName, prop->_class->fullName, 0);
15711 strcat(propName, "_");
15712 FullClassNameCat(propName, prop->name, 1);
15713 ListAdd(args, CopyExpression(object));
15714 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
15715 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
15716 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
15717 }
15718 else
15719 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
15720 }
15721 }
15722 if(object)
15723 FreeExpression(object);
15724 if(watcher)
15725 FreeExpression(watcher);
15726 FreeList(watches, (void *)(FreeIdentifier));
15727 }
15728 else
15729 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
15730 }
15731 else
15732 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
15733 }
15734 break;
15735 }
15736 }
15737 }
15738
15739 void ComputeDataTypes()
15740 {
15741 struct External * external;
15742
15743 currentClass = (((void *)0));
15744 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
15745 DeclareStruct((((void *)0)), "ecere::com::Class", 0, 1);
15746 DeclareStruct((((void *)0)), "ecere::com::Instance", 0, 1);
15747 DeclareStruct((((void *)0)), "ecere::com::Property", 0, 1);
15748 DeclareStruct((((void *)0)), "ecere::com::DataMember", 0, 1);
15749 DeclareStruct((((void *)0)), "ecere::com::Method", 0, 1);
15750 DeclareStruct((((void *)0)), "ecere::com::SerialBuffer", 0, 1);
15751 DeclareStruct((((void *)0)), "ecere::com::ClassTemplateArgument", 0, 1);
15752 DeclareFunctionUtil((((void *)0)), "eSystem_New");
15753 DeclareFunctionUtil((((void *)0)), "eSystem_New0");
15754 DeclareFunctionUtil((((void *)0)), "eSystem_Renew");
15755 DeclareFunctionUtil((((void *)0)), "eSystem_Renew0");
15756 DeclareFunctionUtil((((void *)0)), "eSystem_Delete");
15757 DeclareFunctionUtil((((void *)0)), "eClass_GetProperty");
15758 DeclareFunctionUtil((((void *)0)), "eClass_SetProperty");
15759 DeclareFunctionUtil((((void *)0)), "eInstance_FireSelfWatchers");
15760 DeclareFunctionUtil((((void *)0)), "eInstance_SetMethod");
15761 DeclareFunctionUtil((((void *)0)), "eInstance_IncRef");
15762 DeclareFunctionUtil((((void *)0)), "eInstance_StopWatching");
15763 DeclareFunctionUtil((((void *)0)), "eInstance_Watch");
15764 DeclareFunctionUtil((((void *)0)), "eInstance_FireWatchers");
15765 reachedPass15 = 1;
15766 for(external = (*ast).first; external; external = external->next)
15767 {
15768 afterExternal = curExternal = external;
15769 if(external->type == 0)
15770 {
15771 if(memoryGuard)
15772 {
15773 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15774 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15775 }
15776 currentClass = external->__anon1.function->_class;
15777 ProcessFunction(external->__anon1.function);
15778 }
15779 else if(external->type == 1)
15780 {
15781 if(memoryGuard && external->__anon1.declaration && external->__anon1.declaration->type == 2)
15782 {
15783 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15784 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15785 }
15786 currentClass = (((void *)0));
15787 if(external->__anon1.declaration)
15788 ProcessDeclaration(external->__anon1.declaration, 1);
15789 }
15790 else if(external->type == 2)
15791 {
15792 struct ClassDefinition * _class = external->__anon1._class;
15793
15794 currentClass = external->symbol->__anon1.registered;
15795 if(memoryGuard)
15796 {
15797 DeclareFunctionUtil(external, "MemoryGuard_PushLoc");
15798 DeclareFunctionUtil(external, "MemoryGuard_PopLoc");
15799 }
15800 if(_class->definitions)
15801 {
15802 ProcessClass(_class->definitions, _class->symbol);
15803 }
15804 if(inCompiler)
15805 {
15806 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
15807 ((external ? __extension__ ({
15808 void * __ecerePtrToDelete = (external);
15809
15810 __ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
15811 }) : 0), external = 0);
15812 }
15813 }
15814 else if(external->type == 4)
15815 {
15816 thisNameSpace = external->__anon1.id->string;
15817 }
15818 }
15819 currentClass = (((void *)0));
15820 thisNameSpace = (((void *)0));
15821 curExternal = (((void *)0));
15822 }
15823
15824 void ProcessExpressionType(struct Expression * exp)
15825 {
15826 unsigned int unresolved = 0;
15827 struct Location oldyylloc = yylloc;
15828 unsigned int notByReference = 0;
15829
15830 if(!exp || exp->expType)
15831 return ;
15832 yylloc = exp->loc;
15833 switch(exp->type)
15834 {
15835 case 0:
15836 {
15837 struct Identifier * id = exp->__anon1.__anon1.identifier;
15838
15839 if(!id || !topContext)
15840 return ;
15841 if(id->_class && id->_class->__anon1.__anon1.name)
15842 {
15843 id->classSym = id->_class->__anon1.__anon1.symbol;
15844 }
15845 if(!strcmp(id->string, "__runtimePlatform"))
15846 {
15847 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
15848 break;
15849 }
15850 else if(strstr(id->string, "__ecereClass") == id->string)
15851 {
15852 exp->expType = ProcessTypeString("ecere::com::Class", 1);
15853 break;
15854 }
15855 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
15856 {
15857 ReplaceClassMembers(exp, thisClass);
15858 if(exp->type != 0)
15859 {
15860 ProcessExpressionType(exp);
15861 break;
15862 }
15863 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
15864 break;
15865 }
15866 else
15867 {
15868 struct Symbol * symbol = (((void *)0));
15869 unsigned int findInGlobal = 0;
15870
15871 if(!topContext->parent && exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered->type == 4)
15872 findInGlobal = 1;
15873 else
15874 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15875 if(!symbol)
15876 {
15877 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
15878 break;
15879 else
15880 {
15881 if(thisClass)
15882 {
15883 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
15884 if(exp->type != 0)
15885 {
15886 ProcessExpressionType(exp);
15887 break;
15888 }
15889 }
15890 else if(currentClass && !id->_class)
15891 {
15892 if(ResolveIdWithClass(exp, currentClass, 1))
15893 break;
15894 }
15895 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15896 }
15897 }
15898 if(findInGlobal)
15899 symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
15900 if(symbol)
15901 {
15902 struct Type * type = symbol->type;
15903 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
15904
15905 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
15906 {
15907 struct Context * context = SetupTemplatesContext(_class);
15908
15909 type = ReplaceThisClassType(_class);
15910 FinishTemplatesContext(context);
15911 if(type)
15912 type->refCount = 0;
15913 }
15914 FreeSpecifier(id->_class);
15915 id->_class = (((void *)0));
15916 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
15917 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
15918 id->classSym = (((void *)0));
15919 exp->expType = type;
15920 if(type)
15921 type->refCount++;
15922 if(type && (type->kind == 15))
15923 exp->isConstant = 1;
15924 if(symbol->isParam || !strcmp(id->string, "this"))
15925 {
15926 if(_class && _class->type == 1 && !type->declaredWithStruct)
15927 exp->byReference = 1;
15928 }
15929 if(symbol->isIterator)
15930 {
15931 if(symbol->isIterator == 3)
15932 {
15933 exp->type = 5;
15934 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
15935 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
15936 exp->expType = (((void *)0));
15937 ProcessExpressionType(exp);
15938 }
15939 else if(symbol->isIterator != 4)
15940 {
15941 exp->type = 8;
15942 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
15943 exp->__anon1.member.exp->expType = exp->expType;
15944 exp->__anon1.member.member = MkIdentifier("data");
15945 exp->expType = (((void *)0));
15946 ProcessExpressionType(exp);
15947 }
15948 }
15949 break;
15950 }
15951 else
15952 {
15953 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
15954
15955 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
15956 {
15957 char name[1024];
15958
15959 strcpy(name, thisNameSpace);
15960 strcat(name, "::");
15961 strcat(name, id->string);
15962 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
15963 }
15964 if(!definedExp)
15965 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
15966 if(definedExp)
15967 {
15968 int c;
15969
15970 for(c = 0; c < definedExpStackPos; c++)
15971 if(definedExpStack[c] == definedExp)
15972 break;
15973 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
15974 {
15975 struct Location backupYylloc = yylloc;
15976 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
15977
15978 definedExpStack[definedExpStackPos++] = definedExp;
15979 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
15980 (__extension__ ({
15981 int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count);
15982
15983 __internal_VirtualMethod = ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void *  buffer, unsigned int size, unsigned int count))__extension__ ({
15984 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15985
15986 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15987 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write]);
15988 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, definedExp->value, 1, strlen(definedExp->value)) : (int)1;
15989 }));
15990 (__extension__ ({
15991 unsigned int (*  __internal_VirtualMethod)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode);
15992
15993 __internal_VirtualMethod = ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
15994 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
15995
15996 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
15997 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek]);
15998 __internal_VirtualMethod ? __internal_VirtualMethod(fileInput, 0, 0) : (unsigned int)1;
15999 }));
16000 echoOn = 0;
16001 parsedExpression = (((void *)0));
16002 resetScanner();
16003 expression_yyparse();
16004 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
16005 if(backInput)
16006 fileInput = backInput;
16007 yylloc = backupYylloc;
16008 if(parsedExpression)
16009 {
16010 FreeIdentifier(id);
16011 exp->type = 5;
16012 exp->__anon1.list = MkListOne(parsedExpression);
16013 ApplyLocation(parsedExpression, &yylloc);
16014 ProcessExpressionType(exp);
16015 definedExpStackPos--;
16016 return ;
16017 }
16018 definedExpStackPos--;
16019 }
16020 else
16021 {
16022 if(inCompiler)
16023 {
16024 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
16025 }
16026 }
16027 }
16028 else
16029 {
16030 struct GlobalData * data = (((void *)0));
16031
16032 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16033 {
16034 char name[1024];
16035
16036 strcpy(name, thisNameSpace);
16037 strcat(name, "::");
16038 strcat(name, id->string);
16039 data = FindGlobalData(name);
16040 }
16041 if(!data)
16042 data = FindGlobalData(id->string);
16043 if(data)
16044 {
16045 DeclareGlobalData(curExternal, data);
16046 exp->expType = data->dataType;
16047 if(data->dataType)
16048 data->dataType->refCount++;
16049 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16050 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
16051 FreeSpecifier(id->_class);
16052 id->_class = (((void *)0));
16053 break;
16054 }
16055 else
16056 {
16057 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
16058
16059 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
16060 {
16061 char name[1024];
16062
16063 strcpy(name, thisNameSpace);
16064 strcat(name, "::");
16065 strcat(name, id->string);
16066 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
16067 }
16068 if(!function)
16069 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
16070 if(function)
16071 {
16072 char name[1024];
16073
16074 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16075 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
16076 name[0] = 0;
16077 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
16078 strcpy(name, "__ecereFunction_");
16079 FullClassNameCat(name, id->string, 0);
16080 if(DeclareFunction(curExternal, function, name))
16081 {
16082 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
16083 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
16084 }
16085 exp->expType = function->dataType;
16086 if(function->dataType)
16087 function->dataType->refCount++;
16088 FreeSpecifier(id->_class);
16089 id->_class = (((void *)0));
16090 break;
16091 }
16092 }
16093 }
16094 }
16095 }
16096 unresolved = 1;
16097 break;
16098 }
16099 case 1:
16100 {
16101 if(!exp->__anon1.instance->_class)
16102 {
16103 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
16104 {
16105 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
16106 }
16107 }
16108 ProcessInstantiationType(exp->__anon1.instance);
16109 exp->isConstant = exp->__anon1.instance->isConstant;
16110 if(exp->__anon1.instance->_class)
16111 {
16112 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
16113 }
16114 break;
16115 }
16116 case 2:
16117 {
16118 if(!exp->expType)
16119 {
16120 char * constant = exp->__anon1.__anon1.constant;
16121 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
16122
16123 exp->expType = type;
16124 if(constant[0] == '\'')
16125 {
16126 if((int)((unsigned char *)constant)[1] > 127)
16127 {
16128 int nb;
16129 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
16130
16131 if(nb < 2)
16132 ch = constant[1];
16133 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
16134 exp->__anon1.__anon1.constant = PrintUInt(ch);
16135 type->kind = 8;
16136 type->__anon1._class = FindClass("unichar");
16137 type->isSigned = 0;
16138 }
16139 else
16140 {
16141 type->kind = 1;
16142 type->isSigned = 1;
16143 }
16144 }
16145 else
16146 {
16147 char * dot = strchr(constant, '.');
16148 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
16149 char * exponent;
16150
16151 if(isHex)
16152 {
16153 exponent = strchr(constant, 'p');
16154 if(!exponent)
16155 exponent = strchr(constant, 'P');
16156 }
16157 else
16158 {
16159 exponent = strchr(constant, 'e');
16160 if(!exponent)
16161 exponent = strchr(constant, 'E');
16162 }
16163 if(dot || exponent)
16164 {
16165 if(strchr(constant, 'f') || strchr(constant, 'F'))
16166 type->kind = 6;
16167 else
16168 type->kind = 7;
16169 type->isSigned = 1;
16170 }
16171 else
16172 {
16173 unsigned int isSigned = constant[0] == '-';
16174 char * endP = (((void *)0));
16175 long long i64 = strtoll(constant, &endP, 0);
16176 uint64 ui64 = strtoull(constant, &endP, 0);
16177 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16178 unsigned int forceUnsigned = endP && (!strcmp(endP, "U") || !strcmp(endP, "u") || !strcmp(endP, "LLU") || !strcmp(endP, "llu") || !strcmp(endP, "ull") || !strcmp(endP, "ULL"));
16179
16180 if(isSigned)
16181 {
16182 if(i64 < (((int)0x80000000)))
16183 is64Bit = 1;
16184 }
16185 else
16186 {
16187 if(ui64 > (((int)0x7fffffff)))
16188 {
16189 if(ui64 > (0xffffffff))
16190 {
16191 is64Bit = 1;
16192 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
16193 isSigned = 1;
16194 }
16195 }
16196 else if(constant[0] != '0' || !constant[1])
16197 isSigned = 1;
16198 }
16199 if(forceUnsigned)
16200 isSigned = 0;
16201 type->kind = is64Bit ? 4 : 3;
16202 type->isSigned = isSigned;
16203 }
16204 }
16205 exp->isConstant = 1;
16206 if(exp->destType && exp->destType->kind == 7)
16207 type->kind = 7;
16208 else if(exp->destType && exp->destType->kind == 6)
16209 type->kind = 6;
16210 else if(exp->destType && exp->destType->kind == 4)
16211 type->kind = 4;
16212 }
16213 break;
16214 }
16215 case 3:
16216 {
16217 exp->isConstant = 1;
16218 exp->expType = __extension__ ({
16219 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16220
16221 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
16222 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16223
16224 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
16225 }), __ecereInstance2;
16226 });
16227 break;
16228 }
16229 case 13:
16230 case 26:
16231 ProcessExpressionType(exp->__anon1._new.size);
16232 exp->expType = __extension__ ({
16233 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16234
16235 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
16236 });
16237 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16238 break;
16239 case 14:
16240 case 27:
16241 ProcessExpressionType(exp->__anon1._renew.size);
16242 ProcessExpressionType(exp->__anon1._renew.exp);
16243 exp->expType = __extension__ ({
16244 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16245
16246 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
16247 });
16248 DeclareType(curExternal, exp->expType->__anon1.type, 1, 0);
16249 break;
16250 case 4:
16251 {
16252 unsigned int assign = 0, boolResult = 0, boolOps = 0;
16253 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
16254 unsigned int useDestType = 0, useSideType = 0;
16255 struct Location oldyylloc = yylloc;
16256 unsigned int useSideUnit = 0;
16257 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
16258 unsigned int powerOp = 0, relationOp = 0;
16259 struct __ecereNameSpace__ecere__com__Class * c1 = (((void *)0)), * c2 = (((void *)0));
16260 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
16261
16262 switch(exp->__anon1.op.op)
16263 {
16264 case '=':
16265 case MUL_ASSIGN:
16266 case DIV_ASSIGN:
16267 case MOD_ASSIGN:
16268 case ADD_ASSIGN:
16269 case SUB_ASSIGN:
16270 case LEFT_ASSIGN:
16271 case RIGHT_ASSIGN:
16272 case AND_ASSIGN:
16273 case XOR_ASSIGN:
16274 case OR_ASSIGN:
16275 assign = 1;
16276 break;
16277 case '!':
16278 break;
16279 case AND_OP:
16280 case OR_OP:
16281 boolOps = 1;
16282 boolResult = 1;
16283 break;
16284 case EQ_OP:
16285 case '<':
16286 case '>':
16287 case LE_OP:
16288 case GE_OP:
16289 case NE_OP:
16290 boolResult = 1;
16291 useSideType = 1;
16292 relationOp = 1;
16293 break;
16294 case '+':
16295 case '-':
16296 useSideUnit = 1;
16297 useSideType = 1;
16298 useDestType = 1;
16299 break;
16300 case LEFT_OP:
16301 case RIGHT_OP:
16302 break;
16303 case '|':
16304 case '^':
16305 useSideType = 1;
16306 useDestType = 1;
16307 break;
16308 case '/':
16309 case '%':
16310 useSideType = 1;
16311 useDestType = 1;
16312 if(exp->__anon1.op.op == '/')
16313 powerOp = 1;
16314 break;
16315 case '&':
16316 case '*':
16317 if(exp->__anon1.op.exp1)
16318 {
16319 useSideType = 1;
16320 useDestType = 1;
16321 if(exp->__anon1.op.op == '*')
16322 powerOp = 1;
16323 }
16324 break;
16325 }
16326 if(exp->__anon1.op.op == '&')
16327 {
16328 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
16329 {
16330 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
16331 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
16332
16333 if(symbol && symbol->isIterator == 2)
16334 {
16335 exp->type = 8;
16336 exp->__anon1.member.exp = exp->__anon1.op.exp2;
16337 exp->__anon1.member.member = MkIdentifier("key");
16338 exp->expType = (((void *)0));
16339 exp->__anon1.op.exp2->expType = symbol->type;
16340 symbol->type->refCount++;
16341 ProcessExpressionType(exp);
16342 FreeType(dummy);
16343 break;
16344 }
16345 }
16346 }
16347 if(exp->__anon1.op.exp1)
16348 {
16349 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
16350 useDestType = 0;
16351 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
16352 {
16353 if(exp->__anon1.op.exp1->destType)
16354 FreeType(exp->__anon1.op.exp1->destType);
16355 exp->__anon1.op.exp1->destType = exp->destType;
16356 exp->__anon1.op.exp1->opDestType = 1;
16357 if(exp->destType)
16358 exp->destType->refCount++;
16359 }
16360 else if(!assign)
16361 {
16362 if(exp->__anon1.op.exp1->destType)
16363 FreeType(exp->__anon1.op.exp1->destType);
16364 exp->__anon1.op.exp1->destType = dummy;
16365 dummy->refCount++;
16366 if(powerOp)
16367 exp->__anon1.op.exp1->opDestType = 1;
16368 if(relationOp)
16369 exp->__anon1.op.exp1->usedInComparison = 1;
16370 }
16371 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16372 {
16373 if(exp->opDestType)
16374 exp->__anon1.op.exp1->parentOpDestType = 1;
16375 if(exp->usedInComparison)
16376 exp->__anon1.op.exp1->usedInComparison = 1;
16377 }
16378 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16379 exp->__anon1.op.exp1->destType->count++;
16380 ProcessExpressionType(exp->__anon1.op.exp1);
16381 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
16382 exp->__anon1.op.exp1->destType->count--;
16383 exp->__anon1.op.exp1->opDestType = 0;
16384 exp->__anon1.op.exp1->usedInComparison = 0;
16385 if(!exp->__anon1.op.exp2 && (exp->__anon1.op.op == INC_OP || exp->__anon1.op.op == DEC_OP) && exp->__anon1.op.exp1->expType && exp->__anon1.op.exp1->expType->kind == 8 && exp->__anon1.op.exp1->expType->__anon1._class && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp1->expType->__anon1._class->__anon1.registered->type == 3)
16386 {
16387 exp->__anon1.op.exp2 = MkExpConstant("1");
16388 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
16389 assign = 1;
16390 }
16391 if(exp->__anon1.op.exp1->destType == dummy)
16392 {
16393 FreeType(dummy);
16394 exp->__anon1.op.exp1->destType = (((void *)0));
16395 }
16396 if(exp->__anon1.op.exp2)
16397 {
16398 if(!assign && exp->__anon1.op.exp1->expType && (exp->__anon1.op.exp1->expType->kind == 1 || exp->__anon1.op.exp1->expType->kind == 2))
16399 {
16400 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->kind = 3, type->isSigned = 1, type->refCount = 1, type->signedBeforePromotion = exp->__anon1.op.exp1->expType->isSigned, type->bitMemberSize = exp->__anon1.op.exp1->expType->bitMemberSize, type->promotedFrom = exp->__anon1.op.exp1->expType->kind, type);
16401
16402 FreeType(exp->__anon1.op.exp1->expType);
16403 exp->__anon1.op.exp1->expType = type;
16404 }
16405 }
16406 type1 = exp->__anon1.op.exp1->expType;
16407 }
16408 if(exp->__anon1.op.exp2)
16409 {
16410 char expString[10240];
16411
16412 expString[0] = '\0';
16413 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
16414 {
16415 if(exp->__anon1.op.exp1)
16416 {
16417 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
16418 if(exp->__anon1.op.exp1->expType)
16419 exp->__anon1.op.exp1->expType->refCount++;
16420 }
16421 else
16422 {
16423 exp->__anon1.op.exp2->destType = exp->destType;
16424 if(!exp->__anon1.op.exp1 || (exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^'))
16425 exp->__anon1.op.exp2->opDestType = 1;
16426 if(exp->destType)
16427 exp->destType->refCount++;
16428 }
16429 if(type1)
16430 type1->refCount++;
16431 exp->expType = type1;
16432 }
16433 else if(assign)
16434 {
16435 if(inCompiler)
16436 PrintExpression(exp->__anon1.op.exp2, expString);
16437 if(type1 && type1->kind == 13)
16438 {
16439 if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN || exp->__anon1.op.op == AND_ASSIGN || exp->__anon1.op.op == OR_ASSIGN)
16440 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
16441 else if(exp->__anon1.op.op == '=')
16442 {
16443 if(exp->__anon1.op.exp2->destType)
16444 FreeType(exp->__anon1.op.exp2->destType);
16445 exp->__anon1.op.exp2->destType = type1;
16446 if(type1)
16447 type1->refCount++;
16448 }
16449 }
16450 else
16451 {
16452 if(exp->__anon1.op.op == MUL_ASSIGN || exp->__anon1.op.op == DIV_ASSIGN || exp->__anon1.op.op == MOD_ASSIGN || exp->__anon1.op.op == LEFT_ASSIGN || exp->__anon1.op.op == RIGHT_ASSIGN)
16453 ;
16454 else
16455 {
16456 if(exp->__anon1.op.exp2->destType)
16457 FreeType(exp->__anon1.op.exp2->destType);
16458 exp->__anon1.op.exp2->destType = type1;
16459 if(type1)
16460 type1->refCount++;
16461 }
16462 }
16463 if(type1)
16464 type1->refCount++;
16465 exp->expType = type1;
16466 }
16467 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
16468 {
16469 if(exp->__anon1.op.exp2->destType)
16470 FreeType(exp->__anon1.op.exp2->destType);
16471 exp->__anon1.op.exp2->destType = exp->destType;
16472 if(exp->__anon1.op.op != '&' && exp->__anon1.op.op != '^')
16473 exp->__anon1.op.exp2->opDestType = 1;
16474 if(exp->destType)
16475 exp->destType->refCount++;
16476 }
16477 else
16478 {
16479 if(exp->__anon1.op.exp2->destType)
16480 FreeType(exp->__anon1.op.exp2->destType);
16481 exp->__anon1.op.exp2->destType = dummy;
16482 dummy->refCount++;
16483 if(powerOp)
16484 exp->__anon1.op.exp2->opDestType = 1;
16485 if(relationOp)
16486 exp->__anon1.op.exp2->usedInComparison = 1;
16487 }
16488 if(type1 && boolResult && useSideType && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && (type1->__anon1._class->__anon1.registered->type == 2 || type1->__anon1._class->__anon1.registered->type == 4))
16489 {
16490 FreeType(exp->__anon1.op.exp2->destType);
16491 exp->__anon1.op.exp2->destType = type1;
16492 type1->refCount++;
16493 }
16494 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16495 exp->__anon1.op.exp2->destType->count++;
16496 if(exp->__anon1.op.op == SIZEOF)
16497 {
16498 struct Expression * e = exp->__anon1.op.exp2;
16499
16500 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
16501 {
16502 if(e->type == 5 || e->type == 32 || e->type == 23)
16503 {
16504 if(e->type == 23)
16505 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
16506 else
16507 e = (*e->__anon1.list).last;
16508 }
16509 }
16510 if(e->type == 11 && e->__anon1.cast.exp)
16511 e->__anon1.cast.exp->needCast = 1;
16512 }
16513 if(exp->__anon1.op.op == '+' || exp->__anon1.op.op == '-')
16514 {
16515 if(exp->opDestType)
16516 exp->__anon1.op.exp2->parentOpDestType = 1;
16517 if(exp->usedInComparison)
16518 exp->__anon1.op.exp2->usedInComparison = 1;
16519 }
16520 ProcessExpressionType(exp->__anon1.op.exp2);
16521 exp->__anon1.op.exp2->opDestType = 0;
16522 exp->__anon1.op.exp2->usedInComparison = 0;
16523 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
16524 exp->__anon1.op.exp2->destType->count--;
16525 if(!assign && (exp->__anon1.op.exp1 || exp->__anon1.op.op == '~'))
16526 {
16527 if(exp->__anon1.op.exp2->expType && (exp->__anon1.op.exp2->expType->kind == 1 || exp->__anon1.op.exp2->expType->kind == 2))
16528 {
16529 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->kind = 3, type->isSigned = 1, type->refCount = 1, type->signedBeforePromotion = exp->__anon1.op.exp2->expType->isSigned, type->bitMemberSize = exp->__anon1.op.exp2->expType->bitMemberSize, type->promotedFrom = exp->__anon1.op.exp2->expType->kind, type);
16530
16531 FreeType(exp->__anon1.op.exp2->expType);
16532 exp->__anon1.op.exp2->expType = type;
16533 }
16534 }
16535 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
16536 {
16537 if(exp->__anon1.op.exp2->expType->kind == 23 || exp->__anon1.op.exp2->expType->kind == 22 || exp->__anon1.op.exp2->expType->kind == 4 || exp->__anon1.op.exp2->expType->kind == 3 || exp->__anon1.op.exp2->expType->kind == 2 || exp->__anon1.op.exp2->expType->kind == 1)
16538 {
16539 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
16540 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16541 }
16542 else if(exp->__anon1.op.exp2->expType->kind == 13 || exp->__anon1.op.exp2->expType->kind == 12 || exp->__anon1.op.exp2->expType->kind == 11 || exp->__anon1.op.exp2->expType->kind == 16 || (type1->__anon1.type->kind == 0 && exp->__anon1.op.exp2->expType->kind == 8 && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && (exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 0 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1 || exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 5)))
16543 {
16544 if(exp->__anon1.op.op == ADD_ASSIGN)
16545 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16546 }
16547 else if((exp->__anon1.op.exp2->expType->kind == 8 && type1->kind == 13 && type1->__anon1.type->kind == 8 && type1->__anon1.type->__anon1._class == exp->__anon1.op.exp2->expType->__anon1._class && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered && exp->__anon1.op.exp2->expType->__anon1._class->__anon1.registered->type == 1))
16548 {
16549 if(exp->__anon1.op.op == ADD_ASSIGN)
16550 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16551 }
16552 else if(inCompiler)
16553 {
16554 char type1String[1024];
16555 char type2String[1024];
16556
16557 type1String[0] = '\0';
16558 type2String[0] = '\0';
16559 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
16560 PrintType(type1, type2String, 0, 1);
16561 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16562 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
16563 }
16564 }
16565 if(exp->__anon1.op.exp2->destType == dummy)
16566 {
16567 FreeType(dummy);
16568 exp->__anon1.op.exp2->destType = (((void *)0));
16569 }
16570 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
16571 {
16572 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16573 type2->refCount = 1;
16574 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
16575 type2->isSigned = 1;
16576 }
16577 else if(exp->__anon1.op.op == '~' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && (!exp->__anon1.op.exp2->expType->isSigned || exp->__anon1.op.exp2->expType->kind != 3))
16578 {
16579 type2 = __extension__ ({
16580 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16581
16582 __ecereInstance1->kind = 3, __ecereInstance1;
16583 });
16584 type2->refCount = 1;
16585 type2->isSigned = 1;
16586 }
16587 else
16588 {
16589 type2 = exp->__anon1.op.exp2->expType;
16590 if(type2)
16591 type2->refCount++;
16592 }
16593 }
16594 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16595 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16596 if(relationOp && ((exp->__anon1.op.exp1 && exp->__anon1.op.exp1->ambiguousUnits && (!c2 || c2->type != 3)) || (exp->__anon1.op.exp2 && exp->__anon1.op.exp2->ambiguousUnits && (!c1 || c1->type != 3))))
16597 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units in relational operation\n", (((void *)0))));
16598 if(!relationOp && ((exp->__anon1.op.exp1 && exp->__anon1.op.exp1->ambiguousUnits) || (exp->__anon1.op.exp2 && exp->__anon1.op.exp2->ambiguousUnits)) && (!powerOp || !c1 || c1->type != 3 || !c2 || c2->type != 3 || !RelatedUnits(c1, c2)))
16599 {
16600 if(exp->opDestType || exp->usedInComparison)
16601 exp->ambiguousUnits = 1;
16602 else
16603 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "ambiguous units\n", (((void *)0))));
16604 }
16605 dummy->kind = 0;
16606 if(exp->__anon1.op.op == SIZEOF)
16607 {
16608 exp->expType = __extension__ ({
16609 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16610
16611 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16612 });
16613 exp->isConstant = 1;
16614 }
16615 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
16616 {
16617 exp->expType = Dereference(type2);
16618 if(type2 && type2->kind == 8)
16619 notByReference = 1;
16620 }
16621 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
16622 exp->expType = Reference(type2);
16623 else if(exp->__anon1.op.op == LEFT_OP || exp->__anon1.op.op == RIGHT_OP)
16624 {
16625 if(exp->__anon1.op.exp1->expType)
16626 {
16627 exp->expType = exp->__anon1.op.exp1->expType;
16628 exp->expType->refCount++;
16629 }
16630 }
16631 else if(!assign)
16632 {
16633 if(c1 && !c1->dataType)
16634 c1->dataType = ProcessTypeString(c1->dataTypeString, 0);
16635 if(c2 && !c2->dataType)
16636 c2->dataType = ProcessTypeString(c2->dataTypeString, 0);
16637 if(boolOps)
16638 {
16639 if(exp->__anon1.op.exp1)
16640 {
16641 if(exp->__anon1.op.exp1->destType)
16642 FreeType(exp->__anon1.op.exp1->destType);
16643 exp->__anon1.op.exp1->destType = MkClassType("bool");
16644 exp->__anon1.op.exp1->destType->truth = 1;
16645 if(!exp->__anon1.op.exp1->expType)
16646 ProcessExpressionType(exp->__anon1.op.exp1);
16647 else
16648 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16649 FreeType(exp->__anon1.op.exp1->expType);
16650 exp->__anon1.op.exp1->expType = MkClassType("bool");
16651 exp->__anon1.op.exp1->expType->truth = 1;
16652 }
16653 if(exp->__anon1.op.exp2)
16654 {
16655 if(exp->__anon1.op.exp2->destType)
16656 FreeType(exp->__anon1.op.exp2->destType);
16657 exp->__anon1.op.exp2->destType = MkClassType("bool");
16658 exp->__anon1.op.exp2->destType->truth = 1;
16659 if(!exp->__anon1.op.exp2->expType)
16660 ProcessExpressionType(exp->__anon1.op.exp2);
16661 else
16662 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16663 FreeType(exp->__anon1.op.exp2->expType);
16664 exp->__anon1.op.exp2->expType = MkClassType("bool");
16665 exp->__anon1.op.exp2->expType->truth = 1;
16666 }
16667 }
16668 else if(powerOp && exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((c1 && c1->type == 3) || (c2 && c2->type == 3)))
16669 {
16670 if(c1 && c1->type == 3 && c2 && c2->type == 3)
16671 {
16672 if(c1->dataType->kind == 7)
16673 exp->expType = c1->dataType;
16674 else if(c2->dataType->kind == 7)
16675 exp->expType = c2->dataType;
16676 else if(c1->dataType->kind == 6)
16677 exp->expType = c1->dataType;
16678 else if(c2->dataType->kind == 6)
16679 exp->expType = c2->dataType;
16680 else
16681 exp->expType = c1->dataType;
16682 }
16683 else if((c1 && c1->type == 3) || exp->__anon1.op.op == '/')
16684 exp->expType = type1;
16685 else
16686 exp->expType = type2;
16687 if(exp->expType)
16688 exp->expType->refCount++;
16689 }
16690 else if(exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && ((useSideType) || ((!type1 || type1->kind != 8 || !strcmp(type1->__anon1._class->string, "String")) && (!type2 || type2->kind != 8 || !strcmp(type2->__anon1._class->string, "String")))))
16691 {
16692 if(type1 && type2 && ((type1->kind == 8 && type1->__anon1._class && strcmp(type1->__anon1._class->string, "String")) == (type2->kind == 8 && type2->__anon1._class && strcmp(type2->__anon1._class->string, "String"))))
16693 {
16694 if(exp->__anon1.op.op == '-' && ((c1 && c1->type == 4) || (c2 && c2->type == 4)))
16695 {
16696 struct Type * intType = ProcessTypeString((c1 && c1->dataType->kind == 4) || (c2 && c2->dataType->kind == 4) ? "int64" : "int", 0);
16697
16698 if(exp->__anon1.op.exp1->destType)
16699 FreeType(exp->__anon1.op.exp1->destType);
16700 if(exp->__anon1.op.exp2->destType)
16701 FreeType(exp->__anon1.op.exp2->destType);
16702 exp->__anon1.op.exp1->destType = intType;
16703 exp->__anon1.op.exp2->destType = intType;
16704 intType->refCount++;
16705 }
16706 else
16707 {
16708 if(exp->__anon1.op.exp2->destType)
16709 FreeType(exp->__anon1.op.exp2->destType);
16710 exp->__anon1.op.exp2->destType = type1;
16711 type1->refCount++;
16712 if(exp->__anon1.op.exp1->destType)
16713 FreeType(exp->__anon1.op.exp1->destType);
16714 exp->__anon1.op.exp1->destType = type2;
16715 type2->refCount++;
16716 }
16717 if(!boolResult && !exp->opDestType && (!exp->destType || exp->destType->kind != 8) && c1 && c1->type == 3 && c2 && c2->type == 3 && c1 != c2)
16718 {
16719 if(exp->usedInComparison || exp->parentOpDestType)
16720 exp->ambiguousUnits = 1;
16721 else
16722 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "operating on %s and %s with an untyped result, assuming %s\n", (((void *)0))), type1->__anon1._class->string, type2->__anon1._class->string, type1->__anon1._class->string);
16723 }
16724 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
16725 {
16726 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16727
16728 if(argExp)
16729 {
16730 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16731
16732 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
16733 ProcessExpressionType(exp->__anon1.op.exp1);
16734 if(type2->kind != 13)
16735 {
16736 ProcessExpressionType(classExp);
16737 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
16738 if(!exp->__anon1.op.exp2->expType)
16739 {
16740 if(type2)
16741 FreeType(type2);
16742 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
16743 c2 = (((void *)0));
16744 type2->refCount++;
16745 }
16746 ProcessExpressionType(exp->__anon1.op.exp2);
16747 }
16748 }
16749 }
16750 if(!boolResult && ((type1->kind == 13 || type1->kind == 12 || (type1->kind == 8 && !strcmp(type1->__anon1._class->string, "String"))) && (type2->kind == 23 || type2->kind == 22 || type2->kind == 4 || type2->kind == 3 || type2->kind == 2 || type2->kind == 1)))
16751 {
16752 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
16753 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16754 exp->expType = type1;
16755 if(type1)
16756 type1->refCount++;
16757 }
16758 else if(!boolResult && ((type2->kind == 13 || type2->kind == 12 || (type2->kind == 8 && !strcmp(type2->__anon1._class->string, "String"))) && (type1->kind == 23 || type1->kind == 22 || type1->kind == 4 || type1->kind == 3 || type1->kind == 2 || type1->kind == 1)))
16759 {
16760 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
16761 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
16762 exp->expType = type2;
16763 if(type2)
16764 type2->refCount++;
16765 }
16766 else if((type1->kind == 13 && type2->kind != 13 && type2->kind != 12 && type2->kind != 11 && type2->kind != 16 && type2->kind != 8 && type2->kind != 19) || (type2->kind == 13 && type1->kind != 13 && type1->kind != 12 && type1->kind != 11 && type1->kind != 16 && type1->kind != 8 && type1->kind != 19))
16767 {
16768 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
16769 }
16770 else
16771 {
16772 unsigned int success = 0;
16773
16774 if(type1->kind == 13 && type2->kind == 13)
16775 {
16776 if(exp->__anon1.op.op == '+')
16777 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
16778 else if(exp->__anon1.op.op == '-')
16779 {
16780 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
16781 {
16782 exp->expType = __extension__ ({
16783 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16784
16785 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
16786 });
16787 success = 1;
16788 if(type1->__anon1.type->kind == 20)
16789 {
16790 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
16791
16792 if(argExp)
16793 {
16794 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
16795
16796 ProcessExpressionType(classExp);
16797 exp->type = 5;
16798 exp->__anon1.list = MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp1))), exp->__anon1.op.op, MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(exp->__anon1.op.exp2)))))), '/', MkExpMember(classExp, MkIdentifier("typeSize"))));
16799 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
16800 FreeType(dummy);
16801 return ;
16802 }
16803 }
16804 }
16805 }
16806 }
16807 if(!success && exp->__anon1.op.exp1->type == 2)
16808 {
16809 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16810 {
16811 if(exp->expType)
16812 FreeType(exp->expType);
16813 exp->expType = exp->__anon1.op.exp1->destType;
16814 if(exp->__anon1.op.exp1->destType)
16815 exp->__anon1.op.exp1->destType->refCount++;
16816 success = 1;
16817 }
16818 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16819 {
16820 if(exp->expType)
16821 FreeType(exp->expType);
16822 exp->expType = exp->__anon1.op.exp2->destType;
16823 if(exp->__anon1.op.exp2->destType)
16824 exp->__anon1.op.exp2->destType->refCount++;
16825 success = 1;
16826 }
16827 }
16828 else if(!success)
16829 {
16830 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
16831 {
16832 if(exp->expType)
16833 FreeType(exp->expType);
16834 exp->expType = exp->__anon1.op.exp2->destType;
16835 if(exp->__anon1.op.exp2->destType)
16836 exp->__anon1.op.exp2->destType->refCount++;
16837 success = 1;
16838 }
16839 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16840 {
16841 if(exp->expType)
16842 FreeType(exp->expType);
16843 exp->expType = exp->__anon1.op.exp1->destType;
16844 if(exp->__anon1.op.exp1->destType)
16845 exp->__anon1.op.exp1->destType->refCount++;
16846 success = 1;
16847 }
16848 }
16849 if(!success)
16850 {
16851 char expString1[10240];
16852 char expString2[10240];
16853 char type1[1024];
16854 char type2[1024];
16855
16856 expString1[0] = '\0';
16857 expString2[0] = '\0';
16858 type1[0] = '\0';
16859 type2[0] = '\0';
16860 if(inCompiler)
16861 {
16862 PrintExpression(exp->__anon1.op.exp1, expString1);
16863 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
16864 PrintExpression(exp->__anon1.op.exp2, expString2);
16865 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
16866 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
16867 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
16868 }
16869 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
16870 }
16871 }
16872 }
16873 else if(!boolResult && !useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16874 {
16875 if(exp->__anon1.op.exp1->destType)
16876 FreeType(exp->__anon1.op.exp1->destType);
16877 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
16878 if(type2->__anon1._class->__anon1.registered->dataType)
16879 type2->__anon1._class->__anon1.registered->dataType->refCount++;
16880 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16881 exp->expType = type2;
16882 if(type2)
16883 type2->refCount++;
16884 }
16885 else if(!boolResult && !useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16886 {
16887 if(exp->__anon1.op.exp2->destType)
16888 FreeType(exp->__anon1.op.exp2->destType);
16889 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
16890 if(type1->__anon1._class->__anon1.registered->dataType)
16891 type1->__anon1._class->__anon1.registered->dataType->refCount++;
16892 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16893 exp->expType = type1;
16894 if(type1)
16895 type1->refCount++;
16896 }
16897 else if(type1)
16898 {
16899 unsigned int valid = 0;
16900
16901 if(!boolResult && useSideUnit && c1 && c1->type == 3 && type2 && type2->kind != 8)
16902 {
16903 if(exp->__anon1.op.exp2->destType)
16904 FreeType(exp->__anon1.op.exp2->destType);
16905 exp->__anon1.op.exp2->destType = c1->dataType;
16906 exp->__anon1.op.exp2->destType->refCount++;
16907 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
16908 if(type2)
16909 FreeType(type2);
16910 type2 = exp->__anon1.op.exp2->destType;
16911 c2 = type2 && type2->kind == 8 && type2->__anon1._class ? type2->__anon1._class->__anon1.registered : (((void *)0));
16912 if(type2)
16913 type2->refCount++;
16914 exp->expType = type2;
16915 type2->refCount++;
16916 }
16917 if(!boolResult && useSideUnit && c2 && c2->type == 3 && type1 && type1->kind != 8)
16918 {
16919 if(exp->__anon1.op.exp1->destType)
16920 FreeType(exp->__anon1.op.exp1->destType);
16921 exp->__anon1.op.exp1->destType = c2->dataType;
16922 exp->__anon1.op.exp1->destType->refCount++;
16923 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
16924 type1 = exp->__anon1.op.exp1->destType;
16925 c1 = type1 && type1->kind == 8 && type1->__anon1._class ? type1->__anon1._class->__anon1.registered : (((void *)0));
16926 exp->expType = type1;
16927 type1->refCount++;
16928 }
16929 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
16930 {
16931 unsigned int op1IsEnum = c1 && c1->type == 4;
16932 unsigned int op2IsEnum = c2 && c2->type == 4;
16933
16934 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
16935 {
16936 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16937 {
16938 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16939 {
16940 if(exp->expType)
16941 FreeType(exp->expType);
16942 exp->expType = exp->__anon1.op.exp2->expType;
16943 if(exp->__anon1.op.exp2->expType)
16944 exp->__anon1.op.exp2->expType->refCount++;
16945 valid = 1;
16946 }
16947 }
16948 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16949 {
16950 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16951 {
16952 if(exp->expType)
16953 FreeType(exp->expType);
16954 exp->expType = exp->__anon1.op.exp1->expType;
16955 if(exp->__anon1.op.exp1->expType)
16956 exp->__anon1.op.exp1->expType->refCount++;
16957 valid = 1;
16958 }
16959 }
16960 }
16961 else
16962 {
16963 if(op1IsEnum && exp->__anon1.op.exp2->expType)
16964 {
16965 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
16966 {
16967 if(exp->expType)
16968 FreeType(exp->expType);
16969 exp->expType = exp->__anon1.op.exp1->expType;
16970 if(exp->__anon1.op.exp1->expType)
16971 exp->__anon1.op.exp1->expType->refCount++;
16972 valid = 1;
16973 }
16974 }
16975 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
16976 {
16977 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
16978 {
16979 if(exp->expType)
16980 FreeType(exp->expType);
16981 exp->expType = exp->__anon1.op.exp2->expType;
16982 if(exp->__anon1.op.exp2->expType)
16983 exp->__anon1.op.exp2->expType->refCount++;
16984 valid = 1;
16985 }
16986 }
16987 }
16988 }
16989 if(!valid)
16990 {
16991 if(c2 && c2->type == 3 && (!c1 || c1->type != 3))
16992 {
16993 if(exp->__anon1.op.exp1->destType)
16994 FreeType(exp->__anon1.op.exp1->destType);
16995 exp->__anon1.op.exp1->destType = type2;
16996 type2->refCount++;
16997 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
16998 {
16999 if(exp->expType)
17000 FreeType(exp->expType);
17001 exp->expType = exp->__anon1.op.exp1->destType;
17002 if(exp->__anon1.op.exp1->destType)
17003 exp->__anon1.op.exp1->destType->refCount++;
17004 }
17005 }
17006 else
17007 {
17008 if(exp->__anon1.op.exp2->destType)
17009 FreeType(exp->__anon1.op.exp2->destType);
17010 exp->__anon1.op.exp2->destType = type1;
17011 type1->refCount++;
17012 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
17013 {
17014 if(exp->expType)
17015 FreeType(exp->expType);
17016 exp->expType = exp->__anon1.op.exp2->destType;
17017 if(exp->__anon1.op.exp2->destType)
17018 exp->__anon1.op.exp2->destType->refCount++;
17019 }
17020 else if(type1 && type2)
17021 {
17022 char expString1[10240];
17023 char expString2[10240];
17024 char type1String[1024];
17025 char type2String[1024];
17026
17027 expString1[0] = '\0';
17028 expString2[0] = '\0';
17029 type1String[0] = '\0';
17030 type2String[0] = '\0';
17031 if(inCompiler)
17032 {
17033 PrintExpression(exp->__anon1.op.exp1, expString1);
17034 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
17035 PrintExpression(exp->__anon1.op.exp2, expString2);
17036 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
17037 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
17038 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
17039 }
17040 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
17041 if(c1 && c1->type == 4)
17042 {
17043 exp->expType = exp->__anon1.op.exp1->expType;
17044 if(exp->__anon1.op.exp1->expType)
17045 exp->__anon1.op.exp1->expType->refCount++;
17046 }
17047 else if(c2 && c2->type == 4)
17048 {
17049 exp->expType = exp->__anon1.op.exp2->expType;
17050 if(exp->__anon1.op.exp2->expType)
17051 exp->__anon1.op.exp2->expType->refCount++;
17052 }
17053 }
17054 }
17055 }
17056 }
17057 else if(type2)
17058 {
17059 if(c2 && c2->type == 4)
17060 {
17061 struct Type * oldType = exp->__anon1.op.exp1->expType;
17062
17063 exp->__anon1.op.exp1->expType = (((void *)0));
17064 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17065 FreeType(oldType);
17066 else
17067 exp->__anon1.op.exp1->expType = oldType;
17068 }
17069 if(exp->__anon1.op.exp1->destType)
17070 FreeType(exp->__anon1.op.exp1->destType);
17071 exp->__anon1.op.exp1->destType = type2;
17072 type2->refCount++;
17073 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
17074 {
17075 if(exp->expType)
17076 FreeType(exp->expType);
17077 exp->expType = exp->__anon1.op.exp1->destType;
17078 if(exp->__anon1.op.exp1->destType)
17079 exp->__anon1.op.exp1->destType->refCount++;
17080 }
17081 }
17082 }
17083 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
17084 {
17085 if(type1 && c2 && c2->type == 3)
17086 {
17087 if(exp->__anon1.op.exp1->destType)
17088 FreeType(exp->__anon1.op.exp1->destType);
17089 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
17090 if(type2->__anon1._class->__anon1.registered->dataType)
17091 type2->__anon1._class->__anon1.registered->dataType->refCount++;
17092 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
17093 }
17094 if(exp->__anon1.op.op == '!')
17095 {
17096 exp->expType = MkClassType("bool");
17097 exp->expType->truth = 1;
17098 }
17099 else
17100 {
17101 exp->expType = type2;
17102 if(type2)
17103 type2->refCount++;
17104 }
17105 }
17106 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
17107 {
17108 if(c2 && c2->type == 3)
17109 {
17110 if(exp->__anon1.op.exp2->destType)
17111 FreeType(exp->__anon1.op.exp2->destType);
17112 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
17113 if(type1->__anon1._class->__anon1.registered->dataType)
17114 type1->__anon1._class->__anon1.registered->dataType->refCount++;
17115 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
17116 }
17117 exp->expType = type1;
17118 if(type1)
17119 type1->refCount++;
17120 }
17121 }
17122 yylloc = exp->loc;
17123 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
17124 {
17125 char expString[10000];
17126
17127 expString[0] = '\0';
17128 if(inCompiler)
17129 {
17130 PrintExpression(exp->__anon1.op.exp1, expString);
17131 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17132 }
17133 if(expString[0])
17134 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17135 }
17136 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
17137 {
17138 char expString[10240];
17139
17140 expString[0] = '\0';
17141 if(inCompiler)
17142 {
17143 PrintExpression(exp->__anon1.op.exp2, expString);
17144 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17145 }
17146 if(expString[0])
17147 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17148 }
17149 if(boolResult)
17150 {
17151 FreeType(exp->expType);
17152 exp->expType = MkClassType("bool");
17153 exp->expType->truth = 1;
17154 }
17155 if(exp->__anon1.op.op != SIZEOF)
17156 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
17157 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
17158 {
17159 DeclareType(curExternal, exp->__anon1.op.exp2->expType, 1, 0);
17160 }
17161 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
17162 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
17163 yylloc = oldyylloc;
17164 FreeType(dummy);
17165 if(type2)
17166 FreeType(type2);
17167 break;
17168 }
17169 case 5:
17170 case 32:
17171 {
17172 struct Expression * e;
17173
17174 exp->isConstant = 1;
17175 for(e = (*exp->__anon1.list).first; e; e = e->next)
17176 {
17177 if(!e->next)
17178 {
17179 FreeType(e->destType);
17180 e->opDestType = exp->opDestType;
17181 e->usedInComparison = exp->usedInComparison;
17182 e->parentOpDestType = exp->parentOpDestType;
17183 e->destType = exp->destType;
17184 if(e->destType)
17185 {
17186 exp->destType->refCount++;
17187 }
17188 }
17189 ProcessExpressionType(e);
17190 if(e->ambiguousUnits)
17191 exp->ambiguousUnits = 1;
17192 if(!exp->expType && !e->next)
17193 {
17194 exp->expType = e->expType;
17195 if(e->expType)
17196 e->expType->refCount++;
17197 exp->needCast = e->needCast;
17198 }
17199 if(!e->isConstant)
17200 exp->isConstant = 0;
17201 }
17202 e = (*exp->__anon1.list).first;
17203 if(!e->next && e->type == 8)
17204 {
17205 struct Expression * next = exp->next, * prev = exp->prev;
17206
17207 FreeType(exp->expType);
17208 FreeType(exp->destType);
17209 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17210 *exp = *e;
17211 exp->prev = prev;
17212 exp->next = next;
17213 ((e ? __extension__ ({
17214 void * __ecerePtrToDelete = (e);
17215
17216 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
17217 }) : 0), e = 0);
17218 ProcessExpressionType(exp);
17219 }
17220 break;
17221 }
17222 case 6:
17223 {
17224 struct Expression * e;
17225
17226 exp->isConstant = 1;
17227 ProcessExpressionType(exp->__anon1.index.exp);
17228 if(!exp->__anon1.index.exp->isConstant)
17229 exp->isConstant = 0;
17230 if(exp->__anon1.index.exp->expType)
17231 {
17232 struct Type * source = exp->__anon1.index.exp->expType;
17233
17234 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
17235 {
17236 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
17237 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
17238
17239 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
17240 {
17241 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
17242 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
17243 {
17244 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
17245
17246 if(type->kind == 8)
17247 type->constant = 1;
17248 else if(type->kind == 13)
17249 {
17250 struct Type * t = type;
17251
17252 while(t->kind == 13)
17253 t = t->__anon1.type;
17254 t->constant = 1;
17255 }
17256 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
17257 }
17258 }
17259 }
17260 }
17261 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
17262 {
17263 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
17264 {
17265 if(e->destType)
17266 FreeType(e->destType);
17267 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
17268 }
17269 ProcessExpressionType(e);
17270 if(!e->next)
17271 {
17272 }
17273 if(!e->isConstant)
17274 exp->isConstant = 0;
17275 }
17276 if(!exp->expType)
17277 exp->expType = Dereference(exp->__anon1.index.exp->expType);
17278 if(exp->expType)
17279 DeclareType(curExternal, exp->expType, 1, 0);
17280 break;
17281 }
17282 case 7:
17283 {
17284 struct Expression * e;
17285 struct Type * functionType;
17286 struct Type * methodType = (((void *)0));
17287 char name[1024];
17288
17289 name[0] = '\0';
17290 if(inCompiler)
17291 {
17292 PrintExpression(exp->__anon1.call.exp, name);
17293 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
17294 {
17295 PrintExpression(exp->__anon1.call.exp, name);
17296 }
17297 }
17298 if(exp->__anon1.call.exp->type == 0)
17299 {
17300 struct Expression * idExp = exp->__anon1.call.exp;
17301 struct Identifier * id = idExp->__anon1.__anon1.identifier;
17302
17303 if(!strcmp(id->string, "__builtin_frame_address"))
17304 {
17305 exp->expType = ProcessTypeString("void *", 1);
17306 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17307 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17308 break;
17309 }
17310 else if(!strcmp(id->string, "__ENDIAN_PAD"))
17311 {
17312 exp->expType = ProcessTypeString("int", 1);
17313 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
17314 ProcessExpressionType((*exp->__anon1.call.arguments).first);
17315 break;
17316 }
17317 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
17318 {
17319 struct Expression * a = (((void *)0));
17320 struct Expression * b = (((void *)0));
17321 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
17322
17323 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
17324 {
17325 a = (*exp->__anon1.call.arguments).first;
17326 b = (*exp->__anon1.call.arguments).last;
17327 tempExp1 = a;
17328 tempExp2 = b;
17329 }
17330 else if((*exp->__anon1.call.arguments).count == 1)
17331 {
17332 a = (*exp->__anon1.call.arguments).first;
17333 tempExp1 = a;
17334 }
17335 if(a)
17336 {
17337 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
17338 idExp->__anon1.__anon1.identifier = (((void *)0));
17339 FreeExpContents(exp);
17340 ProcessExpressionType(a);
17341 if(b)
17342 ProcessExpressionType(b);
17343 exp->type = 5;
17344 exp->__anon1.list = MkList();
17345 if(a->expType && (!b || b->expType))
17346 {
17347 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
17348 {
17349 if(inCompiler)
17350 {
17351 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17352 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
17353 struct Declaration * decl;
17354 char temp1[1024], temp2[1024];
17355
17356 GetTypeSpecs(a->expType, specs);
17357 if(a && !a->isConstant && a->type != 0)
17358 {
17359 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
17360 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
17361 tempExp1 = QMkExpId(temp1);
17362 tempExp1->expType = a->expType;
17363 if(a->expType)
17364 a->expType->refCount++;
17365 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
17366 }
17367 if(b && !b->isConstant && b->type != 0)
17368 {
17369 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
17370 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
17371 tempExp2 = QMkExpId(temp2);
17372 tempExp2->expType = b->expType;
17373 if(b->expType)
17374 b->expType->refCount++;
17375 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
17376 }
17377 decl = MkDeclaration(specs, decls);
17378 if(!curCompound->__anon1.compound.declarations)
17379 curCompound->__anon1.compound.declarations = MkList();
17380 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
17381 }
17382 }
17383 }
17384 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
17385 {
17386 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
17387
17388 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
17389 exp->expType = a->expType;
17390 if(a->expType)
17391 a->expType->refCount++;
17392 }
17393 else if(!strcmp(id->string, "Abs"))
17394 {
17395 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
17396 exp->expType = a->expType;
17397 if(a->expType)
17398 a->expType->refCount++;
17399 }
17400 else if(!strcmp(id->string, "Sgn"))
17401 {
17402 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '!', CopyExpression(tempExp1)))), MkListOne(MkExpConstant("0")), MkExpBrackets(MkListOne(MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpConstant("-1")), MkExpConstant("1"))))));
17403 exp->expType = ProcessTypeString("int", 0);
17404 }
17405 FreeExpression(tempExp1);
17406 if(tempExp2)
17407 FreeExpression(tempExp2);
17408 FreeIdentifier(id);
17409 break;
17410 }
17411 }
17412 }
17413 {
17414 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
17415
17416 if(!exp->__anon1.call.exp->destType)
17417 {
17418 exp->__anon1.call.exp->destType = dummy;
17419 dummy->refCount++;
17420 }
17421 ProcessExpressionType(exp->__anon1.call.exp);
17422 if(exp->__anon1.call.exp->destType == dummy)
17423 {
17424 FreeType(dummy);
17425 exp->__anon1.call.exp->destType = (((void *)0));
17426 }
17427 FreeType(dummy);
17428 }
17429 functionType = exp->__anon1.call.exp->expType;
17430 if(functionType && functionType->kind == 16)
17431 {
17432 methodType = functionType;
17433 functionType = methodType->__anon1.__anon3.method->dataType;
17434 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
17435 {
17436 char typeString[1024];
17437
17438 typeString[0] = '\0';
17439 {
17440 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
17441
17442 functionType->__anon1.__anon2.thisClass = (((void *)0));
17443 PrintType(functionType, typeString, 1, 1);
17444 functionType->__anon1.__anon2.thisClass = back;
17445 }
17446 if(strstr(typeString, "thisclass"))
17447 {
17448 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17449 struct Declarator * decl;
17450
17451 {
17452 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17453
17454 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17455 if(thisClass != (exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass ? exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass->templateClass : exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass))
17456 thisClassParams = 0;
17457 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
17458 {
17459 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
17460
17461 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
17462 ProcessDeclarator(decl, 1);
17463 thisClass = backupThisClass;
17464 }
17465 thisClassParams = 1;
17466 functionType = ProcessType(specs, decl);
17467 functionType->refCount = 0;
17468 FinishTemplatesContext(context);
17469 {
17470 struct Type * p, * op;
17471
17472 for(p = functionType->__anon1.__anon2.params.first, op = methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.params.first; p && op; p = p->next, op = op->next)
17473 {
17474 if(op->kind == 21)
17475 p->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17476 }
17477 }
17478 if(methodType->__anon1.__anon3.method->dataType->__anon1.__anon2.returnType->kind == 21)
17479 {
17480 functionType->__anon1.__anon2.returnType->thisClassFrom = methodType->__anon1.__anon3.method->_class;
17481 }
17482 }
17483 FreeList(specs, (void *)(FreeSpecifier));
17484 FreeDeclarator(decl);
17485 }
17486 }
17487 }
17488 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
17489 {
17490 struct Type * type = functionType->__anon1.type;
17491
17492 if(!functionType->refCount)
17493 {
17494 functionType->__anon1.type = (((void *)0));
17495 FreeType(functionType);
17496 }
17497 functionType = type;
17498 }
17499 if(functionType && functionType->kind != 11)
17500 {
17501 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
17502 }
17503 else if(functionType)
17504 {
17505 unsigned int emptyParams = 0, noParams = 0;
17506 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
17507 struct Type * type = functionType->__anon1.__anon2.params.first;
17508 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
17509 int extra = 0;
17510 struct Location oldyylloc = yylloc;
17511
17512 if(!type)
17513 emptyParams = 1;
17514 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
17515 {
17516 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
17517 e = e->next;
17518 }
17519 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
17520 {
17521 if(memberExp && memberExp->__anon1.member.exp && memberExp->__anon1.member.exp->expType && memberExp->__anon1.member.exp->expType->kind == 19 && memberExp->__anon1.member.exp->expType->__anon1._class)
17522 {
17523 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
17524 if(e)
17525 {
17526 e->destType = type;
17527 e = e->next;
17528 type = functionType->__anon1.__anon2.params.first;
17529 }
17530 else
17531 type->refCount = 0;
17532 }
17533 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
17534 {
17535 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
17536 type->byReference = functionType->byReference;
17537 type->typedByReference = functionType->typedByReference;
17538 if(e)
17539 {
17540 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
17541 e = e->next;
17542 e->destType = type;
17543 e = e->next;
17544 type = functionType->__anon1.__anon2.params.first;
17545 }
17546 else
17547 type->refCount = 0;
17548 }
17549 }
17550 if(type && type->kind == 0)
17551 {
17552 noParams = 1;
17553 if(!type->refCount)
17554 FreeType(type);
17555 type = (((void *)0));
17556 }
17557 for(; e; e = e->next)
17558 {
17559 if(!type && !emptyParams)
17560 {
17561 yylloc = e->loc;
17562 if(methodType && methodType->__anon1.__anon3.methodClass)
17563 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
17564 else
17565 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, (*exp->__anon1.call.arguments).count, noParams ? 0 : functionType->__anon1.__anon2.params.count);
17566 break;
17567 }
17568 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
17569 {
17570 struct Type * templatedType = (((void *)0));
17571 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
17572 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
17573 int id = 0;
17574
17575 if(_class && _class->templateArgs)
17576 {
17577 struct __ecereNameSpace__ecere__com__Class * sClass;
17578
17579 for(sClass = _class; sClass; sClass = sClass->base)
17580 {
17581 if(sClass->templateClass)
17582 sClass = sClass->templateClass;
17583 id = 0;
17584 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
17585 {
17586 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
17587 {
17588 struct __ecereNameSpace__ecere__com__Class * nextClass;
17589
17590 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17591 {
17592 if(nextClass->templateClass)
17593 nextClass = nextClass->templateClass;
17594 id += nextClass->templateParams.count;
17595 }
17596 break;
17597 }
17598 id++;
17599 }
17600 if(curParam)
17601 break;
17602 }
17603 }
17604 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
17605 {
17606 unsigned int constant = type->constant;
17607 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
17608
17609 {
17610 struct Context * context = SetupTemplatesContext(_class);
17611
17612 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
17613 FinishTemplatesContext(context);
17614 }
17615 if(templatedType->kind == 8 && constant)
17616 templatedType->constant = 1;
17617 else if(templatedType->kind == 13)
17618 {
17619 struct Type * t = templatedType->__anon1.type;
17620
17621 while(t->kind == 13)
17622 t = t->__anon1.type;
17623 if(constant)
17624 t->constant = constant;
17625 }
17626 e->destType = templatedType;
17627 if(templatedType)
17628 {
17629 templatedType->passAsTemplate = 1;
17630 }
17631 }
17632 else
17633 {
17634 e->destType = type;
17635 if(type)
17636 type->refCount++;
17637 }
17638 }
17639 else
17640 {
17641 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
17642 {
17643 e->destType = type->prev;
17644 e->destType->refCount++;
17645 }
17646 else
17647 {
17648 e->destType = type;
17649 if(type)
17650 type->refCount++;
17651 }
17652 }
17653 if(type && type->kind != 14)
17654 {
17655 struct Type * next = type->next;
17656
17657 if(!type->refCount)
17658 FreeType(type);
17659 type = next;
17660 }
17661 }
17662 if(type && type->kind != 14)
17663 {
17664 if(methodType && methodType->__anon1.__anon3.methodClass)
17665 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for method %s::%s (%d given, expected %d)\n", (((void *)0))), methodType->__anon1.__anon3.methodClass->fullName, methodType->__anon1.__anon3.method->name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
17666 else
17667 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough arguments for function %s (%d given, expected %d)\n", (((void *)0))), name, exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).count : 0, functionType->__anon1.__anon2.params.count + extra);
17668 }
17669 yylloc = oldyylloc;
17670 if(type && !type->refCount)
17671 FreeType(type);
17672 }
17673 else
17674 {
17675 functionType = __extension__ ({
17676 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17677
17678 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
17679 });
17680 if(exp->__anon1.call.exp->type == 0)
17681 {
17682 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
17683
17684 if(inCompiler)
17685 {
17686 struct Symbol * symbol;
17687 struct Location oldyylloc = yylloc;
17688
17689 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
17690 if(strstr(string, "__builtin_") == string)
17691 {
17692 if(exp->destType)
17693 {
17694 functionType->__anon1.__anon2.returnType = exp->destType;
17695 exp->destType->refCount++;
17696 }
17697 }
17698 else
17699 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
17700 symbol = __extension__ ({
17701 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
17702
17703 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
17704 });
17705 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
17706 if(strstr(symbol->string, "::"))
17707 globalContext->hasNameSpace = 1;
17708 yylloc = oldyylloc;
17709 }
17710 }
17711 else if(exp->__anon1.call.exp->type == 8)
17712 {
17713 }
17714 else
17715 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
17716 if(!functionType->__anon1.__anon2.returnType)
17717 {
17718 functionType->__anon1.__anon2.returnType = __extension__ ({
17719 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17720
17721 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
17722 });
17723 }
17724 }
17725 if(functionType && functionType->kind == 11)
17726 {
17727 exp->expType = functionType->__anon1.__anon2.returnType;
17728 if(functionType->__anon1.__anon2.returnType)
17729 functionType->__anon1.__anon2.returnType->refCount++;
17730 if(!functionType->refCount)
17731 FreeType(functionType);
17732 }
17733 if(exp->__anon1.call.arguments)
17734 {
17735 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
17736 ProcessExpressionType(e);
17737 }
17738 break;
17739 }
17740 case 8:
17741 {
17742 struct Type * type;
17743 struct Location oldyylloc = yylloc;
17744 unsigned int thisPtr;
17745 struct Expression * checkExp = exp->__anon1.member.exp;
17746
17747 while(checkExp)
17748 {
17749 if(checkExp->type == 11)
17750 checkExp = checkExp->__anon1.cast.exp;
17751 else if(checkExp->type == 5)
17752 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
17753 else
17754 break;
17755 }
17756 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
17757 exp->thisPtr = thisPtr;
17758 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
17759 {
17760 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
17761 }
17762 ProcessExpressionType(exp->__anon1.member.exp);
17763 if(exp->__anon1.member.exp->expType && exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered->type == 0)
17764 {
17765 exp->isConstant = 0;
17766 }
17767 else
17768 exp->isConstant = exp->__anon1.member.exp->isConstant;
17769 type = exp->__anon1.member.exp->expType;
17770 yylloc = exp->loc;
17771 if(type && (type->kind == 20))
17772 {
17773 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17774 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
17775
17776 if(_class)
17777 {
17778 for(param = _class->templateParams.first; param; param = param->next)
17779 {
17780 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
17781 break;
17782 }
17783 }
17784 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
17785 {
17786 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
17787
17788 if(argExp)
17789 {
17790 struct Expression * expMember = exp->__anon1.member.exp;
17791 struct Declarator * decl;
17792 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17793 char thisClassTypeString[1024];
17794
17795 FreeIdentifier(exp->__anon1.member.member);
17796 ProcessExpressionType(argExp);
17797 {
17798 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
17799
17800 if(colon)
17801 {
17802 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
17803 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
17804 }
17805 else
17806 strcpy(thisClassTypeString, _class->fullName);
17807 }
17808 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
17809 exp->expType = ProcessType(specs, decl);
17810 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
17811 {
17812 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
17813 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
17814 int paramCount = 0;
17815 int lastParam = -1;
17816 char templateString[1024];
17817 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
17818
17819 sprintf(templateString, "%s<", expClass->templateClass->fullName);
17820 for(cClass = expClass; cClass; cClass = cClass->base)
17821 {
17822 int p = 0;
17823
17824 for(param = cClass->templateParams.first; param; param = param->next)
17825 {
17826 int id = p;
17827 struct __ecereNameSpace__ecere__com__Class * sClass;
17828 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
17829
17830 for(sClass = cClass->base; sClass; sClass = sClass->base)
17831 id += sClass->templateParams.count;
17832 arg = expClass->templateArgs[id];
17833 for(sClass = _class; sClass; sClass = sClass->base)
17834 {
17835 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
17836 int p = 0;
17837 struct __ecereNameSpace__ecere__com__Class * nextClass;
17838
17839 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
17840 p += nextClass->templateParams.count;
17841 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
17842 {
17843 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
17844 {
17845 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17846 {
17847 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
17848 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
17849 break;
17850 }
17851 }
17852 }
17853 }
17854 {
17855 char argument[256];
17856
17857 argument[0] = '\0';
17858 switch(param->type)
17859 {
17860 case 2:
17861 {
17862 char expString[1024];
17863 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17864 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
17865 struct Expression * exp;
17866 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
17867
17868 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
17869 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
17870 ProcessExpressionType(exp);
17871 ComputeExpression(exp);
17872 expString[0] = '\0';
17873 PrintExpression(exp, expString);
17874 strcat(argument, expString);
17875 FreeExpression(exp);
17876 break;
17877 }
17878 case 1:
17879 {
17880 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
17881 break;
17882 }
17883 case 0:
17884 {
17885 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
17886 {
17887 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
17888 strcat(argument, thisClassTypeString);
17889 else
17890 strcat(argument, arg.__anon1.__anon1.dataTypeString);
17891 }
17892 break;
17893 }
17894 }
17895 if(argument[0])
17896 {
17897 if(paramCount)
17898 strcat(templateString, ", ");
17899 if(lastParam != p - 1)
17900 {
17901 strcat(templateString, param->name);
17902 strcat(templateString, " = ");
17903 }
17904 strcat(templateString, argument);
17905 paramCount++;
17906 lastParam = p;
17907 }
17908 p++;
17909 }
17910 }
17911 }
17912 {
17913 int len = strlen(templateString);
17914
17915 if(templateString[len - 1] == '>')
17916 templateString[len++] = ' ';
17917 templateString[len++] = '>';
17918 templateString[len++] = '\0';
17919 }
17920 {
17921 struct Context * context = SetupTemplatesContext(_class);
17922
17923 FreeType(exp->expType);
17924 exp->expType = ProcessTypeString(templateString, 0);
17925 FinishTemplatesContext(context);
17926 }
17927 }
17928 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
17929 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
17930 exp->type = 5;
17931 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpBrackets(MkListOne(MkExpOp(MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), expMember))), '+', MkExpOp(MkExpMember(MkExpMember(argExp, MkIdentifier("member")), MkIdentifier("offset")), '+', MkExpMember(MkExpMember(MkExpMember(CopyExpression(argExp), MkIdentifier("member")), MkIdentifier("_class")), MkIdentifier("offset")))))))));
17932 }
17933 }
17934 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
17935 {
17936 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
17937 }
17938 }
17939 if(type && (type->kind == 20))
17940 ;
17941 else if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15 || type->kind == 4 || type->kind == 2 || type->kind == 5 || type->kind == 1 || type->kind == 24 || type->kind == 22 || type->kind == 23 || type->kind == 6 || type->kind == 7 || (type->kind == 13 && type->__anon1.type->kind == 1)))
17942 {
17943 struct Identifier * id = exp->__anon1.member.member;
17944 int typeKind = type->kind;
17945 struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
17946
17947 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
17948 {
17949 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
17950 typeKind = 8;
17951 }
17952 if(id)
17953 {
17954 if(typeKind == 3 || typeKind == 15)
17955 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
17956 else if(!_class)
17957 {
17958 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17959 {
17960 _class = type->__anon1._class->__anon1.registered;
17961 }
17962 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
17963 {
17964 _class = FindClass("char *")->__anon1.registered;
17965 }
17966 else if(type->kind == 13)
17967 {
17968 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
17969 FreeType(exp->expType);
17970 exp->expType = ProcessTypeString("uintptr", 0);
17971 exp->byReference = 1;
17972 }
17973 else
17974 {
17975 char string[1024] = "";
17976 struct Symbol * classSym;
17977
17978 PrintTypeNoConst(type, string, 0, 1);
17979 classSym = FindClass(string);
17980 if(classSym)
17981 _class = classSym->__anon1.registered;
17982 }
17983 }
17984 }
17985 if(_class && id)
17986 {
17987 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
17988 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
17989 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
17990 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
17991 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
17992
17993 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
17994 exp->__anon1.member.memberType = 1;
17995 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
17996 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
17997 if(typeKind != 19)
17998 {
17999 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
18000 {
18001 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
18002 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
18003 {
18004 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18005 if(prop)
18006 member = (((void *)0));
18007 }
18008 if(!member && !prop)
18009 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18010 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
18011 exp->__anon1.member.thisPtr = 1;
18012 }
18013 else
18014 {
18015 unsigned int useMemberForNonConst = 0;
18016
18017 if(!id->classSym)
18018 {
18019 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
18020 useMemberForNonConst = prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
18021 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
18022 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
18023 }
18024 if((!prop || useMemberForNonConst) && !member)
18025 {
18026 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
18027 if(!method)
18028 {
18029 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
18030 useMemberForNonConst |= prop && exp->destType && ((exp->destType->kind == 8 && !exp->destType->constant) || ((exp->destType->kind == 13 || exp->destType->kind == 12) && exp->destType->__anon1.type && !exp->destType->__anon1.type->constant)) && !strncmp(prop->dataTypeString, "const ", 6);
18031 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
18032 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
18033 }
18034 }
18035 if(member && prop)
18036 {
18037 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
18038 prop = (((void *)0));
18039 else
18040 member = (((void *)0));
18041 }
18042 }
18043 }
18044 if(!prop && !member && !method)
18045 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
18046 if(!prop && !member && !method)
18047 {
18048 if(typeKind == 19)
18049 {
18050 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
18051 if(classProp)
18052 {
18053 exp->__anon1.member.memberType = 5;
18054 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
18055 }
18056 else
18057 {
18058 char structName[1024];
18059 struct Identifier * id = exp->__anon1.member.member;
18060 struct Expression * classExp = exp->__anon1.member.exp;
18061
18062 type->refCount++;
18063 FreeType(classExp->expType);
18064 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
18065 strcpy(structName, "__ecereClassData_");
18066 FullClassNameCat(structName, type->__anon1._class->string, 0);
18067 exp->type = 9;
18068 exp->__anon1.member.member = id;
18069 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(type->__anon1._class->string)), (((void *)0))), MkIdentifier("offsetClass"))))))));
18070 FreeType(type);
18071 ProcessExpressionType(exp);
18072 return ;
18073 }
18074 }
18075 else
18076 {
18077 struct Symbol * classSym = FindClass(id->string);
18078
18079 if(classSym)
18080 {
18081 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
18082
18083 if(convertClass)
18084 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
18085 }
18086 }
18087 }
18088 if(exp->__anon1.member.exp->destType)
18089 FreeType(exp->__anon1.member.exp->destType);
18090 {
18091 if(method && !method->_class->symbol)
18092 method->_class->symbol = FindClass(method->_class->fullName);
18093 if(prop && !prop->_class->symbol)
18094 prop->_class->symbol = FindClass(prop->_class->fullName);
18095 exp->__anon1.member.exp->destType = __extension__ ({
18096 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18097
18098 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1->thisClassFrom = type ? type->thisClassFrom : (((void *)0)), __ecereInstance1;
18099 });
18100 }
18101 if(prop)
18102 {
18103 exp->__anon1.member.memberType = 1;
18104 if(!prop->dataType)
18105 ProcessPropertyType(prop);
18106 exp->expType = prop->dataType;
18107 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
18108 {
18109 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18110
18111 CopyTypeInto(type, exp->expType);
18112 type->refCount = 1;
18113 type->constant = 1;
18114 exp->expType = type;
18115 }
18116 else if(prop->dataType)
18117 prop->dataType->refCount++;
18118 }
18119 else if(member)
18120 {
18121 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18122 {
18123 FreeExpContents(exp);
18124 exp->type = 0;
18125 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18126 ProcessExpressionType(exp);
18127 return ;
18128 }
18129 exp->__anon1.member.memberType = 3;
18130 DeclareStruct(curExternal, _class->fullName, 0, 1);
18131 if(member->_class != _class)
18132 DeclareStruct(curExternal, member->_class->fullName, 0, 1);
18133 if(!member->dataType)
18134 {
18135 struct Context * context = SetupTemplatesContext(_class);
18136
18137 member->dataType = ProcessTypeString(member->dataTypeString, 0);
18138 FinishTemplatesContext(context);
18139 }
18140 if(exp->__anon1.member.exp->expType->kind == 8 && exp->__anon1.member.exp->expType->__anon1._class && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered && exp->__anon1.member.exp->expType->__anon1._class->__anon1.registered->type == 2)
18141 member->dataType->bitMemberSize = ((struct __ecereNameSpace__ecere__com__BitMember *)member)->size;
18142 exp->expType = member->dataType;
18143 if(member->dataType)
18144 member->dataType->refCount++;
18145 }
18146 else if(revConvert)
18147 {
18148 exp->__anon1.member.memberType = 4;
18149 exp->expType = MkClassType(revConvert->_class->fullName);
18150 }
18151 else if(method)
18152 {
18153 {
18154 exp->__anon1.member.memberType = 2;
18155 }
18156 if(!method->dataType)
18157 ProcessMethodType(method);
18158 exp->expType = __extension__ ({
18159 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18160
18161 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
18162 });
18163 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
18164 exp->expType->__anon1.__anon3.usedClass = _class;
18165 }
18166 else if(!classProp)
18167 {
18168 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
18169 {
18170 FreeExpContents(exp);
18171 exp->type = 0;
18172 exp->__anon1.__anon1.identifier = MkIdentifier("class");
18173 FreeType(exp->expType);
18174 exp->expType = MkClassType("ecere::com::Class");
18175 return ;
18176 }
18177 yylloc = exp->__anon1.member.member->loc;
18178 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
18179 if(inCompiler)
18180 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
18181 }
18182 if(_class && exp->expType)
18183 {
18184 struct __ecereNameSpace__ecere__com__Class * tClass;
18185
18186 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
18187 while(tClass && !tClass->templateClass)
18188 tClass = tClass->base;
18189 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
18190 {
18191 int id = 0;
18192 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18193 struct __ecereNameSpace__ecere__com__Class * sClass;
18194
18195 for(sClass = tClass; sClass; sClass = sClass->base)
18196 {
18197 id = 0;
18198 if(sClass->templateClass)
18199 sClass = sClass->templateClass;
18200 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18201 {
18202 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
18203 {
18204 for(sClass = sClass->base; sClass; sClass = sClass->base)
18205 id += sClass->templateParams.count;
18206 break;
18207 }
18208 id++;
18209 }
18210 if(curParam)
18211 break;
18212 }
18213 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
18214 {
18215 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18216 struct Context * context = SetupTemplatesContext(tClass);
18217 unsigned int constant = exp->expType->constant;
18218 unsigned int passAsTemplate = 0;
18219 struct __ecereNameSpace__ecere__com__Class * thisClassFrom = (((void *)0));
18220 struct Type * t = ProcessTypeString(exp->expType->__anon1.templateParameter->dataTypeString, 0);
18221
18222 if(t && t->kind == 8 && t->__anon1._class)
18223 thisClassFrom = t->__anon1._class->__anon1.registered;
18224 else
18225 thisClassFrom = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "class");
18226 FreeType(t);
18227 passAsTemplate = tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType)));
18228 FreeType(exp->expType);
18229 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18230 exp->expType->thisClassFrom = thisClassFrom;
18231 if(exp->expType->kind == 8 && constant)
18232 exp->expType->constant = 1;
18233 else if(exp->expType->kind == 13)
18234 {
18235 struct Type * t = exp->expType->__anon1.type;
18236
18237 while(t->kind == 13)
18238 t = t->__anon1.type;
18239 if(constant)
18240 t->constant = constant;
18241 }
18242 if(exp->expType)
18243 {
18244 if(exp->expType->kind == 21)
18245 {
18246 FreeType(exp->expType);
18247 exp->expType = ReplaceThisClassType(_class);
18248 }
18249 if(passAsTemplate)
18250 exp->expType->passAsTemplate = 1;
18251 if(!exp->destType)
18252 {
18253 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18254 if(exp->destType->kind == 8 && constant)
18255 exp->destType->constant = 1;
18256 else if(exp->destType->kind == 13)
18257 {
18258 struct Type * t = exp->destType->__anon1.type;
18259
18260 while(t->kind == 13)
18261 t = t->__anon1.type;
18262 if(constant)
18263 t->constant = constant;
18264 }
18265 if(exp->destType->kind == 21)
18266 {
18267 FreeType(exp->destType);
18268 exp->destType = ReplaceThisClassType(_class);
18269 }
18270 }
18271 }
18272 FinishTemplatesContext(context);
18273 }
18274 }
18275 else if(tClass && exp->expType->kind == 13 && exp->expType->__anon1.type && exp->expType->__anon1.type->kind == 20 && exp->expType->__anon1.type->__anon1.templateParameter->type == 0)
18276 {
18277 int id = 0;
18278 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
18279 struct __ecereNameSpace__ecere__com__Class * sClass;
18280
18281 for(sClass = tClass; sClass; sClass = sClass->base)
18282 {
18283 id = 0;
18284 if(sClass->templateClass)
18285 sClass = sClass->templateClass;
18286 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
18287 {
18288 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
18289 {
18290 for(sClass = sClass->base; sClass; sClass = sClass->base)
18291 id += sClass->templateParams.count;
18292 break;
18293 }
18294 id++;
18295 }
18296 if(curParam)
18297 break;
18298 }
18299 if(curParam)
18300 {
18301 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
18302 struct Context * context = SetupTemplatesContext(tClass);
18303 struct Type * basicType;
18304
18305 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
18306 if(basicType)
18307 {
18308 if(basicType->kind == 21)
18309 {
18310 FreeType(basicType);
18311 basicType = ReplaceThisClassType(_class);
18312 }
18313 FreeType(exp->expType);
18314 exp->expType = __extension__ ({
18315 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18316
18317 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
18318 });
18319 if(!exp->destType)
18320 {
18321 exp->destType = exp->expType;
18322 exp->destType->refCount++;
18323 }
18324 {
18325 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18326 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18327 struct Declarator * decl;
18328
18329 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18330 *newExp = *exp;
18331 if(exp->destType)
18332 exp->destType->refCount++;
18333 if(exp->expType)
18334 exp->expType->refCount++;
18335 exp->type = 11;
18336 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
18337 exp->__anon1.cast.exp = newExp;
18338 }
18339 }
18340 FinishTemplatesContext(context);
18341 }
18342 }
18343 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
18344 {
18345 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
18346
18347 if(expClass)
18348 {
18349 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
18350 int p = 0;
18351 int paramCount = 0;
18352 int lastParam = -1;
18353 char templateString[1024];
18354 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
18355
18356 sprintf(templateString, "%s<", expClass->templateClass->fullName);
18357 while(cClass != expClass)
18358 {
18359 struct __ecereNameSpace__ecere__com__Class * sClass;
18360
18361 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
18362 ;
18363 cClass = sClass;
18364 for(param = cClass->templateParams.first; param; param = param->next)
18365 {
18366 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
18367 int cp = 0;
18368 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
18369 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
18370
18371 while(cClassCur != tClass && !paramCur)
18372 {
18373 struct __ecereNameSpace__ecere__com__Class * sClassCur;
18374
18375 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
18376 ;
18377 cClassCur = sClassCur;
18378 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
18379 {
18380 if(!strcmp(paramCur->name, param->name))
18381 {
18382 break;
18383 }
18384 cp++;
18385 }
18386 }
18387 if(paramCur && paramCur->type == 0)
18388 arg = tClass->templateArgs[cp];
18389 else
18390 arg = expClass->templateArgs[p];
18391 {
18392 char argument[256];
18393
18394 argument[0] = '\0';
18395 switch(param->type)
18396 {
18397 case 2:
18398 {
18399 char expString[1024];
18400 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18401 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
18402 struct Expression * exp;
18403 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
18404
18405 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
18406 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
18407 ProcessExpressionType(exp);
18408 ComputeExpression(exp);
18409 expString[0] = '\0';
18410 PrintExpression(exp, expString);
18411 strcat(argument, expString);
18412 FreeExpression(exp);
18413 break;
18414 }
18415 case 1:
18416 {
18417 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
18418 break;
18419 }
18420 case 0:
18421 {
18422 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
18423 strcat(argument, arg.__anon1.__anon1.dataTypeString);
18424 break;
18425 }
18426 }
18427 if(argument[0])
18428 {
18429 if(paramCount)
18430 strcat(templateString, ", ");
18431 if(lastParam != p - 1)
18432 {
18433 strcat(templateString, param->name);
18434 strcat(templateString, " = ");
18435 }
18436 strcat(templateString, argument);
18437 paramCount++;
18438 lastParam = p;
18439 }
18440 }
18441 p++;
18442 }
18443 }
18444 {
18445 int len = strlen(templateString);
18446
18447 if(templateString[len - 1] == '>')
18448 templateString[len++] = ' ';
18449 templateString[len++] = '>';
18450 templateString[len++] = '\0';
18451 }
18452 FreeType(exp->expType);
18453 {
18454 struct Context * context = SetupTemplatesContext(tClass);
18455
18456 exp->expType = ProcessTypeString(templateString, 0);
18457 FinishTemplatesContext(context);
18458 }
18459 }
18460 }
18461 }
18462 }
18463 else
18464 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "undefined class %s\n", (((void *)0))), (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->string : (type->__anon1._class ? type->__anon1._class->string : (((void *)0)))) : "(null)");
18465 }
18466 else if(type && (type->kind == 9 || type->kind == 10))
18467 {
18468 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
18469
18470 if(memberType)
18471 {
18472 exp->expType = memberType;
18473 if(memberType)
18474 memberType->refCount++;
18475 }
18476 }
18477 else
18478 {
18479 char expString[10240];
18480
18481 expString[0] = '\0';
18482 if(inCompiler)
18483 {
18484 PrintExpression(exp, expString);
18485 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18486 }
18487 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
18488 }
18489 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
18490 {
18491 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
18492 {
18493 struct Identifier * id = exp->__anon1.member.member;
18494 struct __ecereNameSpace__ecere__com__Class * _class = (id && (!id->_class || id->_class->__anon1.__anon1.name)) ? (id->classSym ? id->classSym->__anon1.registered : (type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0)))) : (((void *)0));
18495
18496 if(_class)
18497 {
18498 FreeType(exp->expType);
18499 exp->expType = ReplaceThisClassType(_class);
18500 }
18501 }
18502 }
18503 yylloc = oldyylloc;
18504 break;
18505 }
18506 case 9:
18507 {
18508 struct Type * destType = exp->destType;
18509
18510 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
18511 {
18512 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
18513 }
18514 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
18515 exp->type = 8;
18516 if(destType)
18517 destType->count++;
18518 ProcessExpressionType(exp);
18519 if(destType)
18520 destType->count--;
18521 break;
18522 }
18523 case 15:
18524 {
18525 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
18526
18527 if(classSym && classSym->__anon1.registered)
18528 {
18529 if(classSym->__anon1.registered->type == 5 || (classSym->__anon1.registered->fixed && classSym->__anon1.registered->structSize))
18530 {
18531 char name[1024];
18532 struct __ecereNameSpace__ecere__com__Class * b = classSym->__anon1.registered;
18533
18534 name[0] = '\0';
18535 DeclareStruct(curExternal, classSym->string, 0, 1);
18536 FreeSpecifier(exp->__anon1._class);
18537 FullClassNameCat(name, classSym->string, 0);
18538 if(b->offset == 0)
18539 {
18540 exp->type = 10;
18541 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
18542 }
18543 else
18544 {
18545 struct Expression * e;
18546
18547 exp->type = 4;
18548 if(b->structSize == b->offset)
18549 exp->__anon1.op.exp1 = MkExpConstant("0");
18550 else
18551 exp->__anon1.op.exp1 = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18552 exp->__anon1.op.op = '+';
18553 e = exp;
18554 while(b->offset != 0)
18555 {
18556 struct Symbol * sym;
18557 struct Expression * typeSize;
18558
18559 b = b->base;
18560 sym = FindClass(b->fullName);
18561 name[0] = '\0';
18562 DeclareStruct(curExternal, sym->string, 0, 1);
18563 FullClassNameCat(name, sym->string, 0);
18564 if(b->structSize == b->offset)
18565 typeSize = MkExpConstant("0");
18566 else
18567 typeSize = MkExpTypeSize(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0))));
18568 e->__anon1.op.exp2 = b->offset ? MkExpOp(typeSize, '+', (((void *)0))) : typeSize;
18569 e = e->__anon1.op.exp2;
18570 }
18571 }
18572 }
18573 else
18574 {
18575 if(classSym->__anon1.registered->fixed && !classSym->__anon1.registered->structSize)
18576 {
18577 FreeSpecifier(exp->__anon1._class);
18578 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
18579 exp->type = 2;
18580 }
18581 else
18582 {
18583 char className[1024];
18584
18585 strcpy(className, "__ecereClass_");
18586 FullClassNameCat(className, classSym->string, 1);
18587 DeclareClass(curExternal, classSym, className);
18588 FreeExpContents(exp);
18589 exp->type = 9;
18590 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
18591 exp->__anon1.member.member = MkIdentifier("structSize");
18592 }
18593 }
18594 }
18595 exp->expType = __extension__ ({
18596 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18597
18598 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18599 });
18600 break;
18601 }
18602 case 10:
18603 {
18604 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
18605
18606 exp->expType = __extension__ ({
18607 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18608
18609 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
18610 });
18611 exp->isConstant = 1;
18612 DeclareType(curExternal, type, 1, 0);
18613 FreeType(type);
18614 break;
18615 }
18616 case 11:
18617 {
18618 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
18619
18620 type->count = 1;
18621 FreeType(exp->__anon1.cast.exp->destType);
18622 exp->__anon1.cast.exp->destType = type;
18623 type->refCount++;
18624 type->casted = 1;
18625 ProcessExpressionType(exp->__anon1.cast.exp);
18626 type->casted = 0;
18627 type->count = 0;
18628 exp->expType = type;
18629 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
18630 {
18631 void * prev = exp->prev, * next = exp->next;
18632 struct Type * expType = exp->__anon1.cast.exp->destType;
18633 struct Expression * castExp = exp->__anon1.cast.exp;
18634 struct Type * destType = exp->destType;
18635
18636 if(expType)
18637 expType->refCount++;
18638 FreeType(exp->expType);
18639 FreeTypeName(exp->__anon1.cast.typeName);
18640 *exp = *castExp;
18641 FreeType(exp->expType);
18642 FreeType(exp->destType);
18643 exp->expType = expType;
18644 exp->destType = destType;
18645 ((castExp ? __extension__ ({
18646 void * __ecerePtrToDelete = (castExp);
18647
18648 __ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)__ecerePtrToDelete) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(__ecerePtrToDelete);
18649 }) : 0), castExp = 0);
18650 exp->prev = prev;
18651 exp->next = next;
18652 }
18653 else
18654 {
18655 exp->isConstant = exp->__anon1.cast.exp->isConstant;
18656 }
18657 break;
18658 }
18659 case 33:
18660 {
18661 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
18662
18663 exp->expType = type;
18664 break;
18665 }
18666 case 34:
18667 {
18668 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
18669
18670 ProcessExpressionType(exp->__anon1.vaArg.exp);
18671 exp->expType = type;
18672 break;
18673 }
18674 case 12:
18675 {
18676 struct Expression * e;
18677 struct Type * t = exp->destType;
18678
18679 if(t && !exp->destType->casted)
18680 {
18681 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18682 CopyTypeInto(t, exp->destType);
18683 t->count = 0;
18684 }
18685 else if(t)
18686 t->refCount++;
18687 exp->isConstant = 1;
18688 FreeType(exp->__anon1.cond.cond->destType);
18689 exp->__anon1.cond.cond->destType = MkClassType("bool");
18690 exp->__anon1.cond.cond->destType->truth = 1;
18691 ProcessExpressionType(exp->__anon1.cond.cond);
18692 if(!exp->__anon1.cond.cond->isConstant)
18693 exp->isConstant = 0;
18694 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
18695 {
18696 if(!e->next)
18697 {
18698 FreeType(e->destType);
18699 e->destType = t;
18700 if(e->destType)
18701 e->destType->refCount++;
18702 }
18703 ProcessExpressionType(e);
18704 if(!e->next)
18705 {
18706 exp->expType = e->expType;
18707 if(e->expType)
18708 e->expType->refCount++;
18709 }
18710 if(!e->isConstant)
18711 exp->isConstant = 0;
18712 }
18713 FreeType(exp->__anon1.cond.elseExp->destType);
18714 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
18715 if(exp->__anon1.cond.elseExp->destType)
18716 exp->__anon1.cond.elseExp->destType->refCount++;
18717 ProcessExpressionType(exp->__anon1.cond.elseExp);
18718 if(!exp->__anon1.cond.elseExp->isConstant)
18719 exp->isConstant = 0;
18720 FreeType(t);
18721 break;
18722 }
18723 case 23:
18724 {
18725 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
18726 {
18727 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
18728
18729 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
18730 {
18731 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
18732 if(exp->destType)
18733 exp->destType->refCount++;
18734 }
18735 ProcessStatement(exp->__anon1.compound);
18736 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
18737 if(exp->expType)
18738 exp->expType->refCount++;
18739 }
18740 break;
18741 }
18742 case 24:
18743 {
18744 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
18745
18746 if(spec && spec->type == 1)
18747 {
18748 exp->expType = MkClassType(spec->__anon1.__anon1.name);
18749 exp->expType->kind = 19;
18750 exp->byReference = 1;
18751 }
18752 else
18753 {
18754 exp->expType = MkClassType("ecere::com::Class");
18755 exp->byReference = 1;
18756 }
18757 break;
18758 }
18759 case 25:
18760 {
18761 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
18762
18763 if(_class)
18764 {
18765 struct Identifier * id = exp->__anon1.classData.id;
18766 char structName[1024];
18767 struct Expression * classExp;
18768
18769 strcpy(structName, "__ecereClassData_");
18770 FullClassNameCat(structName, _class->fullName, 0);
18771 exp->type = 9;
18772 exp->__anon1.member.member = id;
18773 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
18774 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
18775 else
18776 classExp = MkExpIdentifier(MkIdentifier("class"));
18777 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp(MkExpCast(MkTypeName(MkListOne(MkSpecifier(CHAR)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpMember(classExp, MkIdentifier("data"))), '+', MkExpMember(MkExpClass(MkListOne(MkSpecifierName(_class->fullName)), (((void *)0))), MkIdentifier("offsetClass"))))))));
18778 ProcessExpressionType(exp);
18779 return ;
18780 }
18781 break;
18782 }
18783 case 35:
18784 {
18785 struct Type * type = (((void *)0));
18786 const char * typeString = (((void *)0));
18787 char typeStringBuf[1024];
18788
18789 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && exp->destType->__anon1._class->__anon1.registered != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(exp->destType->__anon1._class->__anon1.registered, containerClass))
18790 {
18791 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
18792
18793 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18794 }
18795 else if(exp->__anon1.list)
18796 {
18797 struct Expression * e;
18798
18799 for(e = (*exp->__anon1.list).first; e; e = e->next)
18800 {
18801 ProcessExpressionType(e);
18802 if(e->expType)
18803 {
18804 if(!type)
18805 {
18806 type = e->expType;
18807 type->refCount++;
18808 }
18809 else
18810 {
18811 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18812 {
18813 FreeType(type);
18814 type = e->expType;
18815 e->expType = (((void *)0));
18816 e = (*exp->__anon1.list).first;
18817 ProcessExpressionType(e);
18818 if(e->expType)
18819 {
18820 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18821 {
18822 FreeType(e->expType);
18823 e->expType = (((void *)0));
18824 FreeType(type);
18825 type = (((void *)0));
18826 break;
18827 }
18828 }
18829 }
18830 }
18831 if(e->expType)
18832 {
18833 FreeType(e->expType);
18834 e->expType = (((void *)0));
18835 }
18836 }
18837 }
18838 if(type)
18839 {
18840 typeStringBuf[0] = '\0';
18841 PrintTypeNoConst(type, typeStringBuf, 0, 1);
18842 typeString = typeStringBuf;
18843 FreeType(type);
18844 type = (((void *)0));
18845 }
18846 }
18847 if(typeString)
18848 {
18849 char templateString[1024];
18850 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18851 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
18852 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18853 struct Expression * expExt;
18854 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
18855
18856 sprintf(templateString, "Container<%s>", typeString);
18857 if(exp->__anon1.list)
18858 {
18859 struct Expression * e;
18860
18861 type = ProcessTypeString(typeString, 0);
18862 while((e = (*exp->__anon1.list).first))
18863 {
18864 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
18865 e->destType = type;
18866 type->refCount++;
18867 ProcessExpressionType(e);
18868 ListAdd(initializers, MkInitializerAssignment(e));
18869 }
18870 FreeType(type);
18871 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
18872 }
18873 DeclareStruct(curExternal, "ecere::com::BuiltInContainer", 0, 1);
18874 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
18875 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18876 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
18877 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18878 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
18879 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18880 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
18881 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18882 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
18883 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
18884
18885 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
18886 })));
18887 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18888 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
18889 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
18890 exp->expType = ProcessTypeString(templateString, 0);
18891 exp->type = 5;
18892 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
18893 ProcessExpressionType(expExt);
18894 }
18895 else
18896 {
18897 exp->expType = ProcessTypeString("Container", 0);
18898 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18899 }
18900 break;
18901 }
18902 }
18903 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
18904 {
18905 FreeType(exp->expType);
18906 exp->expType = ReplaceThisClassType(thisClass);
18907 }
18908 if(exp->expType && (exp->expType->kind == 9 || exp->expType->kind == 10 || exp->expType->kind == 15) && !exp->expType->__anon1.__anon1.members.first && exp->expType->__anon1.__anon1.enumName)
18909 {
18910 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
18911
18912 if(symbol)
18913 {
18914 if(exp->expType->kind != 15)
18915 {
18916 struct Type * member;
18917 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
18918
18919 FreeType(exp->expType);
18920 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18921 exp->expType->kind = symbol->type->kind;
18922 exp->expType->refCount++;
18923 exp->expType->__anon1.__anon1.enumName = enumName;
18924 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
18925 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18926 member->refCount++;
18927 }
18928 else
18929 {
18930 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
18931
18932 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
18933 {
18934 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__sys__NamedLink64)), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
18935
18936 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
18937 }
18938 }
18939 }
18940 }
18941 if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1 && exp->destType->kind != 24)))
18942 {
18943 exp->byReference = 1;
18944 }
18945 yylloc = exp->loc;
18946 if(exp->destType && (exp->destType->kind == 18))
18947 ;
18948 else if(exp->destType && !exp->destType->keepCast)
18949 {
18950 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
18951 exp->needTemplateCast = 1;
18952 if(exp->destType->kind == 0)
18953 ;
18954 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
18955 {
18956 unsigned int invalidCast = 0;
18957
18958 if(inCompiler && exp->destType->count && exp->expType)
18959 {
18960 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
18961 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
18962
18963 if(c1 && c1->type != 1)
18964 c1 = (((void *)0));
18965 if(c2 && c2->type != 1)
18966 c2 = (((void *)0));
18967 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
18968 invalidCast = 1;
18969 }
18970 if(!exp->destType->count || unresolved || invalidCast)
18971 {
18972 if(!exp->expType)
18973 {
18974 yylloc = exp->loc;
18975 if(exp->destType->kind != 14)
18976 {
18977 char type2[1024];
18978
18979 type2[0] = '\0';
18980 if(inCompiler)
18981 {
18982 char expString[10240];
18983
18984 expString[0] = '\0';
18985 PrintType(exp->destType, type2, 0, 1);
18986 if(inCompiler)
18987 {
18988 PrintExpression(exp, expString);
18989 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
18990 }
18991 if(unresolved)
18992 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
18993 else if(exp->type != 16)
18994 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
18995 }
18996 }
18997 else
18998 {
18999 char expString[10240];
19000
19001 expString[0] = '\0';
19002 if(inCompiler)
19003 {
19004 PrintExpression(exp, expString);
19005 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19006 }
19007 if(unresolved)
19008 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
19009 else if(exp->type != 16)
19010 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19011 }
19012 }
19013 else
19014 {
19015 char type1[1024];
19016 char type2[1024];
19017
19018 type1[0] = '\0';
19019 type2[0] = '\0';
19020 if(inCompiler)
19021 {
19022 PrintType(exp->expType, type1, 0, 1);
19023 PrintType(exp->destType, type2, 0, 1);
19024 }
19025 if(exp->destType->truth && exp->destType->__anon1._class && exp->destType->__anon1._class->__anon1.registered && !strcmp(exp->destType->__anon1._class->__anon1.registered->name, "bool") && exp->expType->kind != 0 && exp->expType->kind != 9 && exp->expType->kind != 10 && (exp->expType->kind != 8 || exp->expType->classObjectType || (exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type != 1)))
19026 ;
19027 else
19028 {
19029 struct Expression * nbExp = GetNonBracketsExp(exp);
19030 unsigned int skipWarning = 0;
19031 int kind = exp->destType->kind;
19032
19033 if(nbExp->type == 12 && nbExp->destType && !nbExp->destType->casted && nbExp->destType->kind == exp->destType->kind)
19034 skipWarning = 1;
19035 if((kind == 1 || kind == 2) && exp->destType->isSigned == exp->expType->signedBeforePromotion && nbExp->type == 4 && nbExp->__anon1.op.exp1 && nbExp->__anon1.op.exp2)
19036 {
19037 int op = nbExp->__anon1.op.op;
19038 struct Expression * nbExp1, * nbExp2;
19039 int from;
19040
19041 switch(op)
19042 {
19043 case '%':
19044 case '/':
19045 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19046 from = nbExp1->expType->promotedFrom;
19047 if(from == 1 || (kind == 2 && from == 2))
19048 skipWarning = 1;
19049 break;
19050 case LEFT_OP:
19051 case RIGHT_OP:
19052 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19053 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19054 from = nbExp1->expType->promotedFrom;
19055 if(op == RIGHT_OP && (from == 1 || (kind == 2 && from == 2)))
19056 skipWarning = 1;
19057 else if(nbExp2->isConstant && nbExp2->type == 2 && (nbExp->__anon1.op.op == RIGHT_OP || nbExp1->expType->bitMemberSize))
19058 {
19059 int n = strtol(nbExp2->__anon1.__anon1.constant, (((void *)0)), 0);
19060 int s = from == 1 ? 8 : 16;
19061
19062 if(nbExp1->expType->bitMemberSize && nbExp1->expType->bitMemberSize < s)
19063 s = nbExp1->expType->bitMemberSize;
19064 if(nbExp->__anon1.op.op == RIGHT_OP)
19065 s -= n;
19066 else
19067 s += n;
19068 if(s <= (kind == 1 ? 8 : 16))
19069 skipWarning = 1;
19070 }
19071 break;
19072 case '-':
19073 if(!exp->destType->isSigned)
19074 {
19075 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19076 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19077 from = nbExp2->expType->promotedFrom;
19078 if((from == 1 || from == 2) && nbExp1->isConstant && nbExp1->type == 2)
19079 {
19080 int n = strtol(nbExp1->__anon1.__anon1.constant, (((void *)0)), 0);
19081
19082 if(n == (from == 1 ? 255 : 65535))
19083 skipWarning = 1;
19084 }
19085 }
19086 break;
19087 case '|':
19088 {
19089 int kind1, kind2;
19090
19091 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19092 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19093 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19094 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19095 if(((kind1 == 1 || (kind1 == 2 && kind == 2)) || MatchTypeExpression(nbExp1, exp->destType, (((void *)0)), 0, 0)) && ((kind2 == 1 || (kind2 == 2 && kind == 2)) || MatchTypeExpression(nbExp2, exp->destType, (((void *)0)), 0, 0)))
19096 skipWarning = 1;
19097 break;
19098 }
19099 case '&':
19100 {
19101 int kind1, kind2;
19102
19103 nbExp1 = GetNonBracketsExp(nbExp->__anon1.op.exp1);
19104 nbExp2 = GetNonBracketsExp(nbExp->__anon1.op.exp2);
19105 kind1 = nbExp1->expType->promotedFrom ? nbExp1->expType->promotedFrom : nbExp1->expType->kind;
19106 kind2 = nbExp2->expType->promotedFrom ? nbExp2->expType->promotedFrom : nbExp2->expType->kind;
19107 if(((kind1 == 1 || (kind1 == 2 && kind == 2)) || MatchTypeExpression(nbExp1, exp->destType, (((void *)0)), 0, 0)) || ((kind2 == 1 || (kind2 == 2 && kind == 2)) || MatchTypeExpression(nbExp2, exp->destType, (((void *)0)), 0, 0)))
19108 skipWarning = 1;
19109 break;
19110 }
19111 }
19112 }
19113 if(!skipWarning)
19114 {
19115 char expString[10240];
19116
19117 expString[0] = '\0';
19118 if(inCompiler)
19119 {
19120 PrintExpression(exp, expString);
19121 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19122 }
19123 if(!sourceFile || (!strstr(sourceFile, "src\\lexer.ec") && !strstr(sourceFile, "src/lexer.ec") && !strstr(sourceFile, "src\\grammar.ec") && !strstr(sourceFile, "src/grammar.ec") && !strstr(sourceFile, "src\\type.ec") && !strstr(sourceFile, "src/type.ec") && !strstr(sourceFile, "src\\expression.ec") && !strstr(sourceFile, "src/expression.ec")))
19124 {
19125 if(invalidCast)
19126 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19127 else
19128 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
19129 }
19130 }
19131 if(!inCompiler)
19132 {
19133 FreeType(exp->expType);
19134 exp->destType->refCount++;
19135 exp->expType = exp->destType;
19136 }
19137 }
19138 }
19139 }
19140 }
19141 else if(exp->destType && exp->destType->kind == 13 && exp->destType->__anon1.type && exp->destType->__anon1.type->kind == 11 && exp->expType && (exp->expType->kind == 11 || exp->expType->kind == 16))
19142 {
19143 struct Expression * nbExp = GetNonBracketsExp(exp);
19144
19145 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
19146 {
19147 struct Expression * e = MoveExpContents(exp);
19148
19149 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
19150 exp->type = 11;
19151 exp->__anon1.cast.exp->destType = exp->destType;
19152 if(exp->destType)
19153 exp->destType->refCount++;
19154 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
19155 }
19156 }
19157 }
19158 else if(unresolved)
19159 {
19160 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
19161 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s::%s\n", (((void *)0))), exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name, exp->__anon1.__anon1.identifier->string);
19162 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
19163 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
19164 }
19165 else if(!exp->expType && exp->type != 16)
19166 {
19167 char expString[10240];
19168
19169 expString[0] = '\0';
19170 if(inCompiler)
19171 {
19172 PrintExpression(exp, expString);
19173 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
19174 }
19175 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
19176 }
19177 if(inCompiler)
19178 ApplyAnyObjectLogic(exp);
19179 if(!notByReference && exp->expType && exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 5 && (!exp->destType || (exp->destType->kind != 3 && exp->destType->kind != 4 && exp->destType->kind != 22 && exp->destType->kind != 23 && exp->destType->kind != 5 && exp->destType->kind != 2 && exp->destType->kind != 1 && exp->destType->kind != 24)))
19180 {
19181 exp->byReference = 1;
19182 }
19183 yylloc = oldyylloc;
19184 }
19185
19186 static void ProcessFunction(struct FunctionDefinition * function)
19187 {
19188 struct Identifier * id = GetDeclId(function->declarator);
19189 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
19190 struct Type * type = symbol ? symbol->type : (((void *)0));
19191 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
19192 struct Context * oldTopContext = topContext;
19193
19194 yylloc = function->loc;
19195 if(type && type->__anon1.__anon2.thisClass)
19196 {
19197 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
19198 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
19199 char className[1024];
19200 char structName[1024];
19201 struct Declarator * funcDecl;
19202 struct Symbol * thisSymbol;
19203 unsigned int typedObject = 0;
19204
19205 if(_class && !_class->base)
19206 {
19207 _class = currentClass;
19208 if(_class && !_class->symbol)
19209 _class->symbol = FindClass(_class->fullName);
19210 classSym = _class ? _class->symbol : (((void *)0));
19211 typedObject = 1;
19212 }
19213 thisClass = _class;
19214 if(inCompiler && _class)
19215 {
19216 if(type->kind == 11)
19217 {
19218 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
19219 {
19220 struct Type * param = symbol->type->__anon1.__anon2.params.first;
19221
19222 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
19223 FreeType(param);
19224 }
19225 if(type->classObjectType != 1)
19226 {
19227 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
19228 symbol->type->__anon1.__anon2.staticMethod = 1;
19229 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
19230 symbol->type->extraParam = 0;
19231 }
19232 }
19233 strcpy(className, "__ecereClass_");
19234 FullClassNameCat(className, _class->fullName, 1);
19235 structName[0] = 0;
19236 FullClassNameCat(structName, _class->fullName, 0);
19237 funcDecl = GetFuncDecl(function->declarator);
19238 if(funcDecl)
19239 {
19240 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19241 {
19242 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19243
19244 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19245 {
19246 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19247 FreeTypeName(param);
19248 }
19249 }
19250 if(!function->propertyNoThis)
19251 {
19252 struct TypeName * thisParam = (((void *)0));
19253
19254 if(type->classObjectType != 1)
19255 {
19256 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19257 if(!funcDecl->__anon1.function.parameters)
19258 funcDecl->__anon1.function.parameters = MkList();
19259 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19260 }
19261 if(typedObject)
19262 {
19263 if(type->classObjectType != 1)
19264 {
19265 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
19266 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
19267 }
19268 thisParam = __extension__ ({
19269 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
19270
19271 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
19272 });
19273 DeclareStruct(curExternal, "ecere::com::Class", 0, 1);
19274 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19275 }
19276 }
19277 }
19278 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19279 {
19280 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19281
19282 funcDecl = GetFuncDecl(initDecl->declarator);
19283 if(funcDecl)
19284 {
19285 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
19286 {
19287 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
19288
19289 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
19290 {
19291 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
19292 FreeTypeName(param);
19293 }
19294 }
19295 if(type->classObjectType != 1)
19296 {
19297 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
19298 {
19299 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
19300
19301 if(!funcDecl->__anon1.function.parameters)
19302 funcDecl->__anon1.function.parameters = MkList();
19303 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
19304 }
19305 }
19306 }
19307 }
19308 }
19309 if(function->body)
19310 {
19311 if(type->classObjectType != 1)
19312 {
19313 thisSymbol = __extension__ ({
19314 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19315
19316 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
19317 });
19318 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19319 if(typedObject && thisSymbol->type)
19320 {
19321 thisSymbol->type->classObjectType = 2;
19322 thisSymbol->type->byReference = type->byReference;
19323 thisSymbol->type->typedByReference = type->byReference;
19324 }
19325 }
19326 }
19327 if(inCompiler && _class && _class->type == 0 && type->classObjectType != 1)
19328 {
19329 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
19330
19331 {
19332 struct __ecereNameSpace__ecere__com__Class * base;
19333
19334 for(base = _class; base && base->type != 1000; base = base->next)
19335 {
19336 for(member = base->membersAndProperties.first; member; member = member->next)
19337 if(!member->isProperty)
19338 break;
19339 if(member)
19340 break;
19341 }
19342 }
19343 for(member = _class->membersAndProperties.first; member; member = member->next)
19344 if(!member->isProperty)
19345 break;
19346 if(member)
19347 {
19348 char pointerName[1024];
19349 struct Declaration * decl;
19350 struct Initializer * initializer;
19351 struct Expression * exp, * bytePtr;
19352
19353 strcpy(pointerName, "__ecerePointer_");
19354 FullClassNameCat(pointerName, _class->fullName, 0);
19355 {
19356 char className[1024];
19357
19358 strcpy(className, "__ecereClass_");
19359 FullClassNameCat(className, classSym->string, 1);
19360 DeclareClass(curExternal, classSym, className);
19361 }
19362 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
19363 if(_class->fixed)
19364 {
19365 struct Expression * e;
19366
19367 if(_class->offset && _class->offset == (_class->base->type == 5 ? _class->base->memberOffset : _class->base->structSize))
19368 {
19369 e = MkExpClassSize(MkSpecifierName(_class->base->fullName));
19370 ProcessExpressionType(e);
19371 }
19372 else
19373 {
19374 char string[256];
19375
19376 sprintf(string, "%d", _class->offset);
19377 e = MkExpConstant(string);
19378 }
19379 exp = QBrackets(MkExpOp(bytePtr, '+', e));
19380 }
19381 else
19382 {
19383 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
19384 }
19385 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
19386 exp->expType = __extension__ ({
19387 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19388
19389 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
19390 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
19391
19392 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
19393 }), __ecereInstance2;
19394 });
19395 if(function->body)
19396 {
19397 yylloc = function->body->loc;
19398 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
19399 {
19400 struct Context * prevContext = curContext;
19401 struct __ecereNameSpace__ecere__sys__OldList * list;
19402
19403 curContext = function->body->__anon1.compound.context;
19404 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
19405 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
19406 curContext = prevContext;
19407 }
19408 decl->symbol = (((void *)0));
19409 if(!function->body->__anon1.compound.declarations)
19410 function->body->__anon1.compound.declarations = MkList();
19411 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
19412 }
19413 }
19414 }
19415 }
19416 else
19417 thisClass = (((void *)0));
19418 if(id)
19419 {
19420 FreeSpecifier(id->_class);
19421 id->_class = (((void *)0));
19422 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
19423 {
19424 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
19425
19426 id = GetDeclId(initDecl->declarator);
19427 FreeSpecifier(id->_class);
19428 id->_class = (((void *)0));
19429 }
19430 }
19431 if(function->body)
19432 topContext = function->body->__anon1.compound.context;
19433 {
19434 struct FunctionDefinition * oldFunction = curFunction;
19435
19436 curFunction = function;
19437 if(function->body)
19438 ProcessStatement(function->body);
19439 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
19440 {
19441 struct Statement * prevCompound = curCompound;
19442 struct Context * prevContext = curContext;
19443 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
19444
19445 if(!function->body->__anon1.compound.statements)
19446 function->body->__anon1.compound.statements = MkList();
19447 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
19448 curCompound = function->body;
19449 curContext = function->body->__anon1.compound.context;
19450 ProcessStatement(fireWatchers);
19451 curContext = prevContext;
19452 curCompound = prevCompound;
19453 }
19454 curFunction = oldFunction;
19455 }
19456 if(function->declarator)
19457 {
19458 ProcessDeclarator(function->declarator, 1);
19459 }
19460 topContext = oldTopContext;
19461 thisClass = oldThisClass;
19462 }
19463
19464 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
19465 {
19466 struct ClassDef * def;
19467 struct External * external = curExternal;
19468 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
19469
19470 for(def = definitions->first; def; def = def->next)
19471 {
19472 if(def->type == 0)
19473 {
19474 if(def->__anon1.function->declarator)
19475 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
19476 else
19477 curExternal = external;
19478 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
19479 }
19480 else if(def->type == 2)
19481 {
19482 if(def->__anon1.decl->type == 2)
19483 {
19484 thisClass = regClass;
19485 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
19486 thisClass = (((void *)0));
19487 }
19488 else
19489 {
19490 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
19491
19492 if(regClass)
19493 thisClass = regClass;
19494 ProcessDeclaration(def->__anon1.decl, symbol ? 1 : 0);
19495 thisClass = backThisClass;
19496 }
19497 }
19498 else if(def->type == 1 && def->__anon1.defProperties)
19499 {
19500 struct MemberInit * defProperty;
19501 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
19502
19503 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19504 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
19505 {
19506 thisClass = regClass;
19507 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
19508 thisClass = (((void *)0));
19509 }
19510 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19511 FreeSymbol(thisSymbol);
19512 }
19513 else if(def->type == 3 && def->__anon1.propertyDef)
19514 {
19515 struct PropertyDef * prop = def->__anon1.propertyDef;
19516
19517 thisClass = regClass;
19518 if(prop->setStmt)
19519 {
19520 if(regClass)
19521 {
19522 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19523
19524 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19525 }
19526 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
19527 ProcessStatement(prop->setStmt);
19528 }
19529 if(prop->getStmt)
19530 {
19531 if(regClass)
19532 {
19533 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19534
19535 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19536 }
19537 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
19538 ProcessStatement(prop->getStmt);
19539 }
19540 if(prop->issetStmt)
19541 {
19542 if(regClass)
19543 {
19544 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
19545
19546 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19547 }
19548 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
19549 ProcessStatement(prop->issetStmt);
19550 }
19551 thisClass = (((void *)0));
19552 }
19553 else if(def->type == 4 && def->__anon1.propertyWatch)
19554 {
19555 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
19556
19557 thisClass = regClass;
19558 if(propertyWatch->compound)
19559 {
19560 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = regClass ? MkClassType(regClass->fullName) : (((void *)0)), thisSymbol);
19561
19562 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
19563 curExternal = (((void *)0));
19564 ProcessStatement(propertyWatch->compound);
19565 }
19566 thisClass = (((void *)0));
19567 }
19568 }
19569 }
19570
19571 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19572 {
19573 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19574
19575 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19576 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19577 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19578 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19579 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19580 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19581 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19582 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19583 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19584 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19585 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19586 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19587 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19588 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19589 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19590 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19591 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19592 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19593 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19594 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19595 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19596 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19597 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19598 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19599 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19600 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19601 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19602 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19603 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19604 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19605 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19606 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19607 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19608 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19609 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19610 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19611 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19612 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19613 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19614 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19615 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19616 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19617 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19618 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19619 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19620 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19621 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19622 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19623 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19624 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("AddMembers", "int AddMembers(External neededBy, ecere::sys::OldList * declarations, ecere::com::Class _class, bool isMember, uint * retSize, ecere::com::Class topClass, bool * addedPadding)", AddMembers, module, 2);
19625 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "External DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference)", DeclareStruct, module, 2);
19626 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("_DeclareStruct", "External _DeclareStruct(External neededBy, const char * name, bool skipNoHead, bool needDereference, bool fwdDecl)", _DeclareStruct, module, 2);
19627 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(External neededBy, ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19628 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19629 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMemberInitData", "void ProcessMemberInitData(MemberInit member, ecere::com::Class _class, ecere::com::Class * curClass, ecere::com::DataMember * curMember, ecere::com::DataMember * subMemberStack, int * subMemberStackPos)", ProcessMemberInitData, module, 2);
19630 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19631 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareType", "void DeclareType(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareType, module, 2);
19632 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareTypeForwardDeclare", "void DeclareTypeForwardDeclare(External neededFor, Type type, bool needDereference, bool forFunctionDef)", DeclareTypeForwardDeclare, module, 2);
19633 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19634 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19635 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19636 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19637 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19638 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(External neededFor, ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19639 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19640 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19641 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19642 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(External neededFor, ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19643 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(External neededFor, GlobalData data)", DeclareGlobalData, module, 2);
19644 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19645 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
19646 __ecereClass_Conversion = class;
19647 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypes", "bool MatchTypes(Type source, Type dest, ecere::sys::OldList conversions, ecere::com::Class owningClassSource, ecere::com::Class owningClassDest, bool doConversion, bool enumBaseType, bool acceptReversedParams, bool isConversionExploration, bool warnConst)", MatchTypes, module, 1);
19648 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchWithEnums_NameSpace", "bool MatchWithEnums_NameSpace(ecere::com::NameSpace nameSpace, Expression sourceExp, Type dest, char * string, ecere::sys::OldList conversions)", MatchWithEnums_NameSpace, module, 2);
19649 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19650 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchWithEnums_Module", "bool MatchWithEnums_Module(ecere::com::Module mainModule, Expression sourceExp, Type dest, char * string, ecere::sys::OldList conversions)", MatchWithEnums_Module, module, 2);
19651 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19652 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19653 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19654 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19655 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19656 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19657 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19658 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19659 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19660 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19661 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19662 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19663 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19664 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19665 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19666 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19667 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19668 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19669 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19670 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("RelatedUnits", "bool RelatedUnits(ecere::com::Class c1, ecere::com::Class c2)", RelatedUnits, module, 1);
19671 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19672 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(External neededBy, const String s)", DeclareFunctionUtil, module, 1);
19673 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
19674 }
19675