1 /* Code generated from eC source file: pass15.ec */
3 #define __runtimePlatform 1
4 #elif defined(__APPLE__)
5 #define __runtimePlatform 3
7 #define __runtimePlatform 2
10 typedef long long int64;
11 typedef unsigned long long uint64;
15 #elif defined(__TINYC__)
17 #define __builtin_va_list va_list
18 #define __builtin_va_start va_start
19 #define __builtin_va_end va_end
21 #define strcasecmp stricmp
22 #define strncasecmp strnicmp
23 #define __declspec(x) __attribute__((x))
27 typedef long long int64;
28 typedef unsigned long long uint64;
30 typedef __int64 int64;
31 typedef unsigned __int64 uint64;
34 #define __ENDIAN_PAD(x) (8 - (x))
36 #define __ENDIAN_PAD(x) 0
39 #include <sys/types.h>
41 #if /*defined(_W64) || */(defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__)
47 #define arch_PointerSize sizeof(void *)
48 #define structSize_Instance (_64BIT ? 24 : 12)
49 #define structSize_Module (_64BIT ? 560 : 300)
50 #define structSize_NamedLink64 (_64BIT ? 32 : 24)
52 struct __ecereNameSpace__ecere__com__Instance;
54 extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
56 extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
58 extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size);
60 extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size);
62 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void * memory);
64 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
66 struct __ecereNameSpace__ecere__sys__BTNode;
68 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
70 struct __ecereNameSpace__ecere__sys__BinaryTree
72 struct __ecereNameSpace__ecere__sys__BTNode * root;
74 int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
75 void (* FreeKey)(void * key);
76 } __attribute__ ((gcc_struct));
78 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
80 struct __ecereNameSpace__ecere__sys__OldList
87 } __attribute__ ((gcc_struct));
89 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
91 struct __ecereNameSpace__ecere__com__Method
94 struct __ecereNameSpace__ecere__com__Method * parent;
95 struct __ecereNameSpace__ecere__com__Method * left;
96 struct __ecereNameSpace__ecere__com__Method * right;
101 struct __ecereNameSpace__ecere__com__Class * _class;
103 const char * dataTypeString;
104 struct Type * dataType;
106 } __attribute__ ((gcc_struct));
108 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
110 struct __ecereNameSpace__ecere__com__Property
112 struct __ecereNameSpace__ecere__com__Property * prev;
113 struct __ecereNameSpace__ecere__com__Property * next;
115 unsigned int isProperty;
118 struct __ecereNameSpace__ecere__com__Class * _class;
119 const char * dataTypeString;
120 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
121 struct Type * dataType;
122 void (* Set)(void * , int);
123 int (* Get)(void * );
124 unsigned int (* IsSet)(void * );
128 unsigned int conversion;
129 unsigned int watcherOffset;
130 const char * category;
131 unsigned int compiled;
132 unsigned int selfWatchable;
133 unsigned int isWatchable;
134 } __attribute__ ((gcc_struct));
136 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
144 } __attribute__ ((gcc_struct));
146 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
150 struct CodePosition start;
151 struct CodePosition end;
152 } __attribute__ ((gcc_struct));
154 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
158 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
167 struct Attrib * attr;
168 } __attribute__ ((gcc_struct)) __anon1;
169 } __attribute__ ((gcc_struct));
171 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
173 struct ClassDefinition
175 struct ClassDefinition * prev;
176 struct ClassDefinition * next;
178 struct Specifier * _class;
179 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
180 struct __ecereNameSpace__ecere__sys__OldList * definitions;
181 struct Symbol * symbol;
182 struct Location blockStart;
183 struct Location nameLoc;
186 unsigned int deleteWatchable;
187 } __attribute__ ((gcc_struct));
189 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
193 struct Context * parent;
194 struct __ecereNameSpace__ecere__sys__BinaryTree types;
195 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
196 struct __ecereNameSpace__ecere__sys__BinaryTree symbols;
197 struct __ecereNameSpace__ecere__sys__BinaryTree structSymbols;
200 struct __ecereNameSpace__ecere__sys__BinaryTree templateTypes;
201 struct ClassDefinition * classDef;
202 unsigned int templateTypesOnly;
203 unsigned int hasNameSpace;
204 } __attribute__ ((gcc_struct));
206 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
210 struct Instantiation * prev;
211 struct Instantiation * next;
213 struct Specifier * _class;
214 struct Expression * exp;
215 struct __ecereNameSpace__ecere__sys__OldList * members;
216 struct Symbol * symbol;
217 unsigned int fullSet;
218 unsigned int isConstant;
219 unsigned char * data;
220 struct Location nameLoc;
221 struct Location insideLoc;
223 } __attribute__ ((gcc_struct));
225 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
229 struct Declaration * prev;
230 struct Declaration * next;
237 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
238 struct __ecereNameSpace__ecere__sys__OldList * declarators;
239 } __attribute__ ((gcc_struct)) __anon1;
240 struct Instantiation * inst;
243 struct Identifier * id;
244 struct Expression * exp;
245 } __attribute__ ((gcc_struct)) __anon2;
246 } __attribute__ ((gcc_struct)) __anon1;
247 struct Specifier * extStorage;
248 struct Symbol * symbol;
250 } __attribute__ ((gcc_struct));
252 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
256 struct Statement * prev;
257 struct Statement * next;
262 struct __ecereNameSpace__ecere__sys__OldList * expressions;
265 struct Identifier * id;
266 struct Statement * stmt;
267 } __attribute__ ((gcc_struct)) labeled;
270 struct Expression * exp;
271 struct Statement * stmt;
272 } __attribute__ ((gcc_struct)) caseStmt;
275 struct __ecereNameSpace__ecere__sys__OldList * declarations;
276 struct __ecereNameSpace__ecere__sys__OldList * statements;
277 struct Context * context;
278 unsigned int isSwitch;
279 } __attribute__ ((gcc_struct)) compound;
282 struct __ecereNameSpace__ecere__sys__OldList * exp;
283 struct Statement * stmt;
284 struct Statement * elseStmt;
285 } __attribute__ ((gcc_struct)) ifStmt;
288 struct __ecereNameSpace__ecere__sys__OldList * exp;
289 struct Statement * stmt;
290 } __attribute__ ((gcc_struct)) switchStmt;
293 struct __ecereNameSpace__ecere__sys__OldList * exp;
294 struct Statement * stmt;
295 } __attribute__ ((gcc_struct)) whileStmt;
298 struct __ecereNameSpace__ecere__sys__OldList * exp;
299 struct Statement * stmt;
300 } __attribute__ ((gcc_struct)) doWhile;
303 struct Statement * init;
304 struct Statement * check;
305 struct __ecereNameSpace__ecere__sys__OldList * increment;
306 struct Statement * stmt;
307 } __attribute__ ((gcc_struct)) forStmt;
310 struct Identifier * id;
311 } __attribute__ ((gcc_struct)) gotoStmt;
314 struct Specifier * spec;
316 struct __ecereNameSpace__ecere__sys__OldList * inputFields;
317 struct __ecereNameSpace__ecere__sys__OldList * outputFields;
318 struct __ecereNameSpace__ecere__sys__OldList * clobberedFields;
319 } __attribute__ ((gcc_struct)) asmStmt;
322 struct Expression * watcher;
323 struct Expression * object;
324 struct __ecereNameSpace__ecere__sys__OldList * watches;
325 } __attribute__ ((gcc_struct)) _watch;
328 struct Identifier * id;
329 struct __ecereNameSpace__ecere__sys__OldList * exp;
330 struct __ecereNameSpace__ecere__sys__OldList * filter;
331 struct Statement * stmt;
332 } __attribute__ ((gcc_struct)) forEachStmt;
333 struct Declaration * decl;
334 } __attribute__ ((gcc_struct)) __anon1;
335 } __attribute__ ((gcc_struct));
337 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
341 struct TypeName * prev;
342 struct TypeName * next;
344 struct __ecereNameSpace__ecere__sys__OldList * qualifiers;
345 struct Declarator * declarator;
347 struct Expression * bitCount;
348 } __attribute__ ((gcc_struct));
350 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
354 struct Initializer * prev;
355 struct Initializer * next;
360 struct Expression * exp;
361 struct __ecereNameSpace__ecere__sys__OldList * list;
362 } __attribute__ ((gcc_struct)) __anon1;
363 unsigned int isConstant;
364 struct Identifier * id;
365 } __attribute__ ((gcc_struct));
367 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
369 struct __ecereNameSpace__ecere__com__DataValue
384 } __attribute__ ((gcc_struct)) __anon1;
385 } __attribute__ ((gcc_struct));
387 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
391 struct Expression * prev;
392 struct Expression * next;
400 struct Identifier * identifier;
401 } __attribute__ ((gcc_struct)) __anon1;
402 struct Statement * compound;
403 struct Instantiation * instance;
407 unsigned int intlString;
408 unsigned int wideString;
409 } __attribute__ ((gcc_struct)) __anon2;
410 struct __ecereNameSpace__ecere__sys__OldList * list;
413 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
414 struct Declarator * decl;
415 } __attribute__ ((gcc_struct)) _classExp;
418 struct Identifier * id;
419 } __attribute__ ((gcc_struct)) classData;
422 struct Expression * exp;
423 struct __ecereNameSpace__ecere__sys__OldList * arguments;
424 struct Location argLoc;
425 } __attribute__ ((gcc_struct)) call;
428 struct Expression * exp;
429 struct __ecereNameSpace__ecere__sys__OldList * index;
430 } __attribute__ ((gcc_struct)) index;
433 struct Expression * exp;
434 struct Identifier * member;
436 unsigned int thisPtr;
437 } __attribute__ ((gcc_struct)) member;
441 struct Expression * exp1;
442 struct Expression * exp2;
443 } __attribute__ ((gcc_struct)) op;
444 struct TypeName * typeName;
445 struct Specifier * _class;
448 struct TypeName * typeName;
449 struct Expression * exp;
450 } __attribute__ ((gcc_struct)) cast;
453 struct Expression * cond;
454 struct __ecereNameSpace__ecere__sys__OldList * exp;
455 struct Expression * elseExp;
456 } __attribute__ ((gcc_struct)) cond;
459 struct TypeName * typeName;
460 struct Expression * size;
461 } __attribute__ ((gcc_struct)) _new;
464 struct TypeName * typeName;
465 struct Expression * size;
466 struct Expression * exp;
467 } __attribute__ ((gcc_struct)) _renew;
471 struct Identifier * id;
472 } __attribute__ ((gcc_struct)) db;
475 struct Expression * ds;
476 struct Expression * name;
477 } __attribute__ ((gcc_struct)) dbopen;
480 struct TypeName * typeName;
481 struct Initializer * initializer;
482 } __attribute__ ((gcc_struct)) initializer;
485 struct Expression * exp;
486 struct TypeName * typeName;
487 } __attribute__ ((gcc_struct)) vaArg;
488 } __attribute__ ((gcc_struct)) __anon1;
489 unsigned int debugValue;
490 struct __ecereNameSpace__ecere__com__DataValue val;
492 unsigned int hasAddress;
493 struct Type * expType;
494 struct Type * destType;
497 unsigned int byReference;
498 unsigned int isConstant;
499 unsigned int addedThis;
500 unsigned int needCast;
501 unsigned int thisPtr;
502 unsigned int opDestType;
503 unsigned int needTemplateCast;
504 } __attribute__ ((gcc_struct));
506 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
508 struct TemplateDatatype
510 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
511 struct Declarator * decl;
512 } __attribute__ ((gcc_struct));
514 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
516 struct TemplateArgument;
518 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
520 struct TemplateParameter
522 struct TemplateParameter * prev;
523 struct TemplateParameter * next;
526 struct Identifier * identifier;
529 struct TemplateDatatype * dataType;
531 } __attribute__ ((gcc_struct)) __anon1;
532 struct TemplateArgument * defaultArgument;
533 const char * dataTypeString;
534 struct Type * baseType;
535 } __attribute__ ((gcc_struct));
537 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
541 struct Specifier * prev;
542 struct Specifier * next;
550 struct ExtDecl * extDecl;
552 struct Symbol * symbol;
553 struct __ecereNameSpace__ecere__sys__OldList * templateArgs;
554 } __attribute__ ((gcc_struct)) __anon1;
557 struct Identifier * id;
558 struct __ecereNameSpace__ecere__sys__OldList * list;
559 struct __ecereNameSpace__ecere__sys__OldList * baseSpecs;
560 struct __ecereNameSpace__ecere__sys__OldList * definitions;
561 unsigned int addNameSpace;
562 struct Context * ctx;
563 struct ExtDecl * extDeclStruct;
564 } __attribute__ ((gcc_struct)) __anon2;
565 struct Expression * expression;
566 struct Specifier * _class;
567 struct TemplateParameter * templateParameter;
568 } __attribute__ ((gcc_struct)) __anon1;
569 } __attribute__ ((gcc_struct));
571 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
575 struct Identifier * prev;
576 struct Identifier * next;
578 struct Symbol * classSym;
579 struct Specifier * _class;
581 struct Identifier * badID;
582 } __attribute__ ((gcc_struct));
584 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
588 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
592 struct Declarator * prev;
593 struct Declarator * next;
596 struct Symbol * symbol;
597 struct Declarator * declarator;
600 struct Identifier * identifier;
603 struct Expression * exp;
604 struct Expression * posExp;
605 struct Attrib * attrib;
606 } __attribute__ ((gcc_struct)) structDecl;
609 struct Expression * exp;
610 struct Specifier * enumClass;
611 } __attribute__ ((gcc_struct)) array;
614 struct __ecereNameSpace__ecere__sys__OldList * parameters;
615 } __attribute__ ((gcc_struct)) function;
618 struct Pointer * pointer;
619 } __attribute__ ((gcc_struct)) pointer;
622 struct ExtDecl * extended;
623 } __attribute__ ((gcc_struct)) extended;
624 } __attribute__ ((gcc_struct)) __anon1;
625 } __attribute__ ((gcc_struct));
627 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
629 struct FunctionDefinition
631 struct FunctionDefinition * prev;
632 struct FunctionDefinition * next;
634 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
635 struct Declarator * declarator;
636 struct __ecereNameSpace__ecere__sys__OldList * declarations;
637 struct Statement * body;
638 struct __ecereNameSpace__ecere__com__Class * _class;
639 struct __ecereNameSpace__ecere__sys__OldList attached;
642 struct Symbol * propSet;
644 unsigned int propertyNoThis;
645 } __attribute__ ((gcc_struct));
647 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
651 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
655 struct External * prev;
656 struct External * next;
659 struct Symbol * symbol;
662 struct FunctionDefinition * function;
663 struct ClassDefinition * _class;
664 struct Declaration * declaration;
666 struct Identifier * id;
667 struct DBTableDef * table;
668 } __attribute__ ((gcc_struct)) __anon1;
670 } __attribute__ ((gcc_struct));
672 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
676 struct ModuleImport * prev;
677 struct ModuleImport * next;
679 struct __ecereNameSpace__ecere__sys__OldList classes;
680 struct __ecereNameSpace__ecere__sys__OldList functions;
683 } __attribute__ ((gcc_struct));
685 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
689 struct ClassImport * prev;
690 struct ClassImport * next;
692 struct __ecereNameSpace__ecere__sys__OldList methods;
693 struct __ecereNameSpace__ecere__sys__OldList properties;
696 } __attribute__ ((gcc_struct));
698 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
703 struct Symbol * parent;
704 struct Symbol * left;
705 struct Symbol * right;
710 struct __ecereNameSpace__ecere__com__Method * method;
711 struct __ecereNameSpace__ecere__com__Property * _property;
712 struct __ecereNameSpace__ecere__com__Class * registered;
713 } __attribute__ ((gcc_struct)) __anon1;
720 struct External * pointerExternal;
721 struct External * structExternal;
722 } __attribute__ ((gcc_struct)) __anon1;
725 struct External * externalGet;
726 struct External * externalSet;
727 struct External * externalPtr;
728 struct External * externalIsSet;
729 } __attribute__ ((gcc_struct)) __anon2;
732 struct External * methodExternal;
733 struct External * methodCodeExternal;
734 } __attribute__ ((gcc_struct)) __anon3;
735 } __attribute__ ((gcc_struct)) __anon2;
736 unsigned int imported;
737 unsigned int declaredStructSym;
738 struct __ecereNameSpace__ecere__com__Class * _class;
739 unsigned int declaredStruct;
740 unsigned int needConstructor;
741 unsigned int needDestructor;
742 char * constructorName;
745 char * destructorName;
746 struct ModuleImport * module;
747 struct ClassImport * _import;
748 struct Location nameLoc;
749 unsigned int isParam;
750 unsigned int isRemote;
751 unsigned int isStruct;
752 unsigned int fireWatchersDone;
754 unsigned int classData;
755 unsigned int isStatic;
757 struct __ecereNameSpace__ecere__sys__OldList * templateParams;
758 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
759 struct Context * ctx;
761 struct Expression * propCategory;
762 } __attribute__ ((gcc_struct));
764 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
773 struct Symbol * _class;
776 struct __ecereNameSpace__ecere__sys__OldList members;
778 } __attribute__ ((gcc_struct)) __anon1;
781 struct Type * returnType;
782 struct __ecereNameSpace__ecere__sys__OldList params;
783 struct Symbol * thisClass;
784 unsigned int staticMethod;
785 struct TemplateParameter * thisClassTemplate;
786 } __attribute__ ((gcc_struct)) __anon2;
789 struct __ecereNameSpace__ecere__com__Method * method;
790 struct __ecereNameSpace__ecere__com__Class * methodClass;
791 struct __ecereNameSpace__ecere__com__Class * usedClass;
792 } __attribute__ ((gcc_struct)) __anon3;
795 struct Type * arrayType;
797 struct Expression * arraySizeExp;
798 unsigned int freeExp;
799 struct Symbol * enumClass;
800 } __attribute__ ((gcc_struct)) __anon4;
802 struct TemplateParameter * templateParameter;
803 } __attribute__ ((gcc_struct)) __anon1;
813 unsigned int isSigned : 1;
814 unsigned int constant : 1;
815 unsigned int truth : 1;
816 unsigned int byReference : 1;
817 unsigned int extraParam : 1;
818 unsigned int directClassAccess : 1;
819 unsigned int computing : 1;
820 unsigned int keepCast : 1;
821 unsigned int passAsTemplate : 1;
822 unsigned int dllExport : 1;
823 unsigned int attrStdcall : 1;
824 unsigned int declaredWithStruct : 1;
825 unsigned int typedByReference : 1;
826 unsigned int casted : 1;
827 } __attribute__ ((gcc_struct));
829 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
831 struct __ecereNameSpace__ecere__com__Class
833 struct __ecereNameSpace__ecere__com__Class * prev;
834 struct __ecereNameSpace__ecere__com__Class * next;
840 unsigned int (* Constructor)(void * );
841 void (* Destructor)(void * );
844 struct __ecereNameSpace__ecere__com__Class * base;
845 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
846 struct __ecereNameSpace__ecere__sys__BinaryTree members;
847 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
848 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
849 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
850 struct __ecereNameSpace__ecere__sys__OldList derivatives;
854 struct __ecereNameSpace__ecere__com__Instance * module;
855 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
856 const char * dataTypeString;
857 struct Type * dataType;
859 int defaultAlignment;
860 void (* Initialize)();
862 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
863 const char * designerClass;
864 unsigned int noExpansion;
865 const char * defaultProperty;
866 unsigned int comRedefinition;
869 unsigned int internalDecl;
871 unsigned int computeSize;
873 int destructionWatchOffset;
875 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
876 int inheritanceAccess;
877 const char * fullName;
879 struct __ecereNameSpace__ecere__sys__OldList conversions;
880 struct __ecereNameSpace__ecere__sys__OldList templateParams;
881 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs;
882 struct __ecereNameSpace__ecere__com__Class * templateClass;
883 struct __ecereNameSpace__ecere__sys__OldList templatized;
885 unsigned int isInstanceClass;
886 unsigned int byValueSystemClass;
887 } __attribute__ ((gcc_struct));
889 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
891 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name, long long value);
893 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
895 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char * name, void * function);
897 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
899 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);
901 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void * instance, struct __ecereNameSpace__ecere__com__Property * _property, void * object, void (* callback)(void * , void * ));
903 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
905 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
907 struct __ecereNameSpace__ecere__com__Instance
910 struct __ecereNameSpace__ecere__com__Class * _class;
912 } __attribute__ ((gcc_struct));
914 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
916 struct __ecereNameSpace__ecere__com__DataMember
918 struct __ecereNameSpace__ecere__com__DataMember * prev;
919 struct __ecereNameSpace__ecere__com__DataMember * next;
921 unsigned int isProperty;
924 struct __ecereNameSpace__ecere__com__Class * _class;
925 const char * dataTypeString;
926 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
927 struct Type * dataType;
931 struct __ecereNameSpace__ecere__sys__OldList members;
932 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
935 } __attribute__ ((gcc_struct));
937 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
939 struct __ecereNameSpace__ecere__com__SerialBuffer
941 unsigned char * _buffer;
945 } __attribute__ ((gcc_struct));
947 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
949 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
955 const char * dataTypeString;
956 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
957 } __attribute__ ((gcc_struct)) __anon1;
958 struct __ecereNameSpace__ecere__com__DataValue expression;
961 const char * memberString;
964 struct __ecereNameSpace__ecere__com__DataMember * member;
965 struct __ecereNameSpace__ecere__com__Property * prop;
966 struct __ecereNameSpace__ecere__com__Method * method;
967 } __attribute__ ((gcc_struct)) __anon1;
968 } __attribute__ ((gcc_struct)) __anon2;
969 } __attribute__ ((gcc_struct)) __anon1;
970 } __attribute__ ((gcc_struct));
972 void exit(int status);
974 void * calloc(size_t nmemb, size_t size);
976 void free(void * ptr);
978 void * malloc(size_t size);
980 void * realloc(void * ptr, size_t size);
982 long int strtol(const char * nptr, char ** endptr, int base);
984 long long int strtoll(const char * nptr, char ** endptr, int base);
986 unsigned long long int strtoull(const char * nptr, char ** endptr, int base);
990 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
993 typedef union YYSTYPE
998 struct Identifier * id;
999 struct Expression * exp;
1000 struct Specifier * specifier;
1001 struct __ecereNameSpace__ecere__sys__OldList * list;
1002 struct Enumerator * enumerator;
1003 struct Declarator * declarator;
1004 struct Pointer * pointer;
1005 struct Initializer * initializer;
1006 struct InitDeclarator * initDeclarator;
1007 struct TypeName * typeName;
1008 struct Declaration * declaration;
1009 struct Statement * stmt;
1010 struct FunctionDefinition * function;
1011 struct External * external;
1012 struct Context * context;
1013 struct AsmField * asmField;
1014 struct Attrib * attrib;
1015 struct ExtDecl * extDecl;
1016 struct Attribute * attribute;
1017 struct Instantiation * instance;
1018 struct MembersInit * membersInit;
1019 struct MemberInit * memberInit;
1020 struct ClassFunction * classFunction;
1021 struct ClassDefinition * _class;
1022 struct ClassDef * classDef;
1023 struct PropertyDef * prop;
1025 struct Symbol * symbol;
1026 struct PropertyWatch * propertyWatch;
1027 struct TemplateParameter * templateParameter;
1028 struct TemplateArgument * templateArgument;
1029 struct TemplateDatatype * templateDatatype;
1030 struct DBTableEntry * dbtableEntry;
1031 struct DBIndexItem * dbindexItem;
1032 struct DBTableDef * dbtableDef;
1033 } __attribute__ ((gcc_struct)) YYSTYPE;
1035 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Enumerator;
1039 struct Enumerator * prev;
1040 struct Enumerator * next;
1041 struct Location loc;
1042 struct Identifier * id;
1043 struct Expression * exp;
1044 } __attribute__ ((gcc_struct));
1046 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_InitDeclarator;
1048 struct InitDeclarator
1050 struct InitDeclarator * prev;
1051 struct InitDeclarator * next;
1052 struct Location loc;
1053 struct Declarator * declarator;
1054 struct Initializer * initializer;
1055 } __attribute__ ((gcc_struct));
1057 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_AsmField;
1061 struct AsmField * prev;
1062 struct AsmField * next;
1063 struct Location loc;
1065 struct Expression * expression;
1066 struct Identifier * symbolic;
1067 } __attribute__ ((gcc_struct));
1069 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attribute;
1073 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassFunction;
1075 struct ClassFunction
1077 struct ClassFunction * prev;
1078 struct ClassFunction * next;
1079 struct Location loc;
1080 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1081 struct Declarator * declarator;
1082 struct __ecereNameSpace__ecere__sys__OldList * declarations;
1083 struct Statement * body;
1084 struct __ecereNameSpace__ecere__com__Class * _class;
1085 struct __ecereNameSpace__ecere__sys__OldList attached;
1088 struct Symbol * propSet;
1089 unsigned int isVirtual;
1090 unsigned int isConstructor;
1091 unsigned int isDestructor;
1092 unsigned int dontMangle;
1095 } __attribute__ ((gcc_struct));
1097 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MembersInit;
1101 struct MembersInit * prev;
1102 struct MembersInit * next;
1103 struct Location loc;
1107 struct __ecereNameSpace__ecere__sys__OldList * dataMembers;
1108 struct ClassFunction * function;
1109 } __attribute__ ((gcc_struct)) __anon1;
1110 } __attribute__ ((gcc_struct));
1112 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MemberInit;
1116 struct MemberInit * prev;
1117 struct MemberInit * next;
1118 struct Location loc;
1119 struct Location realLoc;
1120 struct __ecereNameSpace__ecere__sys__OldList * identifiers;
1121 struct Initializer * initializer;
1123 unsigned int variable;
1124 unsigned int takeOutExp;
1125 } __attribute__ ((gcc_struct));
1127 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyDef;
1131 struct PropertyDef * prev;
1132 struct PropertyDef * next;
1133 struct Location loc;
1134 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
1135 struct Declarator * declarator;
1136 struct Identifier * id;
1137 struct Statement * getStmt;
1138 struct Statement * setStmt;
1139 struct Statement * issetStmt;
1140 struct Symbol * symbol;
1141 struct Expression * category;
1144 unsigned int conversion : 1;
1145 unsigned int isWatchable : 1;
1146 unsigned int isDBProp : 1;
1147 } __attribute__ ((gcc_struct)) __anon1;
1148 } __attribute__ ((gcc_struct));
1150 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyWatch;
1152 struct PropertyWatch
1154 struct PropertyWatch * prev;
1155 struct PropertyWatch * next;
1156 struct Location loc;
1157 struct Statement * compound;
1158 struct __ecereNameSpace__ecere__sys__OldList * properties;
1159 unsigned int deleteWatch;
1160 } __attribute__ ((gcc_struct));
1162 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDef;
1166 struct ClassDef * prev;
1167 struct ClassDef * next;
1168 struct Location loc;
1172 struct Declaration * decl;
1173 struct ClassFunction * function;
1174 struct __ecereNameSpace__ecere__sys__OldList * defProperties;
1175 struct PropertyDef * propertyDef;
1176 struct PropertyWatch * propertyWatch;
1178 struct Identifier * defaultProperty;
1181 struct Identifier * id;
1182 struct Initializer * initializer;
1183 } __attribute__ ((gcc_struct)) __anon1;
1184 } __attribute__ ((gcc_struct)) __anon1;
1187 } __attribute__ ((gcc_struct));
1189 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableEntry;
1191 struct DBTableEntry;
1193 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBIndexItem;
1197 extern YYSTYPE yylval;
1199 extern struct Location yylloc;
1201 extern struct __ecereNameSpace__ecere__sys__OldList * ast;
1203 extern int returnCode;
1205 extern struct Expression * parsedExpression;
1207 extern unsigned int yydebug;
1209 void SetYydebug(unsigned int b)
1214 extern unsigned int echoOn;
1216 void resetScanner();
1220 int expression_yyparse();
1222 static struct Statement * curCompound;
1224 struct External * curExternal, * afterExternal;
1226 static struct Type * curSwitchType;
1228 static struct __ecereNameSpace__ecere__com__Class * currentClass;
1230 struct __ecereNameSpace__ecere__com__Class * thisClass;
1232 void SetThisClass(struct __ecereNameSpace__ecere__com__Class * c)
1237 struct __ecereNameSpace__ecere__com__Class * GetThisClass()
1242 static char * thisNameSpace;
1244 struct __ecereNameSpace__ecere__com__Class * containerClass;
1246 unsigned int thisClassParams = 1;
1248 unsigned int internalValueCounter;
1250 extern unsigned int outputLineNumbers;
1252 extern void OutputExpression(struct Expression * exp, struct __ecereNameSpace__ecere__com__Instance * f);
1254 extern size_t strlen(const char * );
1256 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__TempFile;
1258 extern void * __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
1260 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
1262 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Read;
1264 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
1266 void PrintExpression(struct Expression * exp, char * string)
1269 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
1271 unsigned int backOutputLineNumbers = outputLineNumbers;
1273 outputLineNumbers = 0;
1275 OutputExpression(exp, f);
1276 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
1277 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
1279 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
1280 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(f, 0, 0);
1281 count = strlen(string);
1282 count += ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, void * buffer, unsigned int size, unsigned int count))__extension__ ({
1283 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = f;
1285 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__TempFile->_vTbl;
1286 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Read])(f, string + count, 1, 1023);
1287 string[count] = '\0';
1288 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
1289 outputLineNumbers = backOutputLineNumbers;
1293 extern struct Type * ProcessTypeString(const char * string, unsigned int staticMethod);
1295 extern struct Type * ProcessType(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * decl);
1297 struct Type * ProcessTemplateParameterType(struct TemplateParameter * param)
1299 if(param && param->type == 0 && (param->__anon1.dataType || param->dataTypeString))
1301 if(!param->baseType)
1303 if(param->dataTypeString)
1304 param->baseType = ProcessTypeString(param->dataTypeString, 0);
1306 param->baseType = ProcessType(param->__anon1.dataType->specifiers, param->__anon1.dataType->decl);
1308 return param->baseType;
1310 return (((void *)0));
1313 unsigned int NeedCast(struct Type * type1, struct Type * type2)
1315 if(!type1 || !type2 || type1->keepCast || type2->keepCast)
1317 if(type1->kind == 20 && type2->kind == 4 && type2->passAsTemplate == 0)
1321 if(type1->kind == type2->kind)
1332 if(type1->passAsTemplate && !type2->passAsTemplate)
1334 return type1->isSigned != type2->isSigned;
1336 return type1->__anon1._class != type2->__anon1._class;
1338 return (type1->__anon1.type && type2->__anon1.type && type1->__anon1.type->constant != type2->__anon1.type->constant) || NeedCast(type1->__anon1.type, type2->__anon1.type);
1346 extern int strcmp(const char * , const char * );
1348 extern struct Context * curContext;
1350 extern struct Context * topContext;
1352 extern unsigned int __ecereNameSpace__ecere__com__eClass_IsDerived(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__Class * from);
1354 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);
1356 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
1358 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);
1360 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);
1362 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
1364 struct __ecereNameSpace__ecere__com__ClassProperty
1367 struct __ecereNameSpace__ecere__com__ClassProperty * parent;
1368 struct __ecereNameSpace__ecere__com__ClassProperty * left;
1369 struct __ecereNameSpace__ecere__com__ClassProperty * right;
1371 void (* Set)(struct __ecereNameSpace__ecere__com__Class *, long long);
1372 long long (* Get)(struct __ecereNameSpace__ecere__com__Class *);
1373 const char * dataTypeString;
1374 struct Type * dataType;
1375 unsigned int constant;
1376 } __attribute__ ((gcc_struct));
1378 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_FindClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char * name);
1380 extern struct Expression * QMkExpId(const char * id);
1382 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateParameter;
1384 struct __ecereNameSpace__ecere__com__ClassTemplateParameter
1386 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * prev;
1387 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * next;
1392 const char * dataTypeString;
1394 } __attribute__ ((gcc_struct)) __anon1;
1395 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg;
1397 } __attribute__ ((gcc_struct));
1399 extern struct Expression * GetTemplateArgExpByName(const char * paramName, struct __ecereNameSpace__ecere__com__Class * curClass, int tplType);
1401 extern struct __ecereNameSpace__ecere__sys__OldList * MkList(void);
1403 extern void FreeIdentifier(struct Identifier * id);
1405 void ProcessExpressionType(struct Expression * exp);
1407 extern struct Declarator * SpecDeclFromString(const char * string, struct __ecereNameSpace__ecere__sys__OldList * specs, struct Declarator * baseDecl);
1409 extern struct __ecereNameSpace__ecere__sys__OldList * MkListOne(void * item);
1411 extern struct Expression * MkExpOp(struct Expression * exp1, int op, struct Expression * exp2);
1413 extern struct Expression * MkExpCast(struct TypeName * typeName, struct Expression * expression);
1415 extern struct TypeName * MkTypeName(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Declarator * declarator);
1417 extern struct Declarator * MkDeclaratorPointer(struct Pointer * pointer, struct Declarator * declarator);
1419 extern struct Pointer * MkPointer(struct __ecereNameSpace__ecere__sys__OldList * qualifiers, struct Pointer * pointer);
1421 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
1423 static void ReplaceClassMembers(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class)
1425 if(exp->type == 0 && exp->__anon1.__anon1.identifier)
1427 struct Identifier * id = exp->__anon1.__anon1.identifier;
1428 struct Context * ctx;
1429 struct Symbol * symbol = (((void *)0));
1431 if(!id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
1433 for(ctx = curContext; ctx != topContext->parent && !symbol; ctx = ctx->parent)
1435 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&ctx->symbols, id->string);
1440 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))))
1442 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
1443 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
1444 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
1445 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
1449 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
1451 if(!prop && !method)
1452 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
1453 if(!prop && !method && !member)
1455 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string);
1457 if(prop || method || member || classProp)
1460 exp->__anon1.member.member = id;
1461 exp->__anon1.member.memberType = 0;
1462 exp->__anon1.member.exp = QMkExpId("this");
1465 else if(_class && _class->templateParams.first)
1467 struct __ecereNameSpace__ecere__com__Class * sClass;
1469 for(sClass = _class; sClass; sClass = sClass->base)
1471 if(sClass->templateParams.first)
1473 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
1475 for(param = sClass->templateParams.first; param; param = param->next)
1477 if(param->type == 2 && !strcmp(param->name, id->string))
1479 struct Expression * argExp = GetTemplateArgExpByName(param->name, _class, 2);
1483 struct Declarator * decl;
1484 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
1486 FreeIdentifier(exp->__anon1.member.member);
1487 ProcessExpressionType(argExp);
1488 decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
1489 exp->expType = ProcessType(specs, decl);
1491 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), MkExpOp((((void *)0)), '&', argExp))));
1502 extern int sprintf(char * , const char * , ...);
1504 extern char * strcat(char * , const char * );
1506 extern char * __ecereNameSpace__ecere__sys__CopyString(const char * string);
1508 char * PrintInt(long long result)
1512 if(result > (((int)0x7fffffff)))
1513 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1515 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
1516 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
1518 return __ecereNameSpace__ecere__sys__CopyString(temp);
1521 char * PrintUInt(uint64 result)
1525 if(result > (0xffffffff))
1526 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
1527 else if(result > (((int)0x7fffffff)))
1528 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1530 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
1531 return __ecereNameSpace__ecere__sys__CopyString(temp);
1534 char * PrintInt64(long long result)
1538 if(result > (((int)0x7fffffff)) || result < (((int)0x80000000)))
1539 sprintf(temp, ((__runtimePlatform == 1) ? "%I64dLL" : "%lldLL"), result);
1541 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
1542 return __ecereNameSpace__ecere__sys__CopyString(temp);
1545 char * PrintUInt64(uint64 result)
1549 if(result > (0xffffffff))
1550 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
1551 else if(result > (((int)0x7fffffff)))
1552 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1554 sprintf(temp, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), result);
1555 return __ecereNameSpace__ecere__sys__CopyString(temp);
1558 char * PrintHexUInt(uint64 result)
1562 if(result > (0xffffffff))
1563 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1565 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1566 if(result > (0xffffffff))
1568 return __ecereNameSpace__ecere__sys__CopyString(temp);
1571 char * PrintHexUInt64(uint64 result)
1575 if(result > (0xffffffff))
1576 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), result);
1578 sprintf(temp, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), result);
1579 return __ecereNameSpace__ecere__sys__CopyString(temp);
1582 char * PrintShort(short result)
1586 sprintf(temp, "%d", (unsigned short)result);
1587 return __ecereNameSpace__ecere__sys__CopyString(temp);
1590 char * PrintUShort(unsigned short result)
1594 if(result > (unsigned short)32767)
1595 sprintf(temp, "0x%X", (int)result);
1597 sprintf(temp, "%d", (int)result);
1598 return __ecereNameSpace__ecere__sys__CopyString(temp);
1601 extern int isprint(int c);
1603 char * PrintChar(char result)
1607 if(result > (char)0 && isprint(result))
1608 sprintf(temp, "'%c'", result);
1609 else if(result < (char)0)
1610 sprintf(temp, "%d", (int)result);
1612 sprintf(temp, "0x%X", (unsigned char)result);
1613 return __ecereNameSpace__ecere__sys__CopyString(temp);
1616 char * PrintUChar(unsigned char result)
1620 sprintf(temp, "0x%X", result);
1621 return __ecereNameSpace__ecere__sys__CopyString(temp);
1624 extern char * strcpy(char * , const char * );
1626 extern unsigned int (* __ecereProp_float_Get_isInf)(float this);
1628 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isInf;
1630 extern int (* __ecereProp_float_Get_signBit)(float this);
1632 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_signBit;
1634 extern unsigned int (* __ecereProp_float_Get_isNan)(float this);
1636 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_float_isNan;
1638 char * PrintFloat(float result)
1642 if(__ecereProp_float_Get_isInf(result))
1644 if(__ecereProp_float_Get_signBit(result))
1645 strcpy(temp, "-inf");
1647 strcpy(temp, "inf");
1649 else if(__ecereProp_float_Get_isNan(result))
1651 if(__ecereProp_float_Get_signBit(result))
1652 strcpy(temp, "-nan");
1654 strcpy(temp, "nan");
1657 sprintf(temp, "%.16ff", result);
1658 return __ecereNameSpace__ecere__sys__CopyString(temp);
1661 extern unsigned int (* __ecereProp_double_Get_isInf)(double this);
1663 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isInf;
1665 extern int (* __ecereProp_double_Get_signBit)(double this);
1667 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_signBit;
1669 extern unsigned int (* __ecereProp_double_Get_isNan)(double this);
1671 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_double_isNan;
1673 char * PrintDouble(double result)
1677 if(__ecereProp_double_Get_isInf(result))
1679 if(__ecereProp_double_Get_signBit(result))
1680 strcpy(temp, "-inf");
1682 strcpy(temp, "inf");
1684 else if(__ecereProp_double_Get_isNan(result))
1686 if(__ecereProp_double_Get_signBit(result))
1687 strcpy(temp, "-nan");
1689 strcpy(temp, "nan");
1692 sprintf(temp, "%.16f", result);
1693 return __ecereNameSpace__ecere__sys__CopyString(temp);
1696 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
1700 unsigned int (* Add)(struct Expression *, struct Operand *, struct Operand *);
1701 unsigned int (* Sub)(struct Expression *, struct Operand *, struct Operand *);
1702 unsigned int (* Mul)(struct Expression *, struct Operand *, struct Operand *);
1703 unsigned int (* Div)(struct Expression *, struct Operand *, struct Operand *);
1704 unsigned int (* Mod)(struct Expression *, struct Operand *, struct Operand *);
1705 unsigned int (* Neg)(struct Expression *, struct Operand *);
1706 unsigned int (* Inc)(struct Expression *, struct Operand *);
1707 unsigned int (* Dec)(struct Expression *, struct Operand *);
1708 unsigned int (* Asign)(struct Expression *, struct Operand *, struct Operand *);
1709 unsigned int (* AddAsign)(struct Expression *, struct Operand *, struct Operand *);
1710 unsigned int (* SubAsign)(struct Expression *, struct Operand *, struct Operand *);
1711 unsigned int (* MulAsign)(struct Expression *, struct Operand *, struct Operand *);
1712 unsigned int (* DivAsign)(struct Expression *, struct Operand *, struct Operand *);
1713 unsigned int (* ModAsign)(struct Expression *, struct Operand *, struct Operand *);
1714 unsigned int (* BitAnd)(struct Expression *, struct Operand *, struct Operand *);
1715 unsigned int (* BitOr)(struct Expression *, struct Operand *, struct Operand *);
1716 unsigned int (* BitXor)(struct Expression *, struct Operand *, struct Operand *);
1717 unsigned int (* LShift)(struct Expression *, struct Operand *, struct Operand *);
1718 unsigned int (* RShift)(struct Expression *, struct Operand *, struct Operand *);
1719 unsigned int (* BitNot)(struct Expression *, struct Operand *);
1720 unsigned int (* AndAsign)(struct Expression *, struct Operand *, struct Operand *);
1721 unsigned int (* OrAsign)(struct Expression *, struct Operand *, struct Operand *);
1722 unsigned int (* XorAsign)(struct Expression *, struct Operand *, struct Operand *);
1723 unsigned int (* LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1724 unsigned int (* RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
1725 unsigned int (* Not)(struct Expression *, struct Operand *);
1726 unsigned int (* Equ)(struct Expression *, struct Operand *, struct Operand *);
1727 unsigned int (* Nqu)(struct Expression *, struct Operand *, struct Operand *);
1728 unsigned int (* And)(struct Expression *, struct Operand *, struct Operand *);
1729 unsigned int (* Or)(struct Expression *, struct Operand *, struct Operand *);
1730 unsigned int (* Grt)(struct Expression *, struct Operand *, struct Operand *);
1731 unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *);
1732 unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
1733 unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
1734 unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
1735 } __attribute__ ((gcc_struct));
1737 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
1743 unsigned int ptrSize;
1756 } __attribute__ ((gcc_struct)) __anon1;
1758 } __attribute__ ((gcc_struct));
1760 unsigned int GetOpInt(struct Operand * op2, int * value2)
1762 if(op2->kind == 3 && op2->type->isSigned)
1763 *value2 = op2->__anon1.i;
1764 else if(op2->kind == 3)
1765 *value2 = (int)op2->__anon1.ui;
1766 else if(op2->kind == 4 && op2->type->isSigned)
1767 *value2 = (int)op2->__anon1.i64;
1768 else if(op2->kind == 4)
1769 *value2 = (int)op2->__anon1.ui64;
1770 else if(op2->kind == 23 && op2->type->isSigned)
1771 *value2 = (int)op2->__anon1.i64;
1772 else if(op2->kind == 23)
1773 *value2 = (int)op2->__anon1.ui64;
1774 else if(op2->kind == 22 && op2->type->isSigned)
1775 *value2 = (int)op2->__anon1.i64;
1776 else if(op2->kind == 22)
1777 *value2 = (int)op2->__anon1.ui64;
1778 else if(op2->kind == 2 && op2->type->isSigned)
1779 *value2 = (int)op2->__anon1.s;
1780 else if(op2->kind == 2)
1781 *value2 = (int)op2->__anon1.us;
1782 else if(op2->kind == 1 && op2->type->isSigned)
1783 *value2 = (int)op2->__anon1.c;
1784 else if(op2->kind == 24 || op2->kind == 1)
1785 *value2 = (int)op2->__anon1.uc;
1786 else if(op2->kind == 6)
1787 *value2 = (int)op2->__anon1.f;
1788 else if(op2->kind == 7)
1789 *value2 = (int)op2->__anon1.d;
1790 else if(op2->kind == 13)
1791 *value2 = (int)op2->__anon1.ui64;
1797 struct Operand GetOperand(struct Expression * exp);
1799 unsigned int GetInt(struct Expression * exp, int * value2)
1801 struct Operand op2 = GetOperand(exp);
1803 return GetOpInt(&op2, value2);
1806 unsigned int GetOpUInt(struct Operand * op2, unsigned int * value2)
1808 if(op2->kind == 3 && op2->type->isSigned)
1809 *value2 = (unsigned int)op2->__anon1.i;
1810 else if(op2->kind == 3)
1811 *value2 = op2->__anon1.ui;
1812 else if(op2->kind == 4 && op2->type->isSigned)
1813 *value2 = (unsigned int)op2->__anon1.i64;
1814 else if(op2->kind == 4)
1815 *value2 = (unsigned int)op2->__anon1.ui64;
1816 else if(op2->kind == 23 && op2->type->isSigned)
1817 *value2 = (unsigned int)op2->__anon1.i64;
1818 else if(op2->kind == 23)
1819 *value2 = (unsigned int)op2->__anon1.ui64;
1820 else if(op2->kind == 22 && op2->type->isSigned)
1821 *value2 = (unsigned int)op2->__anon1.i64;
1822 else if(op2->kind == 22)
1823 *value2 = (unsigned int)op2->__anon1.ui64;
1824 else if(op2->kind == 2 && op2->type->isSigned)
1825 *value2 = (unsigned int)op2->__anon1.s;
1826 else if(op2->kind == 2)
1827 *value2 = (unsigned int)op2->__anon1.us;
1828 else if(op2->kind == 1 && op2->type->isSigned)
1829 *value2 = (unsigned int)op2->__anon1.c;
1830 else if(op2->kind == 24 || op2->kind == 1)
1831 *value2 = (unsigned int)op2->__anon1.uc;
1832 else if(op2->kind == 6)
1833 *value2 = (unsigned int)op2->__anon1.f;
1834 else if(op2->kind == 7)
1835 *value2 = (unsigned int)op2->__anon1.d;
1836 else if(op2->kind == 13)
1837 *value2 = (unsigned int)op2->__anon1.ui64;
1843 unsigned int GetUInt(struct Expression * exp, unsigned int * value2)
1845 struct Operand op2 = GetOperand(exp);
1847 return GetOpUInt(&op2, value2);
1850 unsigned int GetOpInt64(struct Operand * op2, long long * value2)
1852 if(op2->kind == 3 && op2->type->isSigned)
1853 *value2 = (long long)op2->__anon1.i;
1854 else if(op2->kind == 3)
1855 *value2 = (long long)op2->__anon1.ui;
1856 else if(op2->kind == 4 && op2->type->isSigned)
1857 *value2 = op2->__anon1.i64;
1858 else if(op2->kind == 4)
1859 *value2 = (long long)op2->__anon1.ui64;
1860 else if(op2->kind == 23 && op2->type->isSigned)
1861 *value2 = op2->__anon1.i64;
1862 else if(op2->kind == 23)
1863 *value2 = (long long)op2->__anon1.ui64;
1864 else if(op2->kind == 22 && op2->type->isSigned)
1865 *value2 = op2->__anon1.i64;
1866 else if(op2->kind == 22)
1867 *value2 = (long long)op2->__anon1.ui64;
1868 else if(op2->kind == 2 && op2->type->isSigned)
1869 *value2 = (long long)op2->__anon1.s;
1870 else if(op2->kind == 2)
1871 *value2 = (long long)op2->__anon1.us;
1872 else if(op2->kind == 1 && op2->type->isSigned)
1873 *value2 = (long long)op2->__anon1.c;
1874 else if(op2->kind == 24 || op2->kind == 1)
1875 *value2 = (long long)op2->__anon1.uc;
1876 else if(op2->kind == 6)
1877 *value2 = (long long)op2->__anon1.f;
1878 else if(op2->kind == 7)
1879 *value2 = (long long)op2->__anon1.d;
1880 else if(op2->kind == 13)
1881 *value2 = (long long)op2->__anon1.ui64;
1887 unsigned int GetInt64(struct Expression * exp, long long * value2)
1889 struct Operand op2 = GetOperand(exp);
1891 return GetOpInt64(&op2, value2);
1894 unsigned int GetOpUInt64(struct Operand * op2, uint64 * value2)
1896 if(op2->kind == 3 && op2->type->isSigned)
1897 *value2 = (uint64)op2->__anon1.i;
1898 else if(op2->kind == 3)
1899 *value2 = (uint64)op2->__anon1.ui;
1900 else if(op2->kind == 4 && op2->type->isSigned)
1901 *value2 = (uint64)op2->__anon1.i64;
1902 else if(op2->kind == 4)
1903 *value2 = op2->__anon1.ui64;
1904 else if(op2->kind == 23 && op2->type->isSigned)
1905 *value2 = (uint64)op2->__anon1.i64;
1906 else if(op2->kind == 23)
1907 *value2 = op2->__anon1.ui64;
1908 else if(op2->kind == 22 && op2->type->isSigned)
1909 *value2 = (uint64)op2->__anon1.i64;
1910 else if(op2->kind == 22)
1911 *value2 = op2->__anon1.ui64;
1912 else if(op2->kind == 2 && op2->type->isSigned)
1913 *value2 = (uint64)op2->__anon1.s;
1914 else if(op2->kind == 2)
1915 *value2 = (uint64)op2->__anon1.us;
1916 else if(op2->kind == 1 && op2->type->isSigned)
1917 *value2 = (uint64)op2->__anon1.c;
1918 else if(op2->kind == 24 || op2->kind == 1)
1919 *value2 = (uint64)op2->__anon1.uc;
1920 else if(op2->kind == 6)
1921 *value2 = (uint64)op2->__anon1.f;
1922 else if(op2->kind == 7)
1923 *value2 = (uint64)op2->__anon1.d;
1924 else if(op2->kind == 13)
1925 *value2 = op2->__anon1.ui64;
1931 unsigned int GetUInt64(struct Expression * exp, uint64 * value2)
1933 struct Operand op2 = GetOperand(exp);
1935 return GetOpUInt64(&op2, value2);
1938 unsigned int GetOpIntPtr(struct Operand * op2, intptr_t * value2)
1940 if(op2->kind == 3 && op2->type->isSigned)
1941 *value2 = (intptr_t)op2->__anon1.i;
1942 else if(op2->kind == 3)
1943 *value2 = (intptr_t)op2->__anon1.ui;
1944 else if(op2->kind == 4 && op2->type->isSigned)
1945 *value2 = (intptr_t)op2->__anon1.i64;
1946 else if(op2->kind == 4)
1947 *value2 = (intptr_t)op2->__anon1.ui64;
1948 else if(op2->kind == 23 && op2->type->isSigned)
1949 *value2 = (intptr_t)op2->__anon1.i64;
1950 else if(op2->kind == 23)
1951 *value2 = (intptr_t)op2->__anon1.ui64;
1952 else if(op2->kind == 22 && op2->type->isSigned)
1953 *value2 = (intptr_t)op2->__anon1.i64;
1954 else if(op2->kind == 22)
1955 *value2 = (intptr_t)op2->__anon1.ui64;
1956 else if(op2->kind == 2 && op2->type->isSigned)
1957 *value2 = (intptr_t)op2->__anon1.s;
1958 else if(op2->kind == 2)
1959 *value2 = (intptr_t)op2->__anon1.us;
1960 else if(op2->kind == 1 && op2->type->isSigned)
1961 *value2 = (intptr_t)op2->__anon1.c;
1962 else if(op2->kind == 24 || op2->kind == 1)
1963 *value2 = (intptr_t)op2->__anon1.uc;
1964 else if(op2->kind == 6)
1965 *value2 = (intptr_t)op2->__anon1.f;
1966 else if(op2->kind == 7)
1967 *value2 = (intptr_t)op2->__anon1.d;
1968 else if(op2->kind == 13)
1969 *value2 = (intptr_t)op2->__anon1.ui64;
1975 unsigned int GetIntPtr(struct Expression * exp, intptr_t * value2)
1977 struct Operand op2 = GetOperand(exp);
1979 return GetOpIntPtr(&op2, value2);
1982 unsigned int GetOpUIntPtr(struct Operand * op2, uintptr_t * value2)
1984 if(op2->kind == 3 && op2->type->isSigned)
1985 *value2 = (uintptr_t)op2->__anon1.i;
1986 else if(op2->kind == 3)
1987 *value2 = (uintptr_t)op2->__anon1.ui;
1988 else if(op2->kind == 4 && op2->type->isSigned)
1989 *value2 = (uintptr_t)op2->__anon1.i64;
1990 else if(op2->kind == 4)
1991 *value2 = (uintptr_t)op2->__anon1.ui64;
1992 else if(op2->kind == 23 && op2->type->isSigned)
1993 *value2 = (uintptr_t)op2->__anon1.i64;
1994 else if(op2->kind == 23)
1995 *value2 = (uintptr_t)op2->__anon1.ui64;
1996 else if(op2->kind == 22 && op2->type->isSigned)
1997 *value2 = (uintptr_t)op2->__anon1.i64;
1998 else if(op2->kind == 22)
1999 *value2 = (uintptr_t)op2->__anon1.ui64;
2000 else if(op2->kind == 2 && op2->type->isSigned)
2001 *value2 = (uintptr_t)op2->__anon1.s;
2002 else if(op2->kind == 2)
2003 *value2 = (uintptr_t)op2->__anon1.us;
2004 else if(op2->kind == 1 && op2->type->isSigned)
2005 *value2 = (uintptr_t)op2->__anon1.c;
2006 else if(op2->kind == 24 || op2->kind == 1)
2007 *value2 = (uintptr_t)op2->__anon1.uc;
2008 else if(op2->kind == 6)
2009 *value2 = (uintptr_t)op2->__anon1.f;
2010 else if(op2->kind == 7)
2011 *value2 = (uintptr_t)op2->__anon1.d;
2012 else if(op2->kind == 13)
2013 *value2 = (uintptr_t)op2->__anon1.ui64;
2019 unsigned int GetUIntPtr(struct Expression * exp, uintptr_t * value2)
2021 struct Operand op2 = GetOperand(exp);
2023 return GetOpUIntPtr(&op2, value2);
2026 unsigned int GetOpIntSize(struct Operand * op2, ssize_t * value2)
2028 if(op2->kind == 3 && op2->type->isSigned)
2029 *value2 = (ssize_t)op2->__anon1.i;
2030 else if(op2->kind == 3)
2031 *value2 = (ssize_t)op2->__anon1.ui;
2032 else if(op2->kind == 4 && op2->type->isSigned)
2033 *value2 = (ssize_t)op2->__anon1.i64;
2034 else if(op2->kind == 4)
2035 *value2 = (ssize_t)op2->__anon1.ui64;
2036 else if(op2->kind == 23 && op2->type->isSigned)
2037 *value2 = (ssize_t)op2->__anon1.i64;
2038 else if(op2->kind == 23)
2039 *value2 = (ssize_t)op2->__anon1.ui64;
2040 else if(op2->kind == 22 && op2->type->isSigned)
2041 *value2 = (ssize_t)op2->__anon1.i64;
2042 else if(op2->kind == 22)
2043 *value2 = (ssize_t)op2->__anon1.ui64;
2044 else if(op2->kind == 2 && op2->type->isSigned)
2045 *value2 = (ssize_t)op2->__anon1.s;
2046 else if(op2->kind == 2)
2047 *value2 = (ssize_t)op2->__anon1.us;
2048 else if(op2->kind == 1 && op2->type->isSigned)
2049 *value2 = (ssize_t)op2->__anon1.c;
2050 else if(op2->kind == 24 || op2->kind == 1)
2051 *value2 = (ssize_t)op2->__anon1.uc;
2052 else if(op2->kind == 6)
2053 *value2 = (ssize_t)op2->__anon1.f;
2054 else if(op2->kind == 7)
2055 *value2 = (ssize_t)op2->__anon1.d;
2056 else if(op2->kind == 13)
2057 *value2 = (ssize_t)op2->__anon1.ui64;
2063 unsigned int GetIntSize(struct Expression * exp, ssize_t * value2)
2065 struct Operand op2 = GetOperand(exp);
2067 return GetOpIntSize(&op2, value2);
2070 unsigned int GetOpUIntSize(struct Operand * op2, size_t * value2)
2072 if(op2->kind == 3 && op2->type->isSigned)
2073 *value2 = (size_t)op2->__anon1.i;
2074 else if(op2->kind == 3)
2075 *value2 = (size_t)op2->__anon1.ui;
2076 else if(op2->kind == 4 && op2->type->isSigned)
2077 *value2 = (size_t)op2->__anon1.i64;
2078 else if(op2->kind == 4)
2079 *value2 = (size_t)op2->__anon1.ui64;
2080 else if(op2->kind == 23 && op2->type->isSigned)
2081 *value2 = (size_t)op2->__anon1.i64;
2082 else if(op2->kind == 23)
2083 *value2 = (size_t)op2->__anon1.ui64;
2084 else if(op2->kind == 22 && op2->type->isSigned)
2085 *value2 = (size_t)op2->__anon1.i64;
2086 else if(op2->kind == 22)
2087 *value2 = (size_t)op2->__anon1.ui64;
2088 else if(op2->kind == 2 && op2->type->isSigned)
2089 *value2 = (size_t)op2->__anon1.s;
2090 else if(op2->kind == 2)
2091 *value2 = (size_t)op2->__anon1.us;
2092 else if(op2->kind == 1 && op2->type->isSigned)
2093 *value2 = (size_t)op2->__anon1.c;
2094 else if(op2->kind == 24 || op2->kind == 1)
2095 *value2 = (size_t)op2->__anon1.uc;
2096 else if(op2->kind == 6)
2097 *value2 = (size_t)op2->__anon1.f;
2098 else if(op2->kind == 7)
2099 *value2 = (size_t)op2->__anon1.d;
2100 else if(op2->kind == 13)
2101 *value2 = (size_t)op2->__anon1.ui64;
2107 unsigned int GetUIntSize(struct Expression * exp, size_t * value2)
2109 struct Operand op2 = GetOperand(exp);
2111 return GetOpUIntSize(&op2, value2);
2114 unsigned int GetOpShort(struct Operand * op2, short * value2)
2116 if(op2->kind == 3 && op2->type->isSigned)
2117 *value2 = (short)op2->__anon1.i;
2118 else if(op2->kind == 3)
2119 *value2 = (short)op2->__anon1.ui;
2120 else if(op2->kind == 4 && op2->type->isSigned)
2121 *value2 = (short)op2->__anon1.i64;
2122 else if(op2->kind == 4)
2123 *value2 = (short)op2->__anon1.ui64;
2124 else if(op2->kind == 23 && op2->type->isSigned)
2125 *value2 = (short)op2->__anon1.i64;
2126 else if(op2->kind == 23)
2127 *value2 = (short)op2->__anon1.ui64;
2128 else if(op2->kind == 22 && op2->type->isSigned)
2129 *value2 = (short)op2->__anon1.i64;
2130 else if(op2->kind == 22)
2131 *value2 = (short)op2->__anon1.ui64;
2132 else if(op2->kind == 2 && op2->type->isSigned)
2133 *value2 = op2->__anon1.s;
2134 else if(op2->kind == 2)
2135 *value2 = (short)op2->__anon1.us;
2136 else if(op2->kind == 1 && op2->type->isSigned)
2137 *value2 = (short)op2->__anon1.c;
2138 else if(op2->kind == 24 || op2->kind == 1)
2139 *value2 = (short)op2->__anon1.uc;
2140 else if(op2->kind == 6)
2141 *value2 = (short)op2->__anon1.f;
2142 else if(op2->kind == 7)
2143 *value2 = (short)op2->__anon1.d;
2144 else if(op2->kind == 13)
2145 *value2 = (short)op2->__anon1.ui64;
2151 unsigned int GetShort(struct Expression * exp, short * value2)
2153 struct Operand op2 = GetOperand(exp);
2155 return GetOpShort(&op2, value2);
2158 unsigned int GetOpUShort(struct Operand * op2, unsigned short * value2)
2160 if(op2->kind == 3 && op2->type->isSigned)
2161 *value2 = (unsigned short)op2->__anon1.i;
2162 else if(op2->kind == 3)
2163 *value2 = (unsigned short)op2->__anon1.ui;
2164 else if(op2->kind == 4 && op2->type->isSigned)
2165 *value2 = (unsigned short)op2->__anon1.i64;
2166 else if(op2->kind == 4)
2167 *value2 = (unsigned short)op2->__anon1.ui64;
2168 else if(op2->kind == 23 && op2->type->isSigned)
2169 *value2 = (unsigned short)op2->__anon1.i64;
2170 else if(op2->kind == 23)
2171 *value2 = (unsigned short)op2->__anon1.ui64;
2172 else if(op2->kind == 22 && op2->type->isSigned)
2173 *value2 = (unsigned short)op2->__anon1.i64;
2174 else if(op2->kind == 22)
2175 *value2 = (unsigned short)op2->__anon1.ui64;
2176 else if(op2->kind == 2 && op2->type->isSigned)
2177 *value2 = (unsigned short)op2->__anon1.s;
2178 else if(op2->kind == 2)
2179 *value2 = op2->__anon1.us;
2180 else if(op2->kind == 1 && op2->type->isSigned)
2181 *value2 = (unsigned short)op2->__anon1.c;
2182 else if(op2->kind == 24 || op2->kind == 1)
2183 *value2 = (unsigned short)op2->__anon1.uc;
2184 else if(op2->kind == 6)
2185 *value2 = (unsigned short)op2->__anon1.f;
2186 else if(op2->kind == 7)
2187 *value2 = (unsigned short)op2->__anon1.d;
2188 else if(op2->kind == 13)
2189 *value2 = (unsigned short)op2->__anon1.ui64;
2195 unsigned int GetUShort(struct Expression * exp, unsigned short * value2)
2197 struct Operand op2 = GetOperand(exp);
2199 return GetOpUShort(&op2, value2);
2202 unsigned int GetOpChar(struct Operand * op2, char * value2)
2204 if(op2->kind == 3 && op2->type->isSigned)
2205 *value2 = (char)op2->__anon1.i;
2206 else if(op2->kind == 3)
2207 *value2 = (char)op2->__anon1.ui;
2208 else if(op2->kind == 4 && op2->type->isSigned)
2209 *value2 = (char)op2->__anon1.i64;
2210 else if(op2->kind == 4)
2211 *value2 = (char)op2->__anon1.ui64;
2212 else if(op2->kind == 23 && op2->type->isSigned)
2213 *value2 = (char)op2->__anon1.i64;
2214 else if(op2->kind == 23)
2215 *value2 = (char)op2->__anon1.ui64;
2216 else if(op2->kind == 22 && op2->type->isSigned)
2217 *value2 = (char)op2->__anon1.i64;
2218 else if(op2->kind == 22)
2219 *value2 = (char)op2->__anon1.ui64;
2220 else if(op2->kind == 2 && op2->type->isSigned)
2221 *value2 = (char)op2->__anon1.s;
2222 else if(op2->kind == 2)
2223 *value2 = (char)op2->__anon1.us;
2224 else if(op2->kind == 1 && op2->type->isSigned)
2225 *value2 = op2->__anon1.c;
2226 else if(op2->kind == 24 || op2->kind == 1)
2227 *value2 = (char)op2->__anon1.uc;
2228 else if(op2->kind == 6)
2229 *value2 = (char)op2->__anon1.f;
2230 else if(op2->kind == 7)
2231 *value2 = (char)op2->__anon1.d;
2232 else if(op2->kind == 13)
2233 *value2 = (char)op2->__anon1.ui64;
2239 unsigned int GetChar(struct Expression * exp, char * value2)
2241 struct Operand op2 = GetOperand(exp);
2243 return GetOpChar(&op2, value2);
2246 unsigned int GetOpUChar(struct Operand * op2, unsigned char * value2)
2248 if(op2->kind == 3 && op2->type->isSigned)
2249 *value2 = (unsigned char)op2->__anon1.i;
2250 else if(op2->kind == 3)
2251 *value2 = (unsigned char)op2->__anon1.ui;
2252 else if(op2->kind == 4 && op2->type->isSigned)
2253 *value2 = (unsigned char)op2->__anon1.i64;
2254 else if(op2->kind == 4)
2255 *value2 = (unsigned char)op2->__anon1.ui64;
2256 else if(op2->kind == 23 && op2->type->isSigned)
2257 *value2 = (unsigned char)op2->__anon1.i64;
2258 else if(op2->kind == 23)
2259 *value2 = (unsigned char)op2->__anon1.ui64;
2260 else if(op2->kind == 22 && op2->type->isSigned)
2261 *value2 = (unsigned char)op2->__anon1.i64;
2262 else if(op2->kind == 22)
2263 *value2 = (unsigned char)op2->__anon1.ui64;
2264 else if(op2->kind == 2 && op2->type->isSigned)
2265 *value2 = (unsigned char)op2->__anon1.s;
2266 else if(op2->kind == 2)
2267 *value2 = (unsigned char)op2->__anon1.us;
2268 else if(op2->kind == 1 && op2->type->isSigned)
2269 *value2 = (unsigned char)op2->__anon1.c;
2270 else if(op2->kind == 24 || op2->kind == 1)
2271 *value2 = op2->__anon1.uc;
2272 else if(op2->kind == 6)
2273 *value2 = (unsigned char)op2->__anon1.f;
2274 else if(op2->kind == 7)
2275 *value2 = (unsigned char)op2->__anon1.d;
2276 else if(op2->kind == 13)
2277 *value2 = (unsigned char)op2->__anon1.ui64;
2283 unsigned int GetUChar(struct Expression * exp, unsigned char * value2)
2285 struct Operand op2 = GetOperand(exp);
2287 return GetOpUChar(&op2, value2);
2290 unsigned int GetOpFloat(struct Operand * op2, float * value2)
2292 if(op2->kind == 3 && op2->type->isSigned)
2293 *value2 = (float)(float)op2->__anon1.i;
2294 else if(op2->kind == 3)
2295 *value2 = (float)(float)op2->__anon1.ui;
2296 else if(op2->kind == 4 && op2->type->isSigned)
2297 *value2 = (float)(float)op2->__anon1.i64;
2298 else if(op2->kind == 4)
2299 *value2 = (float)(float)op2->__anon1.ui64;
2300 else if(op2->kind == 23 && op2->type->isSigned)
2301 *value2 = (float)(float)op2->__anon1.i64;
2302 else if(op2->kind == 23)
2303 *value2 = (float)(float)op2->__anon1.ui64;
2304 else if(op2->kind == 22 && op2->type->isSigned)
2305 *value2 = (float)(float)op2->__anon1.i64;
2306 else if(op2->kind == 22)
2307 *value2 = (float)(float)op2->__anon1.ui64;
2308 else if(op2->kind == 2 && op2->type->isSigned)
2309 *value2 = (float)(float)op2->__anon1.s;
2310 else if(op2->kind == 2)
2311 *value2 = (float)(float)op2->__anon1.us;
2312 else if(op2->kind == 1 && op2->type->isSigned)
2313 *value2 = (float)(float)op2->__anon1.c;
2314 else if(op2->kind == 24 || op2->kind == 1)
2315 *value2 = (float)(float)op2->__anon1.uc;
2316 else if(op2->kind == 6)
2317 *value2 = (float)op2->__anon1.f;
2318 else if(op2->kind == 7)
2319 *value2 = (float)op2->__anon1.d;
2320 else if(op2->kind == 13)
2321 *value2 = (float)(float)op2->__anon1.ui64;
2327 unsigned int GetFloat(struct Expression * exp, float * value2)
2329 struct Operand op2 = GetOperand(exp);
2331 return GetOpFloat(&op2, value2);
2334 unsigned int GetOpDouble(struct Operand * op2, double * value2)
2336 if(op2->kind == 3 && op2->type->isSigned)
2337 *value2 = (double)(double)op2->__anon1.i;
2338 else if(op2->kind == 3)
2339 *value2 = (double)(double)op2->__anon1.ui;
2340 else if(op2->kind == 4 && op2->type->isSigned)
2341 *value2 = (double)(double)op2->__anon1.i64;
2342 else if(op2->kind == 4)
2343 *value2 = (double)(double)op2->__anon1.ui64;
2344 else if(op2->kind == 23 && op2->type->isSigned)
2345 *value2 = (double)(double)op2->__anon1.i64;
2346 else if(op2->kind == 23)
2347 *value2 = (double)(double)op2->__anon1.ui64;
2348 else if(op2->kind == 22 && op2->type->isSigned)
2349 *value2 = (double)(double)op2->__anon1.i64;
2350 else if(op2->kind == 22)
2351 *value2 = (double)(double)op2->__anon1.ui64;
2352 else if(op2->kind == 2 && op2->type->isSigned)
2353 *value2 = (double)(double)op2->__anon1.s;
2354 else if(op2->kind == 2)
2355 *value2 = (double)(double)op2->__anon1.us;
2356 else if(op2->kind == 1 && op2->type->isSigned)
2357 *value2 = (double)(double)op2->__anon1.c;
2358 else if(op2->kind == 24 || op2->kind == 1)
2359 *value2 = (double)(double)op2->__anon1.uc;
2360 else if(op2->kind == 6)
2361 *value2 = (double)op2->__anon1.f;
2362 else if(op2->kind == 7)
2363 *value2 = (double)op2->__anon1.d;
2364 else if(op2->kind == 13)
2365 *value2 = (double)(double)op2->__anon1.ui64;
2371 unsigned int GetDouble(struct Expression * exp, double * value2)
2373 struct Operand op2 = GetOperand(exp);
2375 return GetOpDouble(&op2, value2);
2378 void ComputeExpression(struct Expression * exp);
2380 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class);
2382 extern int targetBits;
2384 int ComputeTypeSize(struct Type * type);
2386 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
2388 struct __ecereNameSpace__ecere__com__BitMember
2390 struct __ecereNameSpace__ecere__com__BitMember * prev;
2391 struct __ecereNameSpace__ecere__com__BitMember * next;
2393 unsigned int isProperty;
2396 struct __ecereNameSpace__ecere__com__Class * _class;
2397 const char * dataTypeString;
2398 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
2399 struct Type * dataType;
2404 } __attribute__ ((gcc_struct));
2406 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
2408 struct __ecereNameSpace__ecere__sys__OldLink
2410 struct __ecereNameSpace__ecere__sys__OldLink * prev;
2411 struct __ecereNameSpace__ecere__sys__OldLink * next;
2413 } __attribute__ ((gcc_struct));
2415 void FinishTemplatesContext(struct Context * context);
2417 void ComputeClassMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
2419 struct __ecereNameSpace__ecere__com__DataMember * member = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
2420 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
2422 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))
2424 int unionMemberOffset = 0;
2429 member->memberOffset = 0;
2430 if(targetBits < sizeof(void *) * 8)
2431 member->structAlignment = 0;
2433 else if(targetBits < sizeof(void *) * 8)
2434 _class->structAlignment = 0;
2435 if(!member && ((_class->type == 0 || _class->type == 5) || (_class->type == 1 && _class->memberOffset && _class->memberOffset > _class->base->structSize)))
2436 _class->memberOffset = (_class->base && _class->type == 1) ? _class->base->structSize : 0;
2437 if(!member && _class->destructionWatchOffset)
2438 _class->memberOffset += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
2440 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
2442 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
2444 if(!dataMember->isProperty)
2446 if(dataMember->type == 0 && dataMember->dataTypeString && !dataMember->dataType)
2448 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
2454 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
2456 for(dataMember = member ? member->members.first : _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
2458 if(!dataMember->isProperty && (dataMember->type != 0 || dataMember->dataTypeString))
2460 if(!isMember && _class->type == 2 && dataMember->dataType)
2462 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
2466 ComputeTypeSize(dataMember->dataType);
2467 if(bitMember->pos == -1)
2468 bitMember->pos = _class->memberOffset;
2469 if(!bitMember->size)
2470 bitMember->size = dataMember->dataType->size * 8;
2471 _class->memberOffset = bitMember->pos + bitMember->size;
2472 for(d = 0; d < bitMember->size; d++)
2478 bitMember->mask = mask << bitMember->pos;
2480 else if(dataMember->type == 0 && dataMember->dataType)
2485 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)))
2486 ComputeTypeSize(dataMember->dataType);
2487 if(dataMember->dataType->bitFieldCount)
2489 bitFields += dataMember->dataType->bitFieldCount;
2496 int size = (bitFields + 7) / 8;
2500 int __simpleStruct0;
2504 int __simpleStruct0;
2506 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2507 if(member->memberOffset % alignment)
2508 member->memberOffset += alignment - (member->memberOffset % alignment);
2510 dataMember->offset = member->memberOffset;
2511 if(member->type == 1)
2512 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
2515 member->memberOffset += size;
2522 int __simpleStruct0;
2524 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2525 if(_class->memberOffset % alignment)
2526 _class->memberOffset += alignment - (_class->memberOffset % alignment);
2528 dataMember->offset = _class->memberOffset;
2529 _class->memberOffset += size;
2533 size = dataMember->dataType->size;
2534 alignment = dataMember->dataType->alignment;
2538 int __simpleStruct0;
2542 int __simpleStruct0;
2544 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2545 if(member->memberOffset % alignment)
2546 member->memberOffset += alignment - (member->memberOffset % alignment);
2548 dataMember->offset = member->memberOffset;
2549 if(member->type == 1)
2550 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
2553 member->memberOffset += size;
2560 int __simpleStruct0;
2562 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2563 if(_class->memberOffset % alignment)
2564 _class->memberOffset += alignment - (_class->memberOffset % alignment);
2566 dataMember->offset = _class->memberOffset;
2567 _class->memberOffset += size;
2574 ComputeClassMembers((struct __ecereNameSpace__ecere__com__Class *)dataMember, 1);
2575 alignment = dataMember->structAlignment;
2578 int __simpleStruct0;
2582 int __simpleStruct0;
2584 if(member->memberOffset % alignment)
2585 member->memberOffset += alignment - (member->memberOffset % alignment);
2586 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2588 dataMember->offset = member->memberOffset;
2589 if(member->type == 1)
2590 unionMemberOffset = (__simpleStruct0 = dataMember->memberOffset, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
2592 member->memberOffset += dataMember->memberOffset;
2598 int __simpleStruct0;
2600 if(_class->memberOffset % alignment)
2601 _class->memberOffset += alignment - (_class->memberOffset % alignment);
2602 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2604 dataMember->offset = _class->memberOffset;
2605 _class->memberOffset += dataMember->memberOffset;
2613 int size = (bitFields + 7) / 8;
2617 int __simpleStruct0;
2621 int __simpleStruct0;
2623 member->structAlignment = (__simpleStruct0 = member->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2624 if(member->memberOffset % alignment)
2625 member->memberOffset += alignment - (member->memberOffset % alignment);
2627 if(member->type == 1)
2628 unionMemberOffset = (__simpleStruct0 = dataMember->dataType->size, (unionMemberOffset > __simpleStruct0) ? unionMemberOffset : __simpleStruct0);
2631 member->memberOffset += size;
2638 int __simpleStruct0;
2640 _class->structAlignment = (__simpleStruct0 = _class->structAlignment, (__simpleStruct0 > alignment) ? __simpleStruct0 : alignment);
2641 if(_class->memberOffset % alignment)
2642 _class->memberOffset += alignment - (_class->memberOffset % alignment);
2644 _class->memberOffset += size;
2649 if(member && member->type == 1)
2651 member->memberOffset = unionMemberOffset;
2655 if(_class->type != 2)
2659 if(_class->structAlignment)
2661 if(_class->memberOffset % _class->structAlignment)
2662 extra += _class->structAlignment - (_class->memberOffset % _class->structAlignment);
2664 _class->structSize = (_class->base ? (_class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize) : 0) + _class->memberOffset + extra;
2667 struct __ecereNameSpace__ecere__com__Property * prop;
2669 for(prop = _class->membersAndProperties.first; prop; prop = prop->next)
2671 if(prop->isProperty && prop->isWatchable)
2673 prop->watcherOffset = _class->structSize;
2674 _class->structSize += sizeof(struct __ecereNameSpace__ecere__sys__OldList);
2679 struct __ecereNameSpace__ecere__sys__OldLink * derivative;
2681 for(derivative = _class->derivatives.first; derivative; derivative = derivative->next)
2683 struct __ecereNameSpace__ecere__com__Class * deriv = derivative->data;
2685 if(deriv->computeSize)
2687 deriv->offset = _class->structSize;
2688 deriv->memberOffset = 0;
2689 deriv->structSize = deriv->offset;
2690 ComputeClassMembers(deriv, 0);
2698 FinishTemplatesContext(context);
2701 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
2703 struct __ecereNameSpace__ecere__com__NameSpace
2706 struct __ecereNameSpace__ecere__com__NameSpace * btParent;
2707 struct __ecereNameSpace__ecere__com__NameSpace * left;
2708 struct __ecereNameSpace__ecere__com__NameSpace * right;
2710 struct __ecereNameSpace__ecere__com__NameSpace * parent;
2711 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
2712 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
2713 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
2714 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
2715 } __attribute__ ((gcc_struct));
2717 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
2719 struct __ecereNameSpace__ecere__com__Module
2721 struct __ecereNameSpace__ecere__com__Instance * application;
2722 struct __ecereNameSpace__ecere__sys__OldList classes;
2723 struct __ecereNameSpace__ecere__sys__OldList defines;
2724 struct __ecereNameSpace__ecere__sys__OldList functions;
2725 struct __ecereNameSpace__ecere__sys__OldList modules;
2726 struct __ecereNameSpace__ecere__com__Instance * prev;
2727 struct __ecereNameSpace__ecere__com__Instance * next;
2733 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
2734 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
2735 } __attribute__ ((gcc_struct));
2737 void ComputeModuleClasses(struct __ecereNameSpace__ecere__com__Instance * module)
2739 struct __ecereNameSpace__ecere__com__Class * _class;
2740 struct __ecereNameSpace__ecere__sys__OldLink * subModule;
2742 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->modules.first; subModule; subModule = subModule->next)
2743 ComputeModuleClasses(subModule->data);
2744 for(_class = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->classes.first; _class; _class = _class->next)
2745 ComputeClassMembers(_class, 0);
2748 extern unsigned int inCompiler;
2750 extern void Compiler_Error(const char * format, ...);
2752 extern const char * __ecereNameSpace__ecere__GetTranslatedString(const char * name, const char * string, const char * stringAndContext);
2754 extern struct Symbol * FindStruct(struct Context * ctx, const char * name);
2756 int ComputeTypeSize(struct Type * type)
2758 unsigned int size = type ? type->size : 0;
2760 if(!size && type && !type->computing)
2762 type->computing = 1;
2766 type->alignment = size = sizeof(char);
2769 type->alignment = size = sizeof(char);
2772 type->alignment = size = sizeof(int);
2775 type->alignment = size = sizeof(long long);
2778 type->alignment = size = targetBits / 8;
2781 type->alignment = size = targetBits / 8;
2784 type->alignment = size = sizeof(long);
2787 type->alignment = size = sizeof(short);
2790 type->alignment = size = sizeof(float);
2793 type->alignment = size = sizeof(double);
2797 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class ? type->__anon1._class->__anon1.registered : (((void *)0));
2799 if(_class && _class->type == 1)
2801 ComputeClassMembers(_class, 0);
2802 type->alignment = _class->structAlignment;
2803 size = _class->structSize;
2804 if(type->alignment && size % type->alignment)
2805 size += type->alignment - (size % type->alignment);
2807 else if(_class && (_class->type == 3 || _class->type == 4 || _class->type == 2))
2809 if(!_class->dataType)
2810 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
2811 size = type->alignment = ComputeTypeSize(_class->dataType);
2814 size = type->alignment = targetBits / 8;
2819 size = type->alignment = targetBits / 8;
2822 if(type->__anon1.__anon4.arraySizeExp)
2824 ProcessExpressionType(type->__anon1.__anon4.arraySizeExp);
2825 ComputeExpression(type->__anon1.__anon4.arraySizeExp);
2826 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)))
2828 struct Location oldLoc = yylloc;
2829 char expression[10240];
2831 expression[0] = '\0';
2832 type->__anon1.__anon4.arraySizeExp->expType = (((void *)0));
2833 yylloc = type->__anon1.__anon4.arraySizeExp->loc;
2835 PrintExpression(type->__anon1.__anon4.arraySizeExp, expression);
2836 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Array size not constant int (%s)\n", (((void *)0))), expression);
2839 GetInt(type->__anon1.__anon4.arraySizeExp, &type->__anon1.__anon4.arraySize);
2841 else if(type->__anon1.__anon4.enumClass)
2843 if(type->__anon1.__anon4.enumClass && type->__anon1.__anon4.enumClass->__anon1.registered && type->__anon1.__anon4.enumClass->__anon1.registered->type == 4)
2845 type->__anon1.__anon4.arraySize = (int)__ecereNameSpace__ecere__com__eClass_GetProperty(type->__anon1.__anon4.enumClass->__anon1.registered, "enumSize");
2848 type->__anon1.__anon4.arraySize = 0;
2852 type->__anon1.__anon4.arraySize = 0;
2854 size = ComputeTypeSize(type->__anon1.type) * type->__anon1.__anon4.arraySize;
2855 if(type->__anon1.type)
2856 type->alignment = type->__anon1.type->alignment;
2860 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
2862 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
2864 if(symbol && symbol->type)
2866 ComputeTypeSize(symbol->type);
2867 size = symbol->type->size;
2872 struct Type * member;
2874 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
2876 int __simpleStruct0, __simpleStruct1;
2877 unsigned int addSize = ComputeTypeSize(member);
2879 member->offset = size;
2880 if(member->alignment && size % member->alignment)
2881 member->offset += member->alignment - (size % member->alignment);
2882 size = member->offset;
2883 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
2886 if(type->alignment && size % type->alignment)
2887 size += type->alignment - (size % type->alignment);
2893 if(!type->__anon1.__anon1.members.first && type->__anon1.__anon1.enumName)
2895 struct Symbol * symbol = FindStruct(curContext, type->__anon1.__anon1.enumName);
2897 if(symbol && symbol->type)
2899 ComputeTypeSize(symbol->type);
2900 size = symbol->type->size;
2905 struct Type * member;
2907 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
2909 int __simpleStruct0, __simpleStruct1;
2910 unsigned int addSize = ComputeTypeSize(member);
2912 member->offset = size;
2913 if(member->alignment && size % member->alignment)
2914 member->offset += member->alignment - (size % member->alignment);
2915 size = member->offset;
2916 type->alignment = (__simpleStruct0 = type->alignment, __simpleStruct1 = member->alignment, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
2917 size = ((size > addSize) ? size : addSize);
2919 if(type->alignment && size % type->alignment)
2920 size += type->alignment - (size % type->alignment);
2926 struct TemplateParameter * param = type->__anon1.templateParameter;
2927 struct Type * baseType = ProcessTemplateParameterType(param);
2931 size = ComputeTypeSize(baseType);
2932 type->alignment = baseType->alignment;
2935 type->alignment = size = sizeof(uint64);
2940 type->alignment = size = sizeof(enum
2948 type->alignment = size = targetBits / 8;
2953 type->computing = 0;
2958 extern struct Declarator * MkDeclaratorIdentifier(struct Identifier * id);
2960 extern struct Identifier * MkIdentifier(const char * string);
2962 extern void ListAdd(struct __ecereNameSpace__ecere__sys__OldList * list, void * item);
2964 extern struct Declarator * MkStructDeclarator(struct Declarator * declarator, struct Expression * exp);
2966 extern struct ClassDef * MkClassDefDeclaration(struct Declaration * decl);
2968 extern struct Declaration * MkStructDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * declarators, struct Specifier * extStorage);
2970 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class);
2972 static void DeclareType(struct Type * type, unsigned int declarePointers, unsigned int declareParams);
2974 extern void FreeType(struct Type * type);
2976 extern struct Specifier * MkStructOrUnion(int type, struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * definitions);
2978 extern struct Specifier * MkSpecifier(int specifier);
2980 extern struct Declarator * MkDeclaratorArray(struct Declarator * declarator, struct Expression * exp);
2982 extern struct Expression * MkExpConstant(const char * string);
2984 int AddMembers(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)
2986 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
2987 unsigned int totalSize = 0;
2988 unsigned int maxSize = 0;
2991 struct __ecereNameSpace__ecere__com__DataMember * member;
2993 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
2997 if(!isMember && _class->base)
2999 maxSize = _class->structSize;
3001 if(_class->type == 1 || _class->type == 5)
3002 AddMembers(declarations, _class->base, 0, &totalSize, topClass, (((void *)0)));
3005 unsigned int baseSize = _class->base->templateClass ? _class->base->templateClass->structSize : _class->base->structSize;
3007 if(maxSize > baseSize)
3008 maxSize -= baseSize;
3014 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
3016 if(!member->isProperty)
3018 switch(member->type)
3022 if(member->dataTypeString)
3024 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * decls = MkList();
3025 struct Declarator * decl;
3027 decl = SpecDeclFromString(member->dataTypeString, specs, MkDeclaratorIdentifier(MkIdentifier(member->name)));
3028 ListAdd(decls, MkStructDeclarator(decl, (((void *)0))));
3029 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, decls, (((void *)0)))));
3030 if(!member->dataType)
3031 member->dataType = ProcessType(specs, decl);
3032 ReplaceThisClassSpecifiers(specs, topClass);
3034 struct Type * type = ProcessType(specs, decl);
3036 DeclareType(member->dataType, 0, 0);
3039 ComputeTypeSize(member->dataType);
3040 size = member->dataType->size;
3041 alignment = member->dataType->alignment;
3044 if(totalSize % alignment)
3045 totalSize += alignment - (totalSize % alignment);
3054 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList(), * list = MkList();
3057 sprintf(id, "__anon%d", anonID++);
3059 AddMembers(list, (struct __ecereNameSpace__ecere__com__Class *)member, 1, &size, topClass, (((void *)0)));
3060 ListAdd(specs, MkStructOrUnion((member->type == 1) ? 4 : 3, (((void *)0)), list));
3061 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(specs, MkListOne(MkDeclaratorIdentifier(MkIdentifier(id))), (((void *)0)))));
3062 alignment = member->structAlignment;
3065 if(totalSize % alignment)
3066 totalSize += alignment - (totalSize % alignment);
3076 unsigned int __simpleStruct0;
3078 if(topMember && topMember->type == 1)
3079 *retSize = (__simpleStruct0 = *retSize, (__simpleStruct0 > totalSize) ? __simpleStruct0 : totalSize);
3081 *retSize += totalSize;
3083 else if(totalSize < maxSize && _class->type != 1000)
3085 int autoPadding = 0;
3087 if(!isMember && _class->structAlignment && totalSize % _class->structAlignment)
3088 autoPadding = _class->structAlignment - (totalSize % _class->structAlignment);
3089 if(totalSize + autoPadding < maxSize)
3091 char sizeString[50];
3093 sprintf(sizeString, "%d", maxSize - totalSize);
3094 ListAdd(declarations, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(CHAR)), MkListOne(MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__ecere_padding")), MkExpConstant(sizeString))), (((void *)0)))));
3100 FinishTemplatesContext(context);
3101 return topMember ? topMember->memberID : _class->memberID;
3104 static int DeclareMembers(struct __ecereNameSpace__ecere__com__Class * _class, unsigned int isMember)
3106 struct __ecereNameSpace__ecere__com__DataMember * topMember = isMember ? (struct __ecereNameSpace__ecere__com__DataMember *)_class : (((void *)0));
3107 struct __ecereNameSpace__ecere__com__DataMember * member;
3108 struct Context * context = isMember ? (((void *)0)) : SetupTemplatesContext(_class);
3110 if(!isMember && (_class->type == 1 || _class->type == 5) && _class->base->type != 1000)
3111 DeclareMembers(_class->base, 0);
3112 for(member = isMember ? topMember->members.first : _class->membersAndProperties.first; member; member = member->next)
3114 if(!member->isProperty)
3116 switch(member->type)
3120 if(!member->dataType && member->dataTypeString)
3121 member->dataType = ProcessTypeString(member->dataTypeString, 0);
3122 if(member->dataType)
3123 DeclareType(member->dataType, 0, 0);
3129 DeclareMembers((struct __ecereNameSpace__ecere__com__Class *)member, 1);
3136 FinishTemplatesContext(context);
3137 return topMember ? topMember->memberID : _class->memberID;
3140 extern struct Identifier * GetDeclId(struct Declarator * decl);
3142 static void IdentifyAnonStructs(struct __ecereNameSpace__ecere__sys__OldList * definitions)
3144 struct ClassDef * def;
3147 for(def = (*definitions).first; def; def = def->next)
3151 struct Declaration * decl = def->__anon1.decl;
3153 if(decl && decl->__anon1.__anon1.specifiers)
3155 struct Specifier * spec;
3156 unsigned int isStruct = 0;
3158 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3160 if(spec->type == 3 || spec->type == 4)
3162 if(spec->__anon1.__anon2.definitions)
3163 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
3169 struct Declarator * d = (((void *)0));
3171 if(decl->__anon1.__anon1.declarators)
3173 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
3175 struct Identifier * idDecl = GetDeclId(d);
3185 sprintf(id, "__anon%d", anonID++);
3186 if(!decl->__anon1.__anon1.declarators)
3187 decl->__anon1.__anon1.declarators = MkList();
3188 ListAdd(decl->__anon1.__anon1.declarators, MkDeclaratorIdentifier(MkIdentifier(id)));
3196 extern struct Symbol * FindClass(const char * name);
3198 extern char * strchr(const char * , int);
3200 extern void FullClassNameCat(char * output, const char * className, unsigned int includeTemplateParams);
3202 extern void FreeList(struct __ecereNameSpace__ecere__sys__OldList * list, void (* FreeFunction)(void * ));
3204 extern void FreeClassDef(struct ClassDef * def);
3206 extern struct External * MkExternalDeclaration(struct Declaration * declaration);
3208 extern struct Declaration * MkDeclaration(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct __ecereNameSpace__ecere__sys__OldList * initDeclarators);
3210 extern void DeclareClass(struct Symbol * classSym, const char * className);
3212 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move(struct __ecereNameSpace__ecere__sys__OldList * this, void * item, void * prevItem);
3214 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(struct __ecereNameSpace__ecere__sys__OldList * this, void * prevItem, void * item);
3216 void DeclareStruct(const char * name, unsigned int skipNoHead)
3218 struct External * external = (((void *)0));
3219 struct Symbol * classSym = FindClass(name);
3221 if(!inCompiler || !classSym)
3223 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 2 || classSym->__anon1.registered->type == 3 || classSym->__anon1.registered->type == 4))
3225 if(classSym->__anon1.registered && classSym->imported && !classSym->declaredStructSym)
3227 struct Declaration * decl;
3228 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
3229 struct __ecereNameSpace__ecere__sys__OldList * declarations = (((void *)0));
3230 char structName[1024];
3231 struct Specifier * spec = (((void *)0));
3233 external = (classSym->__anon1.registered && classSym->__anon1.registered->type == 1) ? classSym->__anon2.__anon1.pointerExternal : classSym->__anon2.__anon1.structExternal;
3234 classSym->declaring++;
3235 if(strchr(classSym->string, '<'))
3237 if(classSym->__anon1.registered->templateClass)
3239 DeclareStruct(classSym->__anon1.registered->templateClass->fullName, skipNoHead);
3240 classSym->declaring--;
3244 DeclareMembers(classSym->__anon1.registered, 0);
3245 structName[0] = (char)0;
3246 FullClassNameCat(structName, name, 0);
3247 if(external && external->__anon1.declaration && external->__anon1.declaration->__anon1.__anon1.specifiers)
3249 for(spec = (*external->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3251 if(spec->type == 3 || spec->type == 4)
3255 if(!skipNoHead && (!spec || !spec->__anon1.__anon2.definitions))
3257 unsigned int addedPadding = 0;
3259 classSym->declaredStructSym = 1;
3260 declarations = MkList();
3261 AddMembers(declarations, classSym->__anon1.registered, 0, (((void *)0)), classSym->__anon1.registered, &addedPadding);
3262 if(!(*declarations).count || ((*declarations).count == 1 && addedPadding))
3264 FreeList(declarations, (void *)(FreeClassDef));
3265 declarations = (((void *)0));
3268 if(skipNoHead || declarations)
3273 spec->__anon1.__anon2.definitions = declarations;
3274 if(curExternal && curExternal->symbol && curExternal->symbol->idCode < classSym->id)
3276 if(classSym->__anon2.__anon1.structExternal)
3277 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.structExternal, curExternal->prev);
3278 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.pointerExternal, curExternal->prev);
3279 classSym->id = curExternal->symbol->idCode;
3280 classSym->idCode = curExternal->symbol->idCode;
3286 external = MkExternalDeclaration((((void *)0)));
3287 specifiers = MkList();
3288 declarators = MkList();
3289 ListAdd(specifiers, MkStructOrUnion(3, MkIdentifier(structName), declarations));
3290 external->__anon1.declaration = decl = MkDeclaration(specifiers, declarators);
3291 if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
3292 decl->symbol->__anon2.__anon1.pointerExternal = external;
3293 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3295 char className[1024];
3297 strcpy(className, "__ecereClass_");
3298 FullClassNameCat(className, classSym->string, 1);
3299 DeclareClass(classSym, className);
3300 external->symbol = classSym;
3301 classSym->__anon2.__anon1.pointerExternal = external;
3302 classSym->id = (curExternal && curExternal->symbol) ? curExternal->symbol->idCode : 0;
3303 classSym->idCode = (curExternal && curExternal->symbol) ? curExternal->symbol->idCode : 0;
3307 char className[1024];
3309 strcpy(className, "__ecereClass_");
3310 FullClassNameCat(className, classSym->string, 1);
3311 classSym->__anon2.__anon1.structExternal = external;
3312 DeclareClass(classSym, className);
3313 external->symbol = classSym;
3315 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal ? curExternal->prev : (((void *)0)), external);
3318 classSym->declaring--;
3322 if(classSym->__anon2.__anon1.structExternal && classSym->__anon2.__anon1.structExternal->__anon1.declaration && classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers)
3324 struct Specifier * spec;
3326 for(spec = (*classSym->__anon2.__anon1.structExternal->__anon1.declaration->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
3328 IdentifyAnonStructs(spec->__anon1.__anon2.definitions);
3331 if(curExternal && curExternal->symbol && curExternal->symbol->idCode < classSym->id)
3333 classSym->declaring++;
3335 if(classSym->__anon1.registered)
3336 DeclareMembers(classSym->__anon1.registered, 0);
3338 if(classSym->__anon1.registered && (classSym->__anon1.registered->type == 1 || classSym->__anon1.registered->type == 5))
3340 if(classSym->__anon2.__anon1.structExternal)
3341 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.structExternal, curExternal->prev);
3342 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), classSym->__anon2.__anon1.pointerExternal, curExternal->prev);
3343 classSym->id = curExternal->symbol->idCode;
3344 classSym->idCode = curExternal->symbol->idCode;
3346 classSym->declaring--;
3351 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
3353 extern struct ModuleImport * mainModule;
3355 extern struct Specifier * MkSpecifierName(const char * name);
3357 extern struct Declarator * MkDeclaratorBrackets(struct Declarator * declarator);
3359 extern struct Declarator * PlugDeclarator(struct Declarator * decl, struct Declarator * baseDecl);
3361 extern struct Declarator * MkDeclaratorFunction(struct Declarator * declarator, struct __ecereNameSpace__ecere__sys__OldList * parameters);
3363 extern struct InitDeclarator * MkInitDeclarator(struct Declarator * declarator, struct Initializer * initializer);
3365 extern void FreeDeclarator(struct Declarator * decl);
3367 extern struct Specifier * MkSpecifierExtended(struct ExtDecl * extDecl);
3369 extern struct ExtDecl * MkExtDeclAttrib(struct Attrib * attr);
3371 extern struct Attrib * MkAttrib(int type, struct __ecereNameSpace__ecere__sys__OldList * attribs);
3373 extern struct Attribute * MkAttribute(char * attr, struct Expression * exp);
3375 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_PropertyImport;
3377 struct PropertyImport
3379 struct PropertyImport * prev;
3380 struct PropertyImport * next;
3382 unsigned int isVirtual;
3383 unsigned int hasSet;
3384 unsigned int hasGet;
3385 } __attribute__ ((gcc_struct));
3387 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
3389 void DeclareProperty(struct __ecereNameSpace__ecere__com__Property * prop, char * setName, char * getName)
3391 struct Symbol * symbol = prop->symbol;
3393 strcpy(setName, "__ecereProp_");
3394 FullClassNameCat(setName, prop->_class->fullName, 0);
3395 strcat(setName, "_Set_");
3396 FullClassNameCat(setName, prop->name, 1);
3397 strcpy(getName, "__ecereProp_");
3398 FullClassNameCat(getName, prop->_class->fullName, 0);
3399 strcat(getName, "_Get_");
3400 FullClassNameCat(getName, prop->name, 1);
3401 if(prop->_class->type == 1)
3402 DeclareStruct(prop->_class->fullName, 0);
3403 if(!symbol || curExternal->symbol->idCode < symbol->id)
3405 unsigned int imported = 0;
3406 unsigned int dllImport = 0;
3408 if(!symbol || symbol->_import)
3412 struct Symbol * classSym;
3414 if(!prop->_class->symbol)
3415 prop->_class->symbol = FindClass(prop->_class->fullName);
3416 classSym = prop->_class->symbol;
3417 if(classSym && !classSym->_import)
3419 struct ModuleImport * module;
3421 if(prop->_class->module)
3422 module = FindModule(prop->_class->module);
3424 module = mainModule;
3425 classSym->_import = __extension__ ({
3426 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
3428 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->_class->fullName), __ecereInstance1->isRemote = prop->_class->isRemote, __ecereInstance1;
3430 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
3432 symbol = prop->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
3433 symbol->_import = (struct ClassImport *)__extension__ ({
3434 struct PropertyImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_PropertyImport);
3436 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(prop->name), __ecereInstance1->isVirtual = 0, __ecereInstance1->hasSet = prop->Set ? 1 : 0, __ecereInstance1->hasGet = prop->Get ? 1 : 0, __ecereInstance1;
3439 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->properties, symbol->_import);
3442 if((prop->_class->module != privateModule || !strcmp(prop->_class->name, "float") || !strcmp(prop->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)prop->_class->module + structSize_Instance)))->importType != 1)
3447 struct Context * context = SetupTemplatesContext(prop->_class);
3449 symbol->type = ProcessTypeString(prop->dataTypeString, 0);
3450 FinishTemplatesContext(context);
3454 if(!symbol->__anon2.__anon2.externalGet || symbol->__anon2.__anon2.externalGet->type == 0)
3456 struct Declaration * decl;
3457 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
3458 struct Declarator * d;
3459 struct __ecereNameSpace__ecere__sys__OldList * params;
3460 struct Specifier * spec;
3461 struct External * external;
3462 struct Declarator * typeDecl;
3463 unsigned int simple = 0;
3465 specifiers = MkList();
3466 declarators = MkList();
3468 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
3469 d = MkDeclaratorIdentifier(MkIdentifier(getName));
3471 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
3473 struct Context * context = SetupTemplatesContext(prop->_class);
3475 typeDecl = SpecDeclFromString(prop->dataTypeString, specifiers, (((void *)0)));
3476 FinishTemplatesContext(context);
3478 for(spec = (*specifiers).first; spec; spec = spec->next)
3482 if((!typeDecl || typeDecl->type == 1))
3484 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
3486 symbol->_class = classSym->__anon1.registered;
3487 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3489 DeclareStruct(spec->__anon1.__anon1.name, 0);
3496 d = PlugDeclarator(typeDecl, d);
3499 ListAdd(params, MkTypeName(specifiers, PlugDeclarator(typeDecl, MkDeclaratorIdentifier(MkIdentifier("value")))));
3500 specifiers = MkList();
3502 d = MkDeclaratorFunction(d, params);
3504 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
3505 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
3506 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
3508 ListAdd(specifiers, MkSpecifier(VOID));
3509 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
3510 decl = MkDeclaration(specifiers, declarators);
3511 external = MkExternalDeclaration(decl);
3512 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
3513 external->symbol = symbol;
3514 symbol->__anon2.__anon2.externalGet = external;
3515 ReplaceThisClassSpecifiers(specifiers, prop->_class);
3517 FreeDeclarator(typeDecl);
3521 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalGet, curExternal->prev);
3526 if(!symbol->__anon2.__anon2.externalSet || symbol->__anon2.__anon2.externalSet->type == 0)
3528 struct Declaration * decl;
3529 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
3530 struct Declarator * d;
3531 struct __ecereNameSpace__ecere__sys__OldList * params;
3532 struct Specifier * spec;
3533 struct External * external;
3534 struct Declarator * typeDecl;
3536 declarators = MkList();
3538 if(!prop->conversion || prop->_class->type == 1)
3540 ListAdd(params, MkTypeName(MkListOne(MkSpecifierName(prop->_class->fullName)), MkDeclaratorIdentifier(MkIdentifier("this"))));
3542 specifiers = MkList();
3544 struct Context * context = SetupTemplatesContext(prop->_class);
3546 typeDecl = d = SpecDeclFromString(prop->dataTypeString, specifiers, MkDeclaratorIdentifier(MkIdentifier("value")));
3547 FinishTemplatesContext(context);
3549 if(!strcmp(prop->_class->base->fullName, "eda::Row") || !strcmp(prop->_class->base->fullName, "eda::Id"))
3550 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(CONST));
3551 ListAdd(params, MkTypeName(specifiers, d));
3552 d = MkDeclaratorIdentifier(MkIdentifier(setName));
3554 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
3555 d = MkDeclaratorFunction(d, params);
3556 for(spec = (*specifiers).first; spec; spec = spec->next)
3560 if((!typeDecl || typeDecl->type == 1))
3562 struct Symbol * classSym = spec->__anon1.__anon1.symbol;
3564 symbol->_class = classSym->__anon1.registered;
3565 if(classSym->__anon1.registered && classSym->__anon1.registered->type == 1)
3566 DeclareStruct(spec->__anon1.__anon1.name, 0);
3570 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
3571 specifiers = MkList();
3573 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
3574 else if(prop->_class->symbol && ((struct Symbol *)prop->_class->symbol)->isStatic)
3575 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
3576 if(!prop->conversion || prop->_class->type == 1)
3577 ListAdd(specifiers, MkSpecifier(VOID));
3579 ListAdd(specifiers, MkSpecifierName(prop->_class->fullName));
3580 decl = MkDeclaration(specifiers, declarators);
3581 external = MkExternalDeclaration(decl);
3582 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
3583 external->symbol = symbol;
3584 symbol->__anon2.__anon2.externalSet = external;
3585 ReplaceThisClassSpecifiers(specifiers, prop->_class);
3589 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalSet, curExternal->prev);
3592 if(!symbol->__anon2.__anon2.externalPtr)
3594 struct Declaration * decl;
3595 struct External * external;
3596 struct __ecereNameSpace__ecere__sys__OldList * specifiers = MkList();
3597 char propName[1024];
3600 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(EXTERN));
3603 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*specifiers), (((void *)0)), MkSpecifier(STATIC));
3604 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*specifiers), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
3606 ListAdd(specifiers, MkSpecifierName("Property"));
3607 strcpy(propName, "__ecereProp_");
3608 FullClassNameCat(propName, prop->_class->fullName, 0);
3609 strcat(propName, "_");
3610 FullClassNameCat(propName, prop->name, 1);
3612 struct __ecereNameSpace__ecere__sys__OldList * list = MkList();
3614 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
3617 strcpy(propName, "__ecerePropM_");
3618 FullClassNameCat(propName, prop->_class->fullName, 0);
3619 strcat(propName, "_");
3620 FullClassNameCat(propName, prop->name, 1);
3621 ListAdd(list, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(propName)), (((void *)0))));
3623 decl = MkDeclaration(specifiers, list);
3625 external = MkExternalDeclaration(decl);
3626 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
3627 external->symbol = symbol;
3628 symbol->__anon2.__anon2.externalPtr = external;
3632 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon2.externalPtr, curExternal->prev);
3634 symbol->id = curExternal->symbol->idCode;
3638 struct Type * Dereference(struct Type * source)
3640 struct Type * type = (((void *)0));
3644 if(source->kind == 13 || source->kind == 12)
3646 type = source->__anon1.type;
3647 source->__anon1.type->refCount++;
3649 else if(source->kind == 8 && !strcmp(source->__anon1._class->string, "String"))
3651 type = __extension__ ({
3652 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3654 __ecereInstance1->kind = 1, __ecereInstance1->refCount = 1, __ecereInstance1;
3657 else if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 5)
3663 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot dereference type\n", (((void *)0))));
3668 static struct Type * Reference(struct Type * source)
3670 struct Type * type = (((void *)0));
3674 type = __extension__ ({
3675 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
3677 __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = source, __ecereInstance1->refCount = 1, __ecereInstance1;
3684 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);
3686 extern void * memcpy(void * , const void * , size_t size);
3688 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method);
3690 extern void FreeExpression(struct Expression * exp);
3692 extern void __ecereNameSpace__ecere__sys__ChangeCh(char * string, char ch1, char ch2);
3694 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);
3696 static void ProcessInitializer(struct Initializer * init, struct Type * type);
3698 extern struct Type * MkClassType(const char * name);
3700 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);
3702 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)
3704 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
3705 unsigned int found = 0;
3706 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
3707 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
3708 unsigned int freeType = 0;
3710 yylloc = member->loc;
3715 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, curClass, curMember, subMemberStack, subMemberStackPos);
3719 dataMember = *curMember;
3725 struct __ecereNameSpace__ecere__com__DataMember * thisMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
3726 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
3727 int _subMemberStackPos = 0;
3730 thisMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, ident->string, privateModule, _subMemberStack, &_subMemberStackPos);
3733 dataMember = thisMember;
3734 if(curMember && thisMember->memberAccess == 1)
3736 *curMember = thisMember;
3737 *curClass = thisMember->_class;
3738 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
3739 *subMemberStackPos = _subMemberStackPos;
3745 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, ident->string, privateModule);
3746 if(method && method->type == 1)
3749 method = (((void *)0));
3754 struct Type * type = (((void *)0));
3758 if(!dataMember->dataType && dataMember->dataTypeString)
3760 struct Context * context = SetupTemplatesContext(_class);
3762 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
3763 FinishTemplatesContext(context);
3765 type = dataMember->dataType;
3769 if(!method->dataType)
3770 ProcessMethodType(method);
3771 type = method->dataType;
3773 if(ident && ident->next)
3775 for(ident = ident->next; ident && type; ident = ident->next)
3779 dataMember = (struct __ecereNameSpace__ecere__com__DataMember *)__ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
3781 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMember(type->__anon1._class->__anon1.registered, ident->string, privateModule, (((void *)0)), (((void *)0)));
3783 type = dataMember->dataType;
3785 else if(type->kind == 9 || type->kind == 10)
3787 struct Type * memberType;
3789 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
3791 if(!strcmp(memberType->name, ident->string))
3800 if(type && type->kind == 20 && type->__anon1.templateParameter->type == 0 && _class->templateArgs)
3803 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
3804 struct __ecereNameSpace__ecere__com__Class * sClass;
3806 for(sClass = _class; sClass; sClass = sClass->base)
3809 if(sClass->templateClass)
3810 sClass = sClass->templateClass;
3811 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
3813 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
3815 for(sClass = sClass->base; sClass; sClass = sClass->base)
3817 if(sClass->templateClass)
3818 sClass = sClass->templateClass;
3819 id += sClass->templateParams.count;
3830 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
3832 if(arg.__anon1.__anon1.dataTypeString)
3834 unsigned int constant = type->constant;
3836 type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
3837 if(type->kind == 8 && constant)
3839 else if(type->kind == 13)
3841 struct Type * t = type->__anon1.type;
3843 while(t->kind == 13)
3844 t = t->__anon1.type;
3846 t->constant = constant;
3849 if(type && _class->templateClass)
3850 type->passAsTemplate = 1;
3857 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered && strchr(type->__anon1._class->__anon1.registered->fullName, '<'))
3859 struct __ecereNameSpace__ecere__com__Class * expClass = type->__anon1._class->__anon1.registered;
3860 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
3863 char templateString[1024];
3864 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
3866 sprintf(templateString, "%s<", expClass->templateClass->fullName);
3867 for(cClass = expClass; cClass; cClass = cClass->base)
3871 if(cClass->templateClass)
3872 cClass = cClass->templateClass;
3873 for(param = cClass->templateParams.first; param; param = param->next)
3876 struct __ecereNameSpace__ecere__com__Class * sClass;
3877 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
3879 for(sClass = cClass->base; sClass; sClass = sClass->base)
3881 if(sClass->templateClass)
3882 sClass = sClass->templateClass;
3883 id += sClass->templateParams.count;
3885 arg = expClass->templateArgs[id];
3886 for(sClass = _class; sClass; sClass = sClass->base)
3888 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
3890 struct __ecereNameSpace__ecere__com__Class * nextClass;
3892 if(sClass->templateClass)
3893 sClass = sClass->templateClass;
3894 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
3896 if(nextClass->templateClass)
3897 nextClass = nextClass->templateClass;
3898 p += nextClass->templateParams.count;
3900 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
3902 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
3904 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
3906 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
3907 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
3921 char expString[1024];
3922 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
3923 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
3924 struct Expression * exp;
3925 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
3927 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
3928 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
3929 ProcessExpressionType(exp);
3930 ComputeExpression(exp);
3931 expString[0] = '\0';
3932 PrintExpression(exp, expString);
3933 strcat(argument, expString);
3934 FreeExpression(exp);
3939 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
3944 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
3945 strcat(argument, arg.__anon1.__anon1.dataTypeString);
3952 strcat(templateString, ", ");
3953 if(lastParam != p - 1)
3955 strcat(templateString, param->name);
3956 strcat(templateString, " = ");
3958 strcat(templateString, argument);
3967 int len = strlen(templateString);
3969 if(templateString[len - 1] == '<')
3973 if(templateString[len - 1] == '>')
3974 templateString[len++] = ' ';
3975 templateString[len++] = '>';
3977 templateString[len++] = '\0';
3980 struct Context * context = SetupTemplatesContext(_class);
3984 type = ProcessTypeString(templateString, 0);
3986 FinishTemplatesContext(context);
3989 if(method && member->initializer && member->initializer->type == 0 && member->initializer->__anon1.exp)
3991 ProcessExpressionType(member->initializer->__anon1.exp);
3992 if(!member->initializer->__anon1.exp->expType)
3996 char expString[10240];
3998 expString[0] = '\0';
3999 PrintExpression(member->initializer->__anon1.exp, expString);
4000 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
4001 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved symbol used as an instance method %s\n", (((void *)0))), expString);
4004 else if(!MatchTypes(member->initializer->__anon1.exp->expType, type, (((void *)0)), (((void *)0)), _class, 1, 1, 0, 0, 1))
4006 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible instance method %s\n", (((void *)0))), ident->string);
4009 else if(member->initializer)
4011 ProcessInitializer(member->initializer, type);
4018 if(_class && _class->type == 3)
4020 if(member->initializer)
4022 struct Type * type = MkClassType(_class->fullName);
4024 ProcessInitializer(member->initializer, type);
4030 if(member->initializer)
4032 ProcessInitializer(member->initializer, (((void *)0)));
4038 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
4042 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), ident->string, _class->fullName);
4044 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, ident->string, "int", 0, 0, 1);
4048 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many initializers for instantiation of class %s\n", (((void *)0))), _class->fullName);
4053 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);
4055 extern void FreeSpecifier(struct Specifier * spec);
4057 static void ProcessFunction(struct FunctionDefinition * function);
4059 extern struct __ecereNameSpace__ecere__sys__OldList * CopyList(struct __ecereNameSpace__ecere__sys__OldList * source, void * (* CopyFunction)(void * ));
4061 extern struct Specifier * CopySpecifier(struct Specifier * spec);
4063 extern struct Declarator * CopyDeclarator(struct Declarator * declarator);
4065 extern void FreeClassFunction(struct ClassFunction * func);
4067 extern struct MemberInit * MkMemberInit(struct __ecereNameSpace__ecere__sys__OldList * ids, struct Initializer * initializer);
4069 extern struct Initializer * MkInitializerAssignment(struct Expression * exp);
4071 void ProcessInstantiationType(struct Instantiation * inst)
4076 struct MembersInit * members;
4077 struct Symbol * classSym;
4078 struct __ecereNameSpace__ecere__com__Class * _class;
4080 classSym = inst->_class->__anon1.__anon1.symbol;
4081 _class = classSym ? classSym->__anon1.registered : (((void *)0));
4082 if(!_class || _class->type != 5)
4083 DeclareStruct(inst->_class->__anon1.__anon1.name, 0);
4084 afterExternal = afterExternal ? afterExternal : curExternal;
4086 ProcessExpressionType(inst->exp);
4087 inst->isConstant = 1;
4090 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
4091 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
4092 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
4093 int subMemberStackPos = 0;
4095 for(members = (*inst->members).first; members; members = members->next)
4097 switch(members->type)
4102 static unsigned int instMethodID = 0;
4103 struct External * external = curExternal;
4104 struct Context * context = curContext;
4105 struct Declarator * declarator = members->__anon1.function->declarator;
4106 struct Identifier * nameID = GetDeclId(declarator);
4107 char * unmangled = nameID ? nameID->string : (((void *)0));
4108 struct Expression * exp;
4109 struct External * createdExternal = (((void *)0));
4115 strcpy(name, "__ecereInstMeth_");
4116 FullClassNameCat(name, _class ? _class->fullName : "_UNKNOWNCLASS", 0);
4118 strcat(name, nameID->string);
4120 sprintf(number, "_%08d", instMethodID++);
4121 strcat(name, number);
4122 nameID->string = __ecereNameSpace__ecere__sys__CopyString(name);
4126 struct Symbol * symbol = declarator->symbol;
4127 struct __ecereNameSpace__ecere__com__Method * method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, unmangled, privateModule);
4129 if(method && method->type == 1)
4131 symbol->__anon1.method = method;
4132 ProcessMethodType(method);
4133 if(!symbol->type->__anon1.__anon2.thisClass)
4135 if(method->dataType->__anon1.__anon2.thisClass && currentClass && __ecereNameSpace__ecere__com__eClass_IsDerived(currentClass, method->dataType->__anon1.__anon2.thisClass->__anon1.registered))
4137 if(!currentClass->symbol)
4138 currentClass->symbol = FindClass(currentClass->fullName);
4139 symbol->type->__anon1.__anon2.thisClass = currentClass->symbol;
4144 _class->symbol = FindClass(_class->fullName);
4145 symbol->type->__anon1.__anon2.thisClass = _class->symbol;
4148 DeclareType(symbol->type, 1, 1);
4152 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find virtual method %s in class %s\n", (((void *)0))), unmangled, classSym->string);
4155 createdExternal = ProcessClassFunction(classSym ? classSym->__anon1.registered : (((void *)0)), members->__anon1.function, ast, afterExternal, 1);
4158 FreeSpecifier(nameID->_class);
4159 nameID->_class = (((void *)0));
4163 struct External * oldExternal = curExternal;
4165 declarator->symbol->id = declarator->symbol->idCode = curExternal->symbol->idCode;
4167 struct External * externalDecl;
4169 externalDecl = MkExternalDeclaration((((void *)0)));
4170 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), oldExternal->prev, externalDecl);
4171 if(createdExternal->__anon1.function)
4173 ProcessFunction(createdExternal->__anon1.function);
4175 struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(declarator), (((void *)0)))));
4177 externalDecl->__anon1.declaration = decl;
4178 if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
4179 decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
4180 declarator->symbol->__anon2.__anon1.pointerExternal = externalDecl;
4187 curExternal = declarator->symbol->__anon2.__anon1.pointerExternal;
4188 ProcessFunction((struct FunctionDefinition *)members->__anon1.function);
4190 curExternal = external;
4191 curContext = context;
4194 FreeClassFunction(members->__anon1.function);
4195 exp = QMkExpId(name);
4197 members->__anon1.dataMembers = MkListOne(MkMemberInit(MkListOne(MkIdentifier(unmangled)), MkInitializerAssignment(exp)));
4198 (__ecereNameSpace__ecere__com__eSystem_Delete(unmangled), unmangled = 0);
4204 if(members->__anon1.dataMembers && classSym)
4206 struct MemberInit * member;
4207 struct Location oldyyloc = yylloc;
4209 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
4211 ProcessMemberInitData(member, classSym->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
4212 if(member->initializer && !member->initializer->isConstant)
4213 inst->isConstant = 0;
4225 static void DeclareType(struct Type * type, unsigned int declarePointers, unsigned int declareParams)
4229 if(type->kind == 11)
4231 struct Type * param;
4235 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
4236 DeclareType(param, declarePointers, 1);
4238 DeclareType(type->__anon1.__anon2.returnType, declarePointers, 1);
4240 else if(type->kind == 13 && declarePointers)
4241 DeclareType(type->__anon1.type, declarePointers, 0);
4242 else if(type->kind == 8)
4244 if(type->__anon1._class->__anon1.registered && (type->__anon1._class->__anon1.registered->type == 1 || type->__anon1._class->__anon1.registered->type == 5) && !type->__anon1._class->declaring)
4245 DeclareStruct(type->__anon1._class->__anon1.registered->fullName, type->__anon1._class->__anon1.registered->type == 5);
4247 else if(type->kind == 9 || type->kind == 10)
4249 struct Type * member;
4251 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
4252 DeclareType(member, 0, 0);
4254 else if(type->kind == 12)
4255 DeclareType(type->__anon1.__anon4.arrayType, declarePointers, 0);
4259 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
4261 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * FindTemplateArg(struct __ecereNameSpace__ecere__com__Class * _class, struct TemplateParameter * param)
4263 struct __ecereNameSpace__ecere__com__ClassTemplateArgument * arg = (((void *)0));
4265 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
4266 struct __ecereNameSpace__ecere__com__Class * sClass;
4268 for(sClass = _class; sClass; sClass = sClass->base)
4271 if(sClass->templateClass)
4272 sClass = sClass->templateClass;
4273 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
4275 if(curParam->type == 0 && !strcmp(param->identifier->string, curParam->name))
4277 for(sClass = sClass->base; sClass; sClass = sClass->base)
4279 if(sClass->templateClass)
4280 sClass = sClass->templateClass;
4281 id += sClass->templateParams.count;
4292 arg = &_class->templateArgs[id];
4293 if(arg && param->type == 0)
4294 (*arg).__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, (*arg).__anon1.__anon1.dataTypeString);
4299 extern struct Context * PushContext(void);
4301 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplatedType;
4303 struct TemplatedType
4306 struct __ecereNameSpace__ecere__sys__BTNode * parent;
4307 struct __ecereNameSpace__ecere__sys__BTNode * left;
4308 struct __ecereNameSpace__ecere__sys__BTNode * right;
4310 struct TemplateParameter * param;
4311 } __attribute__ ((gcc_struct));
4313 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
4315 struct Context * SetupTemplatesContext(struct __ecereNameSpace__ecere__com__Class * _class)
4317 struct Context * context = PushContext();
4319 context->templateTypesOnly = 1;
4320 if(_class->symbol && ((struct Symbol *)_class->symbol)->templateParams)
4322 struct TemplateParameter * param = (*((struct Symbol *)_class->symbol)->templateParams).first;
4324 for(; param; param = param->next)
4326 if(param->type == 0 && param->identifier)
4328 struct TemplatedType * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType), type->key = (uintptr_t)param->identifier->string, type->param = param, type);
4330 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
4336 struct __ecereNameSpace__ecere__com__Class * sClass;
4338 for(sClass = _class; sClass; sClass = sClass->base)
4340 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * p;
4342 for(p = sClass->templateParams.first; p; p = p->next)
4346 struct TemplateParameter * param = p->param;
4347 struct TemplatedType * type;
4351 p->param = param = __extension__ ({
4352 struct TemplateParameter * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplateParameter);
4354 __ecereInstance1->identifier = MkIdentifier(p->name), __ecereInstance1->type = p->type, __ecereInstance1->dataTypeString = p->__anon1.dataTypeString, __ecereInstance1;
4357 type = __extension__ ({
4358 struct TemplatedType * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TemplatedType);
4360 __ecereInstance1->key = (uintptr_t)p->name, __ecereInstance1->param = param, __ecereInstance1;
4362 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&curContext->templateTypes, (struct __ecereNameSpace__ecere__sys__BTNode *)type);
4370 extern void PopContext(struct Context * ctx);
4372 extern void FreeContext(struct Context * context);
4374 void FinishTemplatesContext(struct Context * context)
4376 PopContext(context);
4377 FreeContext(context);
4378 ((context ? (__ecereClass_Context->Destructor ? __ecereClass_Context->Destructor((void *)context) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(context)) : 0), context = 0);
4381 void ProcessMethodType(struct __ecereNameSpace__ecere__com__Method * method)
4383 if(!method->dataType)
4385 struct Context * context = SetupTemplatesContext(method->_class);
4387 method->dataType = ProcessTypeString(method->dataTypeString, 0);
4388 FinishTemplatesContext(context);
4389 if(method->type != 1 && method->dataType)
4391 if(!method->dataType->__anon1.__anon2.thisClass && !method->dataType->__anon1.__anon2.staticMethod)
4393 if(!method->_class->symbol)
4394 method->_class->symbol = FindClass(method->_class->fullName);
4395 method->dataType->__anon1.__anon2.thisClass = method->_class->symbol;
4401 void ProcessPropertyType(struct __ecereNameSpace__ecere__com__Property * prop)
4405 struct Context * context = SetupTemplatesContext(prop->_class);
4407 prop->dataType = ProcessTypeString(prop->dataTypeString, 0);
4408 FinishTemplatesContext(context);
4412 extern struct Declarator * GetFuncDecl(struct Declarator * decl);
4414 extern void FreeTypeName(struct TypeName * typeName);
4416 static void ProcessDeclarator(struct Declarator * decl);
4418 extern struct __ecereNameSpace__ecere__sys__OldList * excludedSymbols;
4420 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_MethodImport;
4424 struct MethodImport * prev;
4425 struct MethodImport * next;
4427 unsigned int isVirtual;
4428 } __attribute__ ((gcc_struct));
4430 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(struct __ecereNameSpace__ecere__sys__OldList * this, void * item);
4432 void DeclareMethod(struct __ecereNameSpace__ecere__com__Method * method, const char * name)
4434 struct Symbol * symbol = method->symbol;
4436 if(!symbol || (!symbol->__anon2.__anon1.pointerExternal && method->type == 1) || symbol->id > (curExternal ? curExternal->symbol->idCode : -1))
4438 unsigned int dllImport = 0;
4440 if(!method->dataType)
4441 method->dataType = ProcessTypeString(method->dataTypeString, 0);
4442 if(!symbol || symbol->_import || method->type == 1)
4444 if(!symbol || method->type == 1)
4446 struct Symbol * classSym;
4448 if(!method->_class->symbol)
4449 method->_class->symbol = FindClass(method->_class->fullName);
4450 classSym = method->_class->symbol;
4451 if(!classSym->_import)
4453 struct ModuleImport * module;
4455 if(method->_class->module && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->name)
4456 module = FindModule(method->_class->module);
4458 module = mainModule;
4459 classSym->_import = __extension__ ({
4460 struct ClassImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ClassImport);
4462 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->_class->fullName), __ecereInstance1->isRemote = method->_class->isRemote, __ecereInstance1;
4464 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->classes, classSym->_import);
4468 symbol = method->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
4470 if(!symbol->_import)
4472 symbol->_import = (struct ClassImport *)__extension__ ({
4473 struct MethodImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_MethodImport);
4475 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(method->name), __ecereInstance1->isVirtual = method->type == 1, __ecereInstance1;
4477 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&classSym->_import->methods, symbol->_import);
4481 symbol->type = method->dataType;
4483 symbol->type->refCount++;
4486 if(!method->dataType->dllExport)
4488 if((method->_class->module != privateModule || !strcmp(method->_class->name, "float") || !strcmp(method->_class->name, "double")) && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)method->_class->module + structSize_Instance)))->importType != 1)
4492 if(method->type != 1 && method->dataType)
4493 DeclareType(method->dataType, 1, 1);
4494 if(!symbol->__anon2.__anon1.pointerExternal || symbol->__anon2.__anon1.pointerExternal->type == 0)
4496 struct Declaration * decl;
4497 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
4498 struct Declarator * d;
4499 struct Declarator * funcDecl;
4500 struct External * external;
4502 specifiers = MkList();
4503 declarators = MkList();
4505 ListAdd(specifiers, MkSpecifier(EXTERN));
4506 else if(method->_class->symbol && ((struct Symbol *)method->_class->symbol)->isStatic)
4507 ListAdd(specifiers, MkSpecifier(STATIC));
4508 if(method->type == 1)
4510 ListAdd(specifiers, MkSpecifier(INT));
4511 d = MkDeclaratorIdentifier(MkIdentifier(name));
4515 d = MkDeclaratorIdentifier(MkIdentifier(name));
4517 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
4519 struct Context * context = SetupTemplatesContext(method->_class);
4521 d = SpecDeclFromString(method->dataTypeString, specifiers, d);
4522 FinishTemplatesContext(context);
4524 funcDecl = GetFuncDecl(d);
4527 struct Specifier * spec, * next;
4529 for(spec = (*specifiers).first; spec; spec = next)
4534 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
4535 FreeSpecifier(spec);
4539 if(method->dataType && !method->dataType->__anon1.__anon2.staticMethod)
4541 if(funcDecl && funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count)
4543 struct __ecereNameSpace__ecere__com__Class * _class = method->dataType->__anon1.__anon2.thisClass ? method->dataType->__anon1.__anon2.thisClass->__anon1.registered : method->_class;
4544 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")));
4545 struct TypeName * firstParam = ((struct TypeName *)(*funcDecl->__anon1.function.parameters).first);
4546 struct Specifier * firstSpec = firstParam->qualifiers ? (*firstParam->qualifiers).first : (((void *)0));
4548 if(firstSpec && firstSpec->type == 0 && firstSpec->__anon1.specifier == VOID && !firstParam->declarator)
4550 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
4552 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
4553 FreeTypeName(param);
4555 if(!funcDecl->__anon1.function.parameters)
4556 funcDecl->__anon1.function.parameters = MkList();
4557 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
4561 ProcessDeclarator(d);
4562 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
4563 decl = MkDeclaration(specifiers, declarators);
4564 ReplaceThisClassSpecifiers(specifiers, method->_class);
4565 if(symbol->__anon2.__anon1.pointerExternal)
4567 struct Symbol * functionSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
4570 *functionSymbol = *symbol;
4571 functionSymbol->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
4572 if(functionSymbol->type)
4573 functionSymbol->type->refCount++;
4575 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), functionSymbol);
4576 symbol->__anon2.__anon1.pointerExternal->symbol = functionSymbol;
4578 external = MkExternalDeclaration(decl);
4580 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal ? curExternal->prev : (((void *)0)), external);
4581 external->symbol = symbol;
4582 symbol->__anon2.__anon1.pointerExternal = external;
4586 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
4588 symbol->id = curExternal ? curExternal->symbol->idCode : (((int)0x7fffffff));
4592 char * ReplaceThisClass(struct __ecereNameSpace__ecere__com__Class * _class)
4594 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
4596 unsigned int first = 1;
4598 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
4600 char className[1024];
4602 strcpy(className, _class->fullName);
4603 for(param = _class->templateParams.first; param; param = param->next)
4607 strcat(className, "<");
4609 strcat(className, ", ");
4610 if(lastParam + 1 != p)
4612 strcat(className, param->name);
4613 strcat(className, " = ");
4615 strcat(className, param->name);
4623 int len = strlen(className);
4625 if(className[len - 1] == '>')
4626 className[len++] = ' ';
4627 className[len++] = '>';
4628 className[len++] = '\0';
4630 return __ecereNameSpace__ecere__sys__CopyString(className);
4633 return __ecereNameSpace__ecere__sys__CopyString(_class->fullName);
4636 struct Type * ReplaceThisClassType(struct __ecereNameSpace__ecere__com__Class * _class)
4640 if(thisClassParams && _class->templateParams.count && !_class->templateClass)
4642 unsigned int first = 1;
4644 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
4646 char className[1024];
4648 strcpy(className, _class->fullName);
4649 for(param = _class->templateParams.first; param; param = param->next)
4653 strcat(className, "<");
4655 strcat(className, ", ");
4656 if(lastParam + 1 != p)
4658 strcat(className, param->name);
4659 strcat(className, " = ");
4661 strcat(className, param->name);
4669 int len = strlen(className);
4671 if(className[len - 1] == '>')
4672 className[len++] = ' ';
4673 className[len++] = '>';
4674 className[len++] = '\0';
4676 type = MkClassType(className);
4680 type = MkClassType(_class->fullName);
4685 void ReplaceThisClassSpecifiers(struct __ecereNameSpace__ecere__sys__OldList * specs, struct __ecereNameSpace__ecere__com__Class * _class)
4687 if(specs != (((void *)0)) && _class)
4689 struct Specifier * spec;
4691 for(spec = specs->first; spec; spec = spec->next)
4693 if(spec->type == 0 && spec->__anon1.specifier == THISCLASS)
4696 spec->__anon1.__anon1.name = ReplaceThisClass(_class);
4697 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
4703 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
4705 struct __ecereNameSpace__ecere__com__GlobalFunction
4707 struct __ecereNameSpace__ecere__com__GlobalFunction * prev;
4708 struct __ecereNameSpace__ecere__com__GlobalFunction * next;
4711 struct __ecereNameSpace__ecere__com__Instance * module;
4712 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
4713 const char * dataTypeString;
4714 struct Type * dataType;
4716 } __attribute__ ((gcc_struct));
4718 extern struct Context * globalContext;
4720 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionImport;
4722 struct FunctionImport
4724 struct FunctionImport * prev;
4725 struct FunctionImport * next;
4727 } __attribute__ ((gcc_struct));
4729 unsigned int DeclareFunction(struct __ecereNameSpace__ecere__com__GlobalFunction * function, char * name)
4731 struct Symbol * symbol = function->symbol;
4733 if(curExternal && (!symbol || symbol->id > curExternal->symbol->idCode))
4735 unsigned int imported = 0;
4736 unsigned int dllImport = 0;
4738 if(!function->dataType)
4740 function->dataType = ProcessTypeString(function->dataTypeString, 0);
4741 if(!function->dataType->__anon1.__anon2.thisClass)
4742 function->dataType->__anon1.__anon2.staticMethod = 1;
4748 struct ModuleImport * module = FindModule(function->module);
4750 symbol = function->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
4753 if(!function->dataType->dllExport)
4755 symbol->_import = (struct ClassImport *)__extension__ ({
4756 struct FunctionImport * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_FunctionImport);
4758 __ecereInstance1->name = __ecereNameSpace__ecere__sys__CopyString(function->name), __ecereInstance1;
4760 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&module->functions, symbol->_import);
4764 symbol->type = ProcessTypeString(function->dataTypeString, 0);
4765 if(!symbol->type->__anon1.__anon2.thisClass)
4766 symbol->type->__anon1.__anon2.staticMethod = 1;
4769 imported = symbol->_import ? 1 : 0;
4770 if(imported && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1)
4773 DeclareType(function->dataType, 1, 1);
4776 if(!symbol->__anon2.__anon1.pointerExternal || symbol->__anon2.__anon1.pointerExternal->type == 0)
4778 struct Declaration * decl;
4779 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
4780 struct Declarator * d;
4781 struct Declarator * funcDecl;
4782 struct External * external;
4784 specifiers = MkList();
4785 declarators = MkList();
4786 ListAdd(specifiers, MkSpecifier(EXTERN));
4787 d = MkDeclaratorIdentifier(MkIdentifier(imported ? name : function->name));
4789 d = MkDeclaratorBrackets(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d));
4790 d = SpecDeclFromString(function->dataTypeString, specifiers, d);
4791 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType == 1)
4793 struct Specifier * spec;
4795 for(spec = (*specifiers).first; spec; spec = spec->next)
4796 if(spec->type == 5 && spec->__anon1.__anon1.extDecl && spec->__anon1.__anon1.extDecl->type == 0 && !strcmp(spec->__anon1.__anon1.extDecl->__anon1.s, "dllexport"))
4798 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*specifiers), spec);
4799 FreeSpecifier(spec);
4803 funcDecl = GetFuncDecl(d);
4804 if(funcDecl && !funcDecl->__anon1.function.parameters)
4806 funcDecl->__anon1.function.parameters = MkList();
4807 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), MkTypeName(MkListOne(MkSpecifier(VOID)), (((void *)0))));
4809 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
4811 struct Context * oldCtx = curContext;
4813 curContext = globalContext;
4814 decl = MkDeclaration(specifiers, declarators);
4815 curContext = oldCtx;
4817 if(symbol->__anon2.__anon1.pointerExternal)
4819 struct Symbol * functionSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
4822 *functionSymbol = *symbol;
4823 functionSymbol->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
4824 if(functionSymbol->type)
4825 functionSymbol->type->refCount++;
4827 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*excludedSymbols), functionSymbol);
4828 symbol->__anon2.__anon1.pointerExternal->symbol = functionSymbol;
4830 external = MkExternalDeclaration(decl);
4832 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
4833 external->symbol = symbol;
4834 symbol->__anon2.__anon1.pointerExternal = external;
4838 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
4841 symbol->id = curExternal->symbol->idCode;
4844 return (symbol && symbol->_import && function->module != privateModule && ((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1) ? 1 : 0;
4847 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData;
4852 struct __ecereNameSpace__ecere__sys__BTNode * parent;
4853 struct __ecereNameSpace__ecere__sys__BTNode * left;
4854 struct __ecereNameSpace__ecere__sys__BTNode * right;
4856 struct __ecereNameSpace__ecere__com__Instance * module;
4857 char * dataTypeString;
4858 struct Type * dataType;
4861 } __attribute__ ((gcc_struct));
4863 void DeclareGlobalData(struct GlobalData * data)
4865 struct Symbol * symbol = data->symbol;
4867 if(curExternal && (!symbol || symbol->id > curExternal->symbol->idCode))
4872 symbol = data->symbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
4875 data->dataType = ProcessTypeString(data->dataTypeString, 0);
4876 DeclareType(data->dataType, 1, 1);
4879 if(!symbol->__anon2.__anon1.pointerExternal)
4881 struct Declaration * decl;
4882 struct __ecereNameSpace__ecere__sys__OldList * specifiers, * declarators;
4883 struct Declarator * d;
4884 struct External * external;
4886 specifiers = MkList();
4887 declarators = MkList();
4888 ListAdd(specifiers, MkSpecifier(EXTERN));
4889 d = MkDeclaratorIdentifier(MkIdentifier(data->fullName));
4890 d = SpecDeclFromString(data->dataTypeString, specifiers, d);
4891 ListAdd(declarators, MkInitDeclarator(d, (((void *)0))));
4892 decl = MkDeclaration(specifiers, declarators);
4893 external = MkExternalDeclaration(decl);
4895 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, external);
4896 external->symbol = symbol;
4897 symbol->__anon2.__anon1.pointerExternal = external;
4901 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
4904 symbol->id = curExternal->symbol->idCode;
4911 struct Conversion * prev, * next;
4912 struct __ecereNameSpace__ecere__com__Property * convert;
4914 struct Type * resultType;
4915 } __attribute__ ((gcc_struct));
4917 static struct __ecereNameSpace__ecere__com__Class * __ecereClass_Conversion;
4919 extern void Compiler_Warning(const char * format, ...);
4921 static unsigned int CheckConstCompatibility(struct Type * source, struct Type * dest, unsigned int warn)
4923 unsigned int status = 1;
4925 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))
4927 struct __ecereNameSpace__ecere__com__Class * sourceClass = source->kind == 8 ? source->__anon1._class->__anon1.registered : (((void *)0));
4928 struct __ecereNameSpace__ecere__com__Class * destClass = dest->kind == 8 ? dest->__anon1._class->__anon1.registered : (((void *)0));
4930 if((!sourceClass || (sourceClass && sourceClass->type == 0 && !sourceClass->structSize)) && (!destClass || (destClass && destClass->type == 0 && !destClass->structSize)))
4932 struct Type * sourceType = source, * destType = dest;
4934 while((sourceType->kind == 13 || sourceType->kind == 12) && sourceType->__anon1.type)
4935 sourceType = sourceType->__anon1.type;
4936 while((destType->kind == 13 || destType->kind == 12) && destType->__anon1.type)
4937 destType = destType->__anon1.type;
4938 if(!destType->constant && sourceType->constant)
4942 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "discarding const qualifier\n", (((void *)0))));
4949 extern void CopyTypeInto(struct Type * type, struct Type * src);
4951 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
4953 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)
4958 CheckConstCompatibility(source, dest, 1);
4959 if(source->kind == 20 && dest->kind != 20)
4961 struct Type * type = ProcessTemplateParameterType(source->__anon1.templateParameter);
4966 if(dest->kind == 20 && source->kind != 20)
4968 struct Type * type = ProcessTemplateParameterType(dest->__anon1.templateParameter);
4973 if(dest->classObjectType == 2 && dest->kind != 11)
4975 if(source->classObjectType != 3)
4979 if((dest->__anon1._class && strcmp(dest->__anon1._class->string, "class")) || (source->__anon1._class && strcmp(source->__anon1._class->string, "class")))
4987 if(source->kind != 11 && source->classObjectType == 3)
4989 if(dest->kind != 11 && dest->classObjectType == 3 && source->classObjectType != 2)
4992 if((dest->kind == 9 && source->kind == 9) || (dest->kind == 10 && source->kind == 10))
4994 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))
4997 if(dest->kind == 14 && source->kind != 0)
4999 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))
5001 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))
5003 if(((source->kind == 8 && dest->kind == 8) || (source->kind == 19 && dest->kind == 19)) && source->__anon1._class)
5005 if(source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
5007 if(conversions != (((void *)0)))
5009 if(source->__anon1._class->__anon1.registered == dest->__anon1._class->__anon1.registered)
5014 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
5016 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
5018 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base->type != 1000; destBase = destBase->base)
5020 if(sourceBase == destBase)
5024 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))
5028 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4 && ((source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type != 4) || source->kind == 8))
5030 if(__ecereNameSpace__ecere__com__eClass_IsDerived(dest->__anon1._class->__anon1.registered, source->__anon1._class->__anon1.registered))
5037 if(source->kind == 19 && dest->kind == 8 && dest->__anon1._class && !strcmp(dest->__anon1._class->string, "ecere::com::Class"))
5041 if(source->kind == 8)
5043 struct __ecereNameSpace__ecere__com__Class * _class;
5045 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
5047 struct __ecereNameSpace__ecere__com__Property * convert;
5049 for(convert = _class->conversions.first; convert; convert = convert->next)
5051 if(convert->memberAccess == 1 || _class->module == privateModule)
5053 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
5055 if(!convert->dataType)
5056 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
5057 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))
5059 if(!conversions && !convert->Get)
5061 else if(conversions != (((void *)0)))
5063 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))
5067 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
5069 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
5080 struct __ecereNameSpace__ecere__com__Class * _class;
5082 for(_class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
5084 struct __ecereNameSpace__ecere__com__Property * convert;
5086 for(convert = _class->conversions.first; convert; convert = convert->next)
5088 if(convert->memberAccess == 1 || _class->module == privateModule)
5090 struct Type * constType = (((void *)0));
5091 unsigned int success = 0;
5093 if(!convert->dataType)
5094 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
5095 if(warnConst && convert->dataType->kind == 13 && convert->dataType->__anon1.type && dest->constant)
5097 struct Type * ptrType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5099 constType = __extension__ ({
5100 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5102 __ecereInstance1->kind = 13, __ecereInstance1->refCount = 1, __ecereInstance1->__anon1.type = ptrType, __ecereInstance1;
5104 CopyTypeInto(ptrType, convert->dataType->__anon1.type);
5105 ptrType->constant = 1;
5107 if((constType || convert->dataType != dest) && MatchTypes(source, constType ? constType : convert->dataType, conversions, (((void *)0)), (((void *)0)), 1, 0, 0, 1, warnConst))
5109 if(!conversions && !convert->Set)
5111 else if(conversions != (((void *)0)))
5113 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))
5117 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv);
5119 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, conv);
5125 FreeType(constType);
5131 if(enumBaseType && dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
5133 if(!dest->__anon1._class->__anon1.registered->dataType)
5134 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
5135 if(dest->__anon1._class->__anon1.registered->dataType->kind == 8 || source->truth || dest->truth)
5137 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))
5144 if(source->kind == 8)
5146 struct __ecereNameSpace__ecere__com__Class * _class;
5148 for(_class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0)); _class; _class = _class->base)
5150 struct __ecereNameSpace__ecere__com__Property * convert;
5152 for(convert = _class->conversions.first; convert; convert = convert->next)
5154 if(convert->memberAccess == 1 || _class->module == privateModule)
5156 struct Conversion * after = (conversions != (((void *)0))) ? conversions->last : (((void *)0));
5158 if(!convert->dataType)
5159 convert->dataType = ProcessTypeString(convert->dataTypeString, 0);
5160 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))
5162 if(!conversions && !convert->Get)
5164 else if(conversions != (((void *)0)))
5166 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))
5170 struct Conversion * conv = (conv = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Conversion), conv->convert = convert, conv->isGet = 1, conv);
5172 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(conversions, after, conv);
5180 if(enumBaseType && source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 4)
5182 if(!source->__anon1._class->__anon1.registered->dataType)
5183 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
5184 if(!isConversionExploration || source->__anon1._class->__anon1.registered->dataType->kind == 8 || !strcmp(source->__anon1._class->__anon1.registered->name, "String"))
5186 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))
5188 else if(MatchTypes(dest, source->__anon1._class->__anon1.registered->dataType, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, warnConst))
5194 if(source->kind == 8 || source->kind == 19)
5196 else if(dest->kind == source->kind && (dest->kind != 9 && dest->kind != 10 && dest->kind != 11 && dest->kind != 12 && dest->kind != 13 && dest->kind != 16))
5198 else if(dest->kind == 7 && source->kind == 6)
5200 else if(dest->kind == 2 && (source->kind == 1 || source->kind == 24))
5202 else if(dest->kind == 3 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 23))
5204 else if(dest->kind == 4 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 22 || source->kind == 23))
5206 else if(dest->kind == 22 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 23 || source->kind == 4))
5208 else if(dest->kind == 23 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 4 || source->kind == 22))
5210 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))
5212 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))
5214 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)))
5216 struct Type * paramSource, * paramDest;
5218 if(dest->kind == 16)
5219 owningClassDest = dest->__anon1.__anon3.methodClass ? dest->__anon1.__anon3.methodClass : dest->__anon1.__anon3.method->_class;
5220 if(source->kind == 16)
5221 owningClassSource = source->__anon1.__anon3.methodClass ? source->__anon1.__anon3.methodClass : source->__anon1.__anon3.method->_class;
5222 if(dest->kind == 13 && dest->__anon1.type->kind == 11)
5223 dest = dest->__anon1.type;
5224 if(source->kind == 13 && source->__anon1.type->kind == 11)
5225 source = source->__anon1.type;
5226 if(dest->kind == 16)
5227 dest = dest->__anon1.__anon3.method->dataType;
5228 if(source->kind == 16)
5229 source = source->__anon1.__anon3.method->dataType;
5230 paramSource = source->__anon1.__anon2.params.first;
5231 if(paramSource && paramSource->kind == 0)
5232 paramSource = (((void *)0));
5233 paramDest = dest->__anon1.__anon2.params.first;
5234 if(paramDest && paramDest->kind == 0)
5235 paramDest = (((void *)0));
5236 if((dest->__anon1.__anon2.staticMethod || (!dest->__anon1.__anon2.thisClass && !owningClassDest)) && !(source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
5238 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))))
5240 if(paramDest && paramDest->kind == 8)
5241 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), paramDest->__anon1._class->string);
5243 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class should not take an object\n", (((void *)0))));
5246 paramDest = paramDest->next;
5248 else if(!dest->__anon1.__anon2.staticMethod && (dest->__anon1.__anon2.thisClass || owningClassDest))
5250 if((source->__anon1.__anon2.staticMethod || (!source->__anon1.__anon2.thisClass && !owningClassSource)))
5252 if(dest->__anon1.__anon2.thisClass)
5254 if(!paramSource || paramSource->kind != 8 || !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, dest->__anon1.__anon2.thisClass->__anon1.registered))
5256 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
5262 if(!paramSource || paramSource->kind != 8 || (owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(paramSource->__anon1._class->__anon1.registered, owningClassDest)))
5265 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), owningClassDest->fullName);
5267 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "overriding class expected to be derived from method class\n", (((void *)0))));
5271 paramSource = paramSource->next;
5275 if(dest->__anon1.__anon2.thisClass)
5277 if(!__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass ? source->__anon1.__anon2.thisClass->__anon1.registered : owningClassSource, dest->__anon1.__anon2.thisClass->__anon1.registered))
5279 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "method class must be derived from %s\n", (((void *)0))), dest->__anon1.__anon2.thisClass->string);
5285 if(source->__anon1.__anon2.thisClass && source->__anon1.__anon2.thisClass->__anon1.registered && owningClassDest && !__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1.__anon2.thisClass->__anon1.registered, owningClassDest))
5287 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s expected to be derived from method class\n", (((void *)0))), source->__anon1.__anon2.thisClass->__anon1.registered->fullName);
5293 if(!MatchTypes(source->__anon1.__anon2.returnType, dest->__anon1.__anon2.returnType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5295 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible return type for function\n", (((void *)0))));
5299 CheckConstCompatibility(dest->__anon1.__anon2.returnType, source->__anon1.__anon2.returnType, 1);
5300 for(; paramDest; paramDest = paramDest->next)
5304 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "not enough parameters\n", (((void *)0))));
5308 struct Type * paramDestType = paramDest;
5309 struct Type * paramSourceType = paramSource;
5310 struct Type * type = paramDestType;
5312 if(paramDest->kind == 20 && paramDest->__anon1.templateParameter->type == 0 && owningClassSource && paramSource->kind != 20)
5315 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
5316 struct __ecereNameSpace__ecere__com__Class * sClass;
5318 for(sClass = owningClassSource; sClass; sClass = sClass->base)
5321 if(sClass->templateClass)
5322 sClass = sClass->templateClass;
5323 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
5325 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
5327 for(sClass = sClass->base; sClass; sClass = sClass->base)
5329 if(sClass->templateClass)
5330 sClass = sClass->templateClass;
5331 id += sClass->templateParams.count;
5342 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = owningClassSource->templateArgs[id];
5344 paramDestType = type = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
5347 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)))
5352 PrintType(paramDest, type, 0, 1);
5353 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible parameter %s (expected %s)\n", (((void *)0))), paramSource->name, type);
5354 if(paramDestType != paramDest)
5355 FreeType(paramDestType);
5358 if(paramDestType != paramDest)
5359 FreeType(paramDestType);
5361 paramSource = paramSource->next;
5365 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "too many parameters\n", (((void *)0))));
5370 else if((dest->kind == 11 || (dest->kind == 13 && dest->__anon1.type->kind == 11) || dest->kind == 16) && (source->kind == 13 && source->__anon1.type->kind == 0))
5374 else if((dest->kind == 13 || dest->kind == 12) && (source->kind == 12 || source->kind == 13))
5376 ComputeTypeSize(source->__anon1.type);
5377 ComputeTypeSize(dest->__anon1.type);
5378 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))
5385 static void FreeConvert(struct Conversion * convert)
5387 if(convert->resultType)
5388 FreeType(convert->resultType);
5391 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BTNamedLink;
5393 struct __ecereNameSpace__ecere__com__BTNamedLink
5396 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
5397 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
5398 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
5401 } __attribute__ ((gcc_struct));
5403 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
5405 struct __ecereNameSpace__ecere__com__EnumClassData
5407 struct __ecereNameSpace__ecere__sys__OldList values;
5409 } __attribute__ ((gcc_struct));
5411 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
5413 struct __ecereNameSpace__ecere__sys__NamedLink64
5415 struct __ecereNameSpace__ecere__sys__NamedLink64 * prev;
5416 struct __ecereNameSpace__ecere__sys__NamedLink64 * next;
5419 } __attribute__ ((gcc_struct));
5421 extern void FreeExpContents(struct Expression * exp);
5423 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
5425 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
5427 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
5429 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
5431 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (* freeFn)(void * ));
5433 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
5435 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
5437 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)))
5439 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
5441 if(_class->type == 4)
5443 struct __ecereNameSpace__ecere__sys__OldList converts =
5447 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5451 _class->symbol = FindClass(_class->fullName);
5452 type->__anon1._class = _class->symbol;
5453 if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), 1, 0, 0, 0, 0))
5455 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
5456 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5460 struct __ecereNameSpace__ecere__com__Class * baseClass;
5462 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
5464 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
5466 for(value = e->values.first; value; value = value->next)
5468 if(!strcmp(value->name, string))
5473 FreeExpContents(sourceExp);
5474 FreeType(sourceExp->expType);
5475 sourceExp->isConstant = 1;
5476 sourceExp->expType = MkClassType(baseClass->fullName);
5480 sourceExp->type = 2;
5481 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
5482 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
5484 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
5485 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
5487 while(converts.first)
5489 struct Conversion * convert = converts.first;
5491 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
5492 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
5494 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
5501 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
5502 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
5505 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)))
5506 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
5511 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SubModule;
5513 struct __ecereNameSpace__ecere__com__SubModule
5515 struct __ecereNameSpace__ecere__com__SubModule * prev;
5516 struct __ecereNameSpace__ecere__com__SubModule * next;
5517 struct __ecereNameSpace__ecere__com__Instance * module;
5519 } __attribute__ ((gcc_struct));
5521 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
5523 struct __ecereNameSpace__ecere__com__SubModule * subModule;
5525 if(searchFor == searchIn)
5527 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->modules.first; subModule; subModule = subModule->next)
5529 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->application)
5531 if(ModuleVisibility(subModule->module, searchFor))
5538 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
5540 struct __ecereNameSpace__ecere__com__Application
5543 const char * * argv;
5545 unsigned int isGUIApp;
5546 struct __ecereNameSpace__ecere__sys__OldList allModules;
5547 char * parsedCommand;
5548 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
5549 } __attribute__ ((gcc_struct));
5551 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
5553 struct __ecereNameSpace__ecere__com__Instance * module;
5555 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Module)))->systemNameSpace, sourceExp, dest, string, conversions))
5557 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Instance)))->privateNameSpace, sourceExp, dest, string, conversions))
5559 if(MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
5561 for(module = ((struct __ecereNameSpace__ecere__com__Application *)(((char *)((struct __ecereNameSpace__ecere__com__Module *)(((char *)mainModule + structSize_Instance)))->application + structSize_Module)))->allModules.first; module; module = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->next)
5563 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
5569 extern struct Expression * CopyExpression(struct Expression * exp);
5571 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
5573 void ReadString(char * output, char * string);
5575 extern struct Specifier * MkEnum(struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * list);
5577 extern struct TypeName * QMkClass(const char * spec, struct Declarator * decl);
5579 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
5581 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
5583 struct Type * source;
5584 struct Type * realDest = dest;
5585 struct Type * backupSourceExpType = (((void *)0));
5586 struct Expression * computedExp = sourceExp;
5589 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)
5591 computedExp = CopyExpression(sourceExp);
5592 ComputeExpression(computedExp);
5594 source = sourceExp->expType;
5595 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
5597 if(computedExp != sourceExp)
5599 FreeExpression(computedExp);
5600 computedExp = sourceExp;
5605 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
5607 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
5609 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
5611 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
5613 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
5615 if(sourceBase == destBase)
5617 if(computedExp != sourceExp)
5619 FreeExpression(computedExp);
5620 computedExp = sourceExp;
5629 struct __ecereNameSpace__ecere__sys__OldList * specs;
5630 unsigned int flag = 0;
5631 long long value = (((int)0x7fffffff));
5634 if(computedExp->type == 2)
5636 if(source->isSigned)
5637 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
5639 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
5641 else if(computedExp->type == 4 && sourceExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
5643 if(source->isSigned)
5644 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
5646 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
5648 if(computedExp != sourceExp)
5650 FreeExpression(computedExp);
5651 computedExp = sourceExp;
5653 if(dest->kind != 8 && source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered && !strcmp(source->__anon1._class->__anon1.registered->fullName, "ecere::com::unichar"))
5656 source = __extension__ ({
5657 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5659 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
5664 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
5666 if(_class && _class->type == 3)
5668 if(source->kind != 8)
5670 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5671 struct Type * tempDest, * tempSource;
5673 for(; _class->base->type != 1000; _class = _class->base)
5676 tempDest = tempType;
5679 _class->symbol = FindClass(_class->fullName);
5680 tempType->__anon1._class = _class->symbol;
5681 tempType->truth = dest->truth;
5682 if(tempType->__anon1._class)
5683 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
5684 backupSourceExpType = sourceExp->expType;
5685 sourceExp->expType = dest;
5688 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5691 if(_class && _class->type == 2 && source->kind != 8)
5693 if(!dest->__anon1._class->__anon1.registered->dataType)
5694 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
5695 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5698 FreeType(sourceExp->expType);
5699 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
5703 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
5705 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
5706 struct Declarator * decl;
5709 ReadString(string, sourceExp->__anon1.__anon2.string);
5710 decl = SpecDeclFromString(string, specs, (((void *)0)));
5711 FreeExpContents(sourceExp);
5712 FreeType(sourceExp->expType);
5713 sourceExp->type = 24;
5714 sourceExp->__anon1._classExp.specifiers = specs;
5715 sourceExp->__anon1._classExp.decl = decl;
5716 sourceExp->expType = dest;
5720 if(backupSourceExpType)
5721 FreeType(backupSourceExpType);
5725 else if(source->kind == 8)
5727 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
5729 if(_class && (_class->type == 3 || _class->type == 2))
5733 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5734 struct Type * tempDest, * tempSource;
5736 if(!source->__anon1._class->__anon1.registered->dataType)
5737 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
5738 for(; _class->base->type != 1000; _class = _class->base)
5741 tempSource = tempType;
5743 tempType->__anon1._class = FindClass(_class->fullName);
5744 tempType->truth = source->truth;
5745 tempType->classObjectType = source->classObjectType;
5746 if(tempType->__anon1._class)
5747 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
5748 if(conversions->last)
5750 ((struct Conversion *)conversions->last)->resultType = dest;
5753 FreeType(sourceExp->expType);
5754 sourceExp->expType = MkClassType(_class->fullName);
5755 sourceExp->expType->truth = source->truth;
5756 sourceExp->expType->classObjectType = source->classObjectType;
5757 if(!sourceExp->destType)
5759 FreeType(sourceExp->destType);
5760 sourceExp->destType = sourceExp->expType;
5761 if(sourceExp->expType)
5762 sourceExp->expType->refCount++;
5764 if(!_class->dataType)
5765 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5767 dest = MkClassType(source->__anon1._class->string);
5768 dest->truth = source->truth;
5769 dest->classObjectType = source->classObjectType;
5771 source = _class->dataType;
5773 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5779 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5788 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
5789 unsigned int fittingValue = 0;
5791 if(_class && _class->type == 4)
5793 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5794 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
5796 if(c && value >= 0 && value <= c->largest)
5799 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
5801 if(_class->type == 0 || _class->type == 5)
5803 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5805 *newExp = *sourceExp;
5806 if(sourceExp->destType)
5807 sourceExp->destType->refCount++;
5808 if(sourceExp->expType)
5809 sourceExp->expType->refCount++;
5810 sourceExp->type = 11;
5811 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
5812 sourceExp->__anon1.cast.exp = newExp;
5813 FreeType(sourceExp->expType);
5814 sourceExp->expType = (((void *)0));
5815 ProcessExpressionType(sourceExp);
5818 FreeType(sourceExp->expType);
5819 sourceExp->expType = dest;
5824 if(backupSourceExpType)
5825 FreeType(backupSourceExpType);
5828 if(!_class->dataType)
5829 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5831 dest = _class->dataType;
5834 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))
5836 specs = MkListOne(MkSpecifier(DOUBLE));
5838 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))
5840 specs = MkListOne(MkSpecifier(FLOAT));
5842 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))
5846 ListAdd(specs, MkSpecifier(UNSIGNED));
5847 ListAdd(specs, MkSpecifier(INT64));
5849 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
5853 ListAdd(specs, MkSpecifier(UNSIGNED));
5854 ListAdd(specs, MkSpecifier(INT));
5856 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5860 ListAdd(specs, MkSpecifier(UNSIGNED));
5861 ListAdd(specs, MkSpecifier(SHORT));
5863 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5867 ListAdd(specs, MkSpecifier(UNSIGNED));
5868 ListAdd(specs, MkSpecifier(CHAR));
5874 if(backupSourceExpType)
5876 if(sourceExp->expType)
5877 FreeType(sourceExp->expType);
5878 sourceExp->expType = backupSourceExpType;
5883 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))
5885 specs = MkListOne(MkSpecifier(DOUBLE));
5887 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))
5889 specs = MkListOne(MkSpecifier(FLOAT));
5891 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
5894 ListAdd(specs, MkSpecifier(BOOL));
5896 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)))
5900 ListAdd(specs, MkSpecifier(UNSIGNED));
5901 ListAdd(specs, MkSpecifier(CHAR));
5903 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)))))
5907 ListAdd(specs, MkSpecifier(UNSIGNED));
5908 ListAdd(specs, MkSpecifier(SHORT));
5910 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
5914 ListAdd(specs, MkSpecifier(UNSIGNED));
5915 ListAdd(specs, MkSpecifier(INT));
5917 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
5921 ListAdd(specs, MkSpecifier(UNSIGNED));
5922 ListAdd(specs, MkSpecifier(INT64));
5924 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
5926 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
5932 if(backupSourceExpType)
5934 if(sourceExp->expType)
5935 FreeType(sourceExp->expType);
5936 sourceExp->expType = backupSourceExpType;
5940 if(!flag && !sourceExp->opDestType)
5942 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5944 *newExp = *sourceExp;
5945 newExp->prev = (((void *)0));
5946 newExp->next = (((void *)0));
5947 if(sourceExp->destType)
5948 sourceExp->destType->refCount++;
5949 if(sourceExp->expType)
5950 sourceExp->expType->refCount++;
5951 sourceExp->type = 11;
5952 if(realDest->kind == 8)
5954 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
5955 FreeList(specs, (void *)(FreeSpecifier));
5958 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
5959 if(newExp->type == 4)
5961 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
5964 sourceExp->__anon1.cast.exp = newExp;
5965 FreeType(sourceExp->expType);
5966 sourceExp->expType = (((void *)0));
5967 ProcessExpressionType(sourceExp);
5970 FreeList(specs, (void *)(FreeSpecifier));
5973 if(backupSourceExpType)
5974 FreeType(backupSourceExpType);
5979 if(computedExp != sourceExp)
5981 FreeExpression(computedExp);
5982 computedExp = sourceExp;
5984 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
5985 sourceExp = (*sourceExp->__anon1.list).last;
5986 if(sourceExp->type == 0)
5988 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
5992 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
5994 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
5995 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5999 for(; _class && _class->type == 4; _class = _class->base)
6001 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
6002 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
6004 for(value = e->values.first; value; value = value->next)
6006 if(!strcmp(value->name, id->string))
6011 FreeExpContents(sourceExp);
6012 FreeType(sourceExp->expType);
6013 sourceExp->isConstant = 1;
6014 sourceExp->expType = MkClassType(_class->fullName);
6016 sourceExp->type = 2;
6017 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
6018 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
6020 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
6029 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
6040 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6042 int value2 = op2->__anon1.i;
6045 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
6048 exp->expType = op1->type;
6050 op1->type->refCount++;
6055 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6057 unsigned int value2 = op2->__anon1.ui;
6060 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
6063 exp->expType = op1->type;
6065 op1->type->refCount++;
6070 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6072 long long value2 = op2->__anon1.i64;
6075 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
6078 exp->expType = op1->type;
6080 op1->type->refCount++;
6085 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6087 uint64 value2 = op2->__anon1.ui64;
6090 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
6093 exp->expType = op1->type;
6095 op1->type->refCount++;
6100 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6102 short value2 = op2->__anon1.s;
6105 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s + value2));
6108 exp->expType = op1->type;
6110 op1->type->refCount++;
6115 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6117 unsigned short value2 = op2->__anon1.us;
6120 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us + value2));
6123 exp->expType = op1->type;
6125 op1->type->refCount++;
6130 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6132 char value2 = op2->__anon1.c;
6135 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c + value2));
6138 exp->expType = op1->type;
6140 op1->type->refCount++;
6145 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6147 unsigned char value2 = op2->__anon1.uc;
6150 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc + value2));
6153 exp->expType = op1->type;
6155 op1->type->refCount++;
6160 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6162 float value2 = op2->__anon1.f;
6165 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
6168 exp->expType = op1->type;
6170 op1->type->refCount++;
6175 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6177 double value2 = op2->__anon1.d;
6180 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
6183 exp->expType = op1->type;
6185 op1->type->refCount++;
6190 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6192 int value2 = op2->__anon1.i;
6195 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
6198 exp->expType = op1->type;
6200 op1->type->refCount++;
6205 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6207 unsigned int value2 = op2->__anon1.ui;
6210 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
6213 exp->expType = op1->type;
6215 op1->type->refCount++;
6220 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6222 long long value2 = op2->__anon1.i64;
6225 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
6228 exp->expType = op1->type;
6230 op1->type->refCount++;
6235 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6237 uint64 value2 = op2->__anon1.ui64;
6240 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
6243 exp->expType = op1->type;
6245 op1->type->refCount++;
6250 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6252 short value2 = op2->__anon1.s;
6255 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s - value2));
6258 exp->expType = op1->type;
6260 op1->type->refCount++;
6265 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6267 unsigned short value2 = op2->__anon1.us;
6270 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us - value2));
6273 exp->expType = op1->type;
6275 op1->type->refCount++;
6280 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6282 char value2 = op2->__anon1.c;
6285 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c - value2));
6288 exp->expType = op1->type;
6290 op1->type->refCount++;
6295 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6297 unsigned char value2 = op2->__anon1.uc;
6300 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc - value2));
6303 exp->expType = op1->type;
6305 op1->type->refCount++;
6310 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6312 float value2 = op2->__anon1.f;
6315 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
6318 exp->expType = op1->type;
6320 op1->type->refCount++;
6325 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6327 double value2 = op2->__anon1.d;
6330 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
6333 exp->expType = op1->type;
6335 op1->type->refCount++;
6340 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6342 int value2 = op2->__anon1.i;
6345 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
6348 exp->expType = op1->type;
6350 op1->type->refCount++;
6355 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6357 unsigned int value2 = op2->__anon1.ui;
6360 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
6363 exp->expType = op1->type;
6365 op1->type->refCount++;
6370 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6372 long long value2 = op2->__anon1.i64;
6375 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
6378 exp->expType = op1->type;
6380 op1->type->refCount++;
6385 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6387 uint64 value2 = op2->__anon1.ui64;
6390 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
6393 exp->expType = op1->type;
6395 op1->type->refCount++;
6400 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6402 short value2 = op2->__anon1.s;
6405 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s * value2));
6408 exp->expType = op1->type;
6410 op1->type->refCount++;
6415 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6417 unsigned short value2 = op2->__anon1.us;
6420 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us * value2));
6423 exp->expType = op1->type;
6425 op1->type->refCount++;
6430 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6432 char value2 = op2->__anon1.c;
6435 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c * value2));
6438 exp->expType = op1->type;
6440 op1->type->refCount++;
6445 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6447 unsigned char value2 = op2->__anon1.uc;
6450 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc * value2));
6453 exp->expType = op1->type;
6455 op1->type->refCount++;
6460 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6462 float value2 = op2->__anon1.f;
6465 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
6468 exp->expType = op1->type;
6470 op1->type->refCount++;
6475 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6477 double value2 = op2->__anon1.d;
6480 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
6483 exp->expType = op1->type;
6485 op1->type->refCount++;
6490 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6492 int value2 = op2->__anon1.i;
6495 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i / value2) : 0);
6498 exp->expType = op1->type;
6500 op1->type->refCount++;
6505 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6507 unsigned int value2 = op2->__anon1.ui;
6510 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui / value2) : 0);
6513 exp->expType = op1->type;
6515 op1->type->refCount++;
6520 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6522 long long value2 = op2->__anon1.i64;
6525 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 / value2) : 0);
6528 exp->expType = op1->type;
6530 op1->type->refCount++;
6535 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6537 uint64 value2 = op2->__anon1.ui64;
6540 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 / value2) : 0);
6543 exp->expType = op1->type;
6545 op1->type->refCount++;
6550 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6552 short value2 = op2->__anon1.s;
6555 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s / value2) : (short)0);
6558 exp->expType = op1->type;
6560 op1->type->refCount++;
6565 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6567 unsigned short value2 = op2->__anon1.us;
6570 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us / value2) : (unsigned short)0);
6573 exp->expType = op1->type;
6575 op1->type->refCount++;
6580 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6582 char value2 = op2->__anon1.c;
6585 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c / value2) : (char)0);
6588 exp->expType = op1->type;
6590 op1->type->refCount++;
6595 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6597 unsigned char value2 = op2->__anon1.uc;
6600 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc / value2) : (unsigned char)0);
6603 exp->expType = op1->type;
6605 op1->type->refCount++;
6610 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6612 float value2 = op2->__anon1.f;
6615 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f / value2);
6618 exp->expType = op1->type;
6620 op1->type->refCount++;
6625 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6627 double value2 = op2->__anon1.d;
6630 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d / value2);
6633 exp->expType = op1->type;
6635 op1->type->refCount++;
6640 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6642 int value2 = op2->__anon1.i;
6645 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i % value2) : 0);
6648 exp->expType = op1->type;
6650 op1->type->refCount++;
6655 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6657 unsigned int value2 = op2->__anon1.ui;
6660 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui % value2) : 0);
6663 exp->expType = op1->type;
6665 op1->type->refCount++;
6670 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6672 long long value2 = op2->__anon1.i64;
6675 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 % value2) : 0);
6678 exp->expType = op1->type;
6680 op1->type->refCount++;
6685 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6687 uint64 value2 = op2->__anon1.ui64;
6690 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 % value2) : 0);
6693 exp->expType = op1->type;
6695 op1->type->refCount++;
6700 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6702 short value2 = op2->__anon1.s;
6705 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s % value2) : (short)0);
6708 exp->expType = op1->type;
6710 op1->type->refCount++;
6715 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6717 unsigned short value2 = op2->__anon1.us;
6720 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us % value2) : (unsigned short)0);
6723 exp->expType = op1->type;
6725 op1->type->refCount++;
6730 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6732 char value2 = op2->__anon1.c;
6735 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c % value2) : (char)0);
6738 exp->expType = op1->type;
6740 op1->type->refCount++;
6745 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6747 unsigned char value2 = op2->__anon1.uc;
6750 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc % value2) : (unsigned char)0);
6753 exp->expType = op1->type;
6755 op1->type->refCount++;
6760 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
6763 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
6766 exp->expType = op1->type;
6768 op1->type->refCount++;
6773 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
6776 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
6779 exp->expType = op1->type;
6781 op1->type->refCount++;
6786 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
6789 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
6792 exp->expType = op1->type;
6794 op1->type->refCount++;
6799 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
6802 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
6805 exp->expType = op1->type;
6807 op1->type->refCount++;
6812 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
6815 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
6818 exp->expType = op1->type;
6820 op1->type->refCount++;
6825 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
6828 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
6831 exp->expType = op1->type;
6833 op1->type->refCount++;
6838 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
6841 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
6844 exp->expType = op1->type;
6846 op1->type->refCount++;
6851 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
6854 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
6857 exp->expType = op1->type;
6859 op1->type->refCount++;
6864 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
6867 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
6870 exp->expType = op1->type;
6872 op1->type->refCount++;
6877 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
6880 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
6883 exp->expType = op1->type;
6885 op1->type->refCount++;
6890 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
6893 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
6896 exp->expType = op1->type;
6898 op1->type->refCount++;
6903 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
6906 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
6909 exp->expType = op1->type;
6911 op1->type->refCount++;
6916 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
6919 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
6922 exp->expType = op1->type;
6924 op1->type->refCount++;
6929 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
6932 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
6935 exp->expType = op1->type;
6937 op1->type->refCount++;
6942 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
6945 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
6948 exp->expType = op1->type;
6950 op1->type->refCount++;
6955 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
6958 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
6961 exp->expType = op1->type;
6963 op1->type->refCount++;
6968 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
6971 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
6974 exp->expType = op1->type;
6976 op1->type->refCount++;
6981 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
6984 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
6987 exp->expType = op1->type;
6989 op1->type->refCount++;
6994 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
6997 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
7000 exp->expType = op1->type;
7002 op1->type->refCount++;
7007 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
7010 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
7013 exp->expType = op1->type;
7015 op1->type->refCount++;
7020 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
7023 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
7026 exp->expType = op1->type;
7028 op1->type->refCount++;
7033 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
7036 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
7039 exp->expType = op1->type;
7041 op1->type->refCount++;
7046 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
7049 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
7052 exp->expType = op1->type;
7054 op1->type->refCount++;
7059 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
7062 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
7065 exp->expType = op1->type;
7067 op1->type->refCount++;
7072 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
7075 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
7078 exp->expType = op1->type;
7080 op1->type->refCount++;
7085 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
7088 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
7091 exp->expType = op1->type;
7093 op1->type->refCount++;
7098 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
7101 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
7104 exp->expType = op1->type;
7106 op1->type->refCount++;
7111 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
7114 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
7117 exp->expType = op1->type;
7119 op1->type->refCount++;
7124 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
7127 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
7130 exp->expType = op1->type;
7132 op1->type->refCount++;
7137 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
7140 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
7143 exp->expType = op1->type;
7145 op1->type->refCount++;
7150 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7152 int value2 = op2->__anon1.i;
7155 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
7158 exp->expType = op1->type;
7160 op1->type->refCount++;
7165 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7167 unsigned int value2 = op2->__anon1.ui;
7170 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
7173 exp->expType = op1->type;
7175 op1->type->refCount++;
7180 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7182 long long value2 = op2->__anon1.i64;
7185 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
7188 exp->expType = op1->type;
7190 op1->type->refCount++;
7195 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7197 uint64 value2 = op2->__anon1.ui64;
7200 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
7203 exp->expType = op1->type;
7205 op1->type->refCount++;
7210 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7212 short value2 = op2->__anon1.s;
7215 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
7218 exp->expType = op1->type;
7220 op1->type->refCount++;
7225 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7227 unsigned short value2 = op2->__anon1.us;
7230 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
7233 exp->expType = op1->type;
7235 op1->type->refCount++;
7240 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7242 char value2 = op2->__anon1.c;
7245 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
7248 exp->expType = op1->type;
7250 op1->type->refCount++;
7255 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7257 unsigned char value2 = op2->__anon1.uc;
7260 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
7263 exp->expType = op1->type;
7265 op1->type->refCount++;
7270 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7272 float value2 = op2->__anon1.f;
7275 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
7278 exp->expType = op1->type;
7280 op1->type->refCount++;
7285 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7287 double value2 = op2->__anon1.d;
7290 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
7293 exp->expType = op1->type;
7295 op1->type->refCount++;
7300 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7302 int value2 = op2->__anon1.i;
7305 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
7308 exp->expType = op1->type;
7310 op1->type->refCount++;
7315 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7317 unsigned int value2 = op2->__anon1.ui;
7320 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
7323 exp->expType = op1->type;
7325 op1->type->refCount++;
7330 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7332 long long value2 = op2->__anon1.i64;
7335 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
7338 exp->expType = op1->type;
7340 op1->type->refCount++;
7345 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7347 uint64 value2 = op2->__anon1.ui64;
7350 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
7353 exp->expType = op1->type;
7355 op1->type->refCount++;
7360 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7362 short value2 = op2->__anon1.s;
7365 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
7368 exp->expType = op1->type;
7370 op1->type->refCount++;
7375 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7377 unsigned short value2 = op2->__anon1.us;
7380 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
7383 exp->expType = op1->type;
7385 op1->type->refCount++;
7390 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7392 char value2 = op2->__anon1.c;
7395 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
7398 exp->expType = op1->type;
7400 op1->type->refCount++;
7405 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7407 unsigned char value2 = op2->__anon1.uc;
7410 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
7413 exp->expType = op1->type;
7415 op1->type->refCount++;
7420 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7422 float value2 = op2->__anon1.f;
7425 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
7428 exp->expType = op1->type;
7430 op1->type->refCount++;
7435 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7437 double value2 = op2->__anon1.d;
7440 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
7443 exp->expType = op1->type;
7445 op1->type->refCount++;
7450 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7452 int value2 = op2->__anon1.i;
7455 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
7458 exp->expType = op1->type;
7460 op1->type->refCount++;
7465 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7467 unsigned int value2 = op2->__anon1.ui;
7470 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
7473 exp->expType = op1->type;
7475 op1->type->refCount++;
7480 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7482 long long value2 = op2->__anon1.i64;
7485 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
7488 exp->expType = op1->type;
7490 op1->type->refCount++;
7495 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7497 uint64 value2 = op2->__anon1.ui64;
7500 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
7503 exp->expType = op1->type;
7505 op1->type->refCount++;
7510 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7512 short value2 = op2->__anon1.s;
7515 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
7518 exp->expType = op1->type;
7520 op1->type->refCount++;
7525 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7527 unsigned short value2 = op2->__anon1.us;
7530 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
7533 exp->expType = op1->type;
7535 op1->type->refCount++;
7540 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7542 char value2 = op2->__anon1.c;
7545 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
7548 exp->expType = op1->type;
7550 op1->type->refCount++;
7555 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7557 unsigned char value2 = op2->__anon1.uc;
7560 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
7563 exp->expType = op1->type;
7565 op1->type->refCount++;
7570 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7572 float value2 = op2->__anon1.f;
7575 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
7578 exp->expType = op1->type;
7580 op1->type->refCount++;
7585 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7587 double value2 = op2->__anon1.d;
7590 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
7593 exp->expType = op1->type;
7595 op1->type->refCount++;
7600 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7602 int value2 = op2->__anon1.i;
7605 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
7608 exp->expType = op1->type;
7610 op1->type->refCount++;
7615 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7617 unsigned int value2 = op2->__anon1.ui;
7620 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
7623 exp->expType = op1->type;
7625 op1->type->refCount++;
7630 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7632 long long value2 = op2->__anon1.i64;
7635 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
7638 exp->expType = op1->type;
7640 op1->type->refCount++;
7645 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7647 uint64 value2 = op2->__anon1.ui64;
7650 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
7653 exp->expType = op1->type;
7655 op1->type->refCount++;
7660 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7662 short value2 = op2->__anon1.s;
7665 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
7668 exp->expType = op1->type;
7670 op1->type->refCount++;
7675 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7677 unsigned short value2 = op2->__anon1.us;
7680 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
7683 exp->expType = op1->type;
7685 op1->type->refCount++;
7690 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7692 char value2 = op2->__anon1.c;
7695 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
7698 exp->expType = op1->type;
7700 op1->type->refCount++;
7705 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7707 unsigned char value2 = op2->__anon1.uc;
7710 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
7713 exp->expType = op1->type;
7715 op1->type->refCount++;
7720 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7722 float value2 = op2->__anon1.f;
7725 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
7728 exp->expType = op1->type;
7730 op1->type->refCount++;
7735 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7737 double value2 = op2->__anon1.d;
7740 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
7743 exp->expType = op1->type;
7745 op1->type->refCount++;
7750 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7752 int value2 = op2->__anon1.i;
7755 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i /= value2) : 0);
7758 exp->expType = op1->type;
7760 op1->type->refCount++;
7765 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7767 unsigned int value2 = op2->__anon1.ui;
7770 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui /= value2) : 0);
7773 exp->expType = op1->type;
7775 op1->type->refCount++;
7780 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7782 long long value2 = op2->__anon1.i64;
7785 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 /= value2) : 0);
7788 exp->expType = op1->type;
7790 op1->type->refCount++;
7795 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7797 uint64 value2 = op2->__anon1.ui64;
7800 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 /= value2) : 0);
7803 exp->expType = op1->type;
7805 op1->type->refCount++;
7810 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7812 short value2 = op2->__anon1.s;
7815 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s /= value2) : (short)0);
7818 exp->expType = op1->type;
7820 op1->type->refCount++;
7825 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7827 unsigned short value2 = op2->__anon1.us;
7830 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us /= value2) : (unsigned short)0);
7833 exp->expType = op1->type;
7835 op1->type->refCount++;
7840 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7842 char value2 = op2->__anon1.c;
7845 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c /= value2) : (char)0);
7848 exp->expType = op1->type;
7850 op1->type->refCount++;
7855 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7857 unsigned char value2 = op2->__anon1.uc;
7860 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc /= value2) : (unsigned char)0);
7863 exp->expType = op1->type;
7865 op1->type->refCount++;
7870 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7872 float value2 = op2->__anon1.f;
7875 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f /= value2);
7878 exp->expType = op1->type;
7880 op1->type->refCount++;
7885 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7887 double value2 = op2->__anon1.d;
7890 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d /= value2);
7893 exp->expType = op1->type;
7895 op1->type->refCount++;
7900 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7902 int value2 = op2->__anon1.i;
7905 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i %= value2) : 0);
7908 exp->expType = op1->type;
7910 op1->type->refCount++;
7915 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7917 unsigned int value2 = op2->__anon1.ui;
7920 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui %= value2) : 0);
7923 exp->expType = op1->type;
7925 op1->type->refCount++;
7930 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7932 long long value2 = op2->__anon1.i64;
7935 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 %= value2) : 0);
7938 exp->expType = op1->type;
7940 op1->type->refCount++;
7945 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7947 uint64 value2 = op2->__anon1.ui64;
7950 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 %= value2) : 0);
7953 exp->expType = op1->type;
7955 op1->type->refCount++;
7960 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7962 short value2 = op2->__anon1.s;
7965 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s %= value2) : (short)0);
7968 exp->expType = op1->type;
7970 op1->type->refCount++;
7975 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7977 unsigned short value2 = op2->__anon1.us;
7980 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us %= value2) : (unsigned short)0);
7983 exp->expType = op1->type;
7985 op1->type->refCount++;
7990 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7992 char value2 = op2->__anon1.c;
7995 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c %= value2) : (char)0);
7998 exp->expType = op1->type;
8000 op1->type->refCount++;
8005 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8007 unsigned char value2 = op2->__anon1.uc;
8010 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc %= value2) : (unsigned char)0);
8013 exp->expType = op1->type;
8015 op1->type->refCount++;
8020 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8022 int value2 = op2->__anon1.i;
8025 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
8028 exp->expType = op1->type;
8030 op1->type->refCount++;
8035 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8037 unsigned int value2 = op2->__anon1.ui;
8040 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
8043 exp->expType = op1->type;
8045 op1->type->refCount++;
8050 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8052 long long value2 = op2->__anon1.i64;
8055 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
8058 exp->expType = op1->type;
8060 op1->type->refCount++;
8065 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8067 uint64 value2 = op2->__anon1.ui64;
8070 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
8073 exp->expType = op1->type;
8075 op1->type->refCount++;
8080 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8082 short value2 = op2->__anon1.s;
8085 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s & value2));
8088 exp->expType = op1->type;
8090 op1->type->refCount++;
8095 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8097 unsigned short value2 = op2->__anon1.us;
8100 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us & value2));
8103 exp->expType = op1->type;
8105 op1->type->refCount++;
8110 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8112 char value2 = op2->__anon1.c;
8115 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c & value2));
8118 exp->expType = op1->type;
8120 op1->type->refCount++;
8125 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8127 unsigned char value2 = op2->__anon1.uc;
8130 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc & value2));
8133 exp->expType = op1->type;
8135 op1->type->refCount++;
8140 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8142 int value2 = op2->__anon1.i;
8145 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
8148 exp->expType = op1->type;
8150 op1->type->refCount++;
8155 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8157 unsigned int value2 = op2->__anon1.ui;
8160 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
8163 exp->expType = op1->type;
8165 op1->type->refCount++;
8170 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8172 long long value2 = op2->__anon1.i64;
8175 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
8178 exp->expType = op1->type;
8180 op1->type->refCount++;
8185 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8187 uint64 value2 = op2->__anon1.ui64;
8190 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
8193 exp->expType = op1->type;
8195 op1->type->refCount++;
8200 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8202 short value2 = op2->__anon1.s;
8205 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s | value2));
8208 exp->expType = op1->type;
8210 op1->type->refCount++;
8215 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8217 unsigned short value2 = op2->__anon1.us;
8220 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us | value2));
8223 exp->expType = op1->type;
8225 op1->type->refCount++;
8230 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8232 char value2 = op2->__anon1.c;
8235 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c | value2));
8238 exp->expType = op1->type;
8240 op1->type->refCount++;
8245 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8247 unsigned char value2 = op2->__anon1.uc;
8250 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc | value2));
8253 exp->expType = op1->type;
8255 op1->type->refCount++;
8260 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8262 int value2 = op2->__anon1.i;
8265 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
8268 exp->expType = op1->type;
8270 op1->type->refCount++;
8275 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8277 unsigned int value2 = op2->__anon1.ui;
8280 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
8283 exp->expType = op1->type;
8285 op1->type->refCount++;
8290 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8292 long long value2 = op2->__anon1.i64;
8295 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
8298 exp->expType = op1->type;
8300 op1->type->refCount++;
8305 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8307 uint64 value2 = op2->__anon1.ui64;
8310 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
8313 exp->expType = op1->type;
8315 op1->type->refCount++;
8320 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8322 short value2 = op2->__anon1.s;
8325 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^ value2));
8328 exp->expType = op1->type;
8330 op1->type->refCount++;
8335 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8337 unsigned short value2 = op2->__anon1.us;
8340 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^ value2));
8343 exp->expType = op1->type;
8345 op1->type->refCount++;
8350 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8352 char value2 = op2->__anon1.c;
8355 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^ value2));
8358 exp->expType = op1->type;
8360 op1->type->refCount++;
8365 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8367 unsigned char value2 = op2->__anon1.uc;
8370 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^ value2));
8373 exp->expType = op1->type;
8375 op1->type->refCount++;
8380 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8382 int value2 = op2->__anon1.i;
8385 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
8388 exp->expType = op1->type;
8390 op1->type->refCount++;
8395 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8397 unsigned int value2 = op2->__anon1.ui;
8400 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
8403 exp->expType = op1->type;
8405 op1->type->refCount++;
8410 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8412 long long value2 = op2->__anon1.i64;
8415 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
8418 exp->expType = op1->type;
8420 op1->type->refCount++;
8425 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8427 uint64 value2 = op2->__anon1.ui64;
8430 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
8433 exp->expType = op1->type;
8435 op1->type->refCount++;
8440 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8442 short value2 = op2->__anon1.s;
8445 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s << value2));
8448 exp->expType = op1->type;
8450 op1->type->refCount++;
8455 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8457 unsigned short value2 = op2->__anon1.us;
8460 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us << value2));
8463 exp->expType = op1->type;
8465 op1->type->refCount++;
8470 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8472 char value2 = op2->__anon1.c;
8475 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c << value2));
8478 exp->expType = op1->type;
8480 op1->type->refCount++;
8485 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8487 unsigned char value2 = op2->__anon1.uc;
8490 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc << value2));
8493 exp->expType = op1->type;
8495 op1->type->refCount++;
8500 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8502 int value2 = op2->__anon1.i;
8505 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
8508 exp->expType = op1->type;
8510 op1->type->refCount++;
8515 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8517 unsigned int value2 = op2->__anon1.ui;
8520 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
8523 exp->expType = op1->type;
8525 op1->type->refCount++;
8530 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8532 long long value2 = op2->__anon1.i64;
8535 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
8538 exp->expType = op1->type;
8540 op1->type->refCount++;
8545 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8547 uint64 value2 = op2->__anon1.ui64;
8550 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
8553 exp->expType = op1->type;
8555 op1->type->refCount++;
8560 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8562 short value2 = op2->__anon1.s;
8565 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >> value2));
8568 exp->expType = op1->type;
8570 op1->type->refCount++;
8575 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8577 unsigned short value2 = op2->__anon1.us;
8580 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >> value2));
8583 exp->expType = op1->type;
8585 op1->type->refCount++;
8590 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8592 char value2 = op2->__anon1.c;
8595 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >> value2));
8598 exp->expType = op1->type;
8600 op1->type->refCount++;
8605 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8607 unsigned char value2 = op2->__anon1.uc;
8610 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >> value2));
8613 exp->expType = op1->type;
8615 op1->type->refCount++;
8620 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
8623 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
8626 exp->expType = op1->type;
8628 op1->type->refCount++;
8633 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
8636 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
8639 exp->expType = op1->type;
8641 op1->type->refCount++;
8646 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
8649 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
8652 exp->expType = op1->type;
8654 op1->type->refCount++;
8659 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
8662 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
8665 exp->expType = op1->type;
8667 op1->type->refCount++;
8672 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
8675 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
8678 exp->expType = op1->type;
8680 op1->type->refCount++;
8685 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
8688 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
8691 exp->expType = op1->type;
8693 op1->type->refCount++;
8698 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
8701 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
8704 exp->expType = op1->type;
8706 op1->type->refCount++;
8711 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
8714 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
8717 exp->expType = op1->type;
8719 op1->type->refCount++;
8724 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8726 int value2 = op2->__anon1.i;
8729 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
8732 exp->expType = op1->type;
8734 op1->type->refCount++;
8739 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8741 unsigned int value2 = op2->__anon1.ui;
8744 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
8747 exp->expType = op1->type;
8749 op1->type->refCount++;
8754 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8756 long long value2 = op2->__anon1.i64;
8759 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
8762 exp->expType = op1->type;
8764 op1->type->refCount++;
8769 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8771 uint64 value2 = op2->__anon1.ui64;
8774 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
8777 exp->expType = op1->type;
8779 op1->type->refCount++;
8784 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8786 short value2 = op2->__anon1.s;
8789 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
8792 exp->expType = op1->type;
8794 op1->type->refCount++;
8799 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8801 unsigned short value2 = op2->__anon1.us;
8804 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
8807 exp->expType = op1->type;
8809 op1->type->refCount++;
8814 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8816 char value2 = op2->__anon1.c;
8819 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
8822 exp->expType = op1->type;
8824 op1->type->refCount++;
8829 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8831 unsigned char value2 = op2->__anon1.uc;
8834 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
8837 exp->expType = op1->type;
8839 op1->type->refCount++;
8844 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8846 int value2 = op2->__anon1.i;
8849 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
8852 exp->expType = op1->type;
8854 op1->type->refCount++;
8859 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8861 unsigned int value2 = op2->__anon1.ui;
8864 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
8867 exp->expType = op1->type;
8869 op1->type->refCount++;
8874 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8876 long long value2 = op2->__anon1.i64;
8879 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
8882 exp->expType = op1->type;
8884 op1->type->refCount++;
8889 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8891 uint64 value2 = op2->__anon1.ui64;
8894 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
8897 exp->expType = op1->type;
8899 op1->type->refCount++;
8904 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8906 short value2 = op2->__anon1.s;
8909 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
8912 exp->expType = op1->type;
8914 op1->type->refCount++;
8919 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8921 unsigned short value2 = op2->__anon1.us;
8924 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
8927 exp->expType = op1->type;
8929 op1->type->refCount++;
8934 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8936 char value2 = op2->__anon1.c;
8939 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
8942 exp->expType = op1->type;
8944 op1->type->refCount++;
8949 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8951 unsigned char value2 = op2->__anon1.uc;
8954 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
8957 exp->expType = op1->type;
8959 op1->type->refCount++;
8964 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8966 int value2 = op2->__anon1.i;
8969 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
8972 exp->expType = op1->type;
8974 op1->type->refCount++;
8979 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8981 unsigned int value2 = op2->__anon1.ui;
8984 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
8987 exp->expType = op1->type;
8989 op1->type->refCount++;
8994 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8996 long long value2 = op2->__anon1.i64;
8999 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
9002 exp->expType = op1->type;
9004 op1->type->refCount++;
9009 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9011 uint64 value2 = op2->__anon1.ui64;
9014 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
9017 exp->expType = op1->type;
9019 op1->type->refCount++;
9024 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9026 short value2 = op2->__anon1.s;
9029 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
9032 exp->expType = op1->type;
9034 op1->type->refCount++;
9039 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9041 unsigned short value2 = op2->__anon1.us;
9044 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
9047 exp->expType = op1->type;
9049 op1->type->refCount++;
9054 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9056 char value2 = op2->__anon1.c;
9059 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
9062 exp->expType = op1->type;
9064 op1->type->refCount++;
9069 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9071 unsigned char value2 = op2->__anon1.uc;
9074 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
9077 exp->expType = op1->type;
9079 op1->type->refCount++;
9084 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9086 int value2 = op2->__anon1.i;
9089 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
9092 exp->expType = op1->type;
9094 op1->type->refCount++;
9099 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9101 unsigned int value2 = op2->__anon1.ui;
9104 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
9107 exp->expType = op1->type;
9109 op1->type->refCount++;
9114 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9116 long long value2 = op2->__anon1.i64;
9119 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
9122 exp->expType = op1->type;
9124 op1->type->refCount++;
9129 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9131 uint64 value2 = op2->__anon1.ui64;
9134 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
9137 exp->expType = op1->type;
9139 op1->type->refCount++;
9144 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9146 short value2 = op2->__anon1.s;
9149 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
9152 exp->expType = op1->type;
9154 op1->type->refCount++;
9159 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9161 unsigned short value2 = op2->__anon1.us;
9164 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
9167 exp->expType = op1->type;
9169 op1->type->refCount++;
9174 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9176 char value2 = op2->__anon1.c;
9179 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
9182 exp->expType = op1->type;
9184 op1->type->refCount++;
9189 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9191 unsigned char value2 = op2->__anon1.uc;
9194 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
9197 exp->expType = op1->type;
9199 op1->type->refCount++;
9204 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9206 int value2 = op2->__anon1.i;
9209 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
9212 exp->expType = op1->type;
9214 op1->type->refCount++;
9219 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9221 unsigned int value2 = op2->__anon1.ui;
9224 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
9227 exp->expType = op1->type;
9229 op1->type->refCount++;
9234 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9236 long long value2 = op2->__anon1.i64;
9239 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
9242 exp->expType = op1->type;
9244 op1->type->refCount++;
9249 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9251 uint64 value2 = op2->__anon1.ui64;
9254 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
9257 exp->expType = op1->type;
9259 op1->type->refCount++;
9264 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9266 short value2 = op2->__anon1.s;
9269 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
9272 exp->expType = op1->type;
9274 op1->type->refCount++;
9279 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9281 unsigned short value2 = op2->__anon1.us;
9284 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
9287 exp->expType = op1->type;
9289 op1->type->refCount++;
9294 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9296 char value2 = op2->__anon1.c;
9299 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
9302 exp->expType = op1->type;
9304 op1->type->refCount++;
9309 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9311 unsigned char value2 = op2->__anon1.uc;
9314 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
9317 exp->expType = op1->type;
9319 op1->type->refCount++;
9324 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
9327 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
9330 exp->expType = op1->type;
9332 op1->type->refCount++;
9337 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
9340 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
9343 exp->expType = op1->type;
9345 op1->type->refCount++;
9350 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
9353 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
9356 exp->expType = op1->type;
9358 op1->type->refCount++;
9363 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
9366 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
9369 exp->expType = op1->type;
9371 op1->type->refCount++;
9376 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
9379 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
9382 exp->expType = op1->type;
9384 op1->type->refCount++;
9389 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
9392 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
9395 exp->expType = op1->type;
9397 op1->type->refCount++;
9402 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
9405 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
9408 exp->expType = op1->type;
9410 op1->type->refCount++;
9415 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
9418 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
9421 exp->expType = op1->type;
9423 op1->type->refCount++;
9428 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9430 int value2 = op2->__anon1.i;
9433 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
9436 exp->expType = op1->type;
9438 op1->type->refCount++;
9443 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9445 unsigned int value2 = op2->__anon1.ui;
9448 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
9451 exp->expType = op1->type;
9453 op1->type->refCount++;
9458 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9460 long long value2 = op2->__anon1.i64;
9463 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
9466 exp->expType = op1->type;
9468 op1->type->refCount++;
9473 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9475 uint64 value2 = op2->__anon1.ui64;
9478 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
9481 exp->expType = op1->type;
9483 op1->type->refCount++;
9488 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9490 short value2 = op2->__anon1.s;
9493 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
9496 exp->expType = op1->type;
9498 op1->type->refCount++;
9503 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9505 unsigned short value2 = op2->__anon1.us;
9508 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
9511 exp->expType = op1->type;
9513 op1->type->refCount++;
9518 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9520 char value2 = op2->__anon1.c;
9523 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
9526 exp->expType = op1->type;
9528 op1->type->refCount++;
9533 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9535 unsigned char value2 = op2->__anon1.uc;
9538 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
9541 exp->expType = op1->type;
9543 op1->type->refCount++;
9548 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9550 float value2 = op2->__anon1.f;
9553 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
9556 exp->expType = op1->type;
9558 op1->type->refCount++;
9563 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9565 double value2 = op2->__anon1.d;
9568 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
9571 exp->expType = op1->type;
9573 op1->type->refCount++;
9578 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9580 int value2 = op2->__anon1.i;
9583 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
9586 exp->expType = op1->type;
9588 op1->type->refCount++;
9593 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9595 unsigned int value2 = op2->__anon1.ui;
9598 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
9601 exp->expType = op1->type;
9603 op1->type->refCount++;
9608 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9610 long long value2 = op2->__anon1.i64;
9613 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
9616 exp->expType = op1->type;
9618 op1->type->refCount++;
9623 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9625 uint64 value2 = op2->__anon1.ui64;
9628 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
9631 exp->expType = op1->type;
9633 op1->type->refCount++;
9638 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9640 short value2 = op2->__anon1.s;
9643 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
9646 exp->expType = op1->type;
9648 op1->type->refCount++;
9653 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9655 unsigned short value2 = op2->__anon1.us;
9658 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
9661 exp->expType = op1->type;
9663 op1->type->refCount++;
9668 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9670 char value2 = op2->__anon1.c;
9673 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
9676 exp->expType = op1->type;
9678 op1->type->refCount++;
9683 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9685 unsigned char value2 = op2->__anon1.uc;
9688 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
9691 exp->expType = op1->type;
9693 op1->type->refCount++;
9698 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9700 float value2 = op2->__anon1.f;
9703 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
9706 exp->expType = op1->type;
9708 op1->type->refCount++;
9713 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9715 double value2 = op2->__anon1.d;
9718 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
9721 exp->expType = op1->type;
9723 op1->type->refCount++;
9728 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9730 int value2 = op2->__anon1.i;
9733 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
9736 exp->expType = op1->type;
9738 op1->type->refCount++;
9743 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9745 unsigned int value2 = op2->__anon1.ui;
9748 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
9751 exp->expType = op1->type;
9753 op1->type->refCount++;
9758 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9760 long long value2 = op2->__anon1.i64;
9763 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
9766 exp->expType = op1->type;
9768 op1->type->refCount++;
9773 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9775 uint64 value2 = op2->__anon1.ui64;
9778 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
9781 exp->expType = op1->type;
9783 op1->type->refCount++;
9788 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9790 short value2 = op2->__anon1.s;
9793 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
9796 exp->expType = op1->type;
9798 op1->type->refCount++;
9803 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9805 unsigned short value2 = op2->__anon1.us;
9808 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
9811 exp->expType = op1->type;
9813 op1->type->refCount++;
9818 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9820 char value2 = op2->__anon1.c;
9823 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
9826 exp->expType = op1->type;
9828 op1->type->refCount++;
9833 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9835 unsigned char value2 = op2->__anon1.uc;
9838 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
9841 exp->expType = op1->type;
9843 op1->type->refCount++;
9848 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9850 float value2 = op2->__anon1.f;
9853 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
9856 exp->expType = op1->type;
9858 op1->type->refCount++;
9863 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9865 double value2 = op2->__anon1.d;
9868 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
9871 exp->expType = op1->type;
9873 op1->type->refCount++;
9878 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9880 int value2 = op2->__anon1.i;
9883 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
9886 exp->expType = op1->type;
9888 op1->type->refCount++;
9893 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9895 unsigned int value2 = op2->__anon1.ui;
9898 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
9901 exp->expType = op1->type;
9903 op1->type->refCount++;
9908 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9910 long long value2 = op2->__anon1.i64;
9913 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
9916 exp->expType = op1->type;
9918 op1->type->refCount++;
9923 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9925 uint64 value2 = op2->__anon1.ui64;
9928 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
9931 exp->expType = op1->type;
9933 op1->type->refCount++;
9938 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9940 short value2 = op2->__anon1.s;
9943 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
9946 exp->expType = op1->type;
9948 op1->type->refCount++;
9953 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9955 unsigned short value2 = op2->__anon1.us;
9958 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
9961 exp->expType = op1->type;
9963 op1->type->refCount++;
9968 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9970 char value2 = op2->__anon1.c;
9973 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
9976 exp->expType = op1->type;
9978 op1->type->refCount++;
9983 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9985 unsigned char value2 = op2->__anon1.uc;
9988 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
9991 exp->expType = op1->type;
9993 op1->type->refCount++;
9998 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10000 float value2 = op2->__anon1.f;
10003 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
10006 exp->expType = op1->type;
10008 op1->type->refCount++;
10013 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10015 double value2 = op2->__anon1.d;
10018 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
10021 exp->expType = op1->type;
10023 op1->type->refCount++;
10028 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10030 int value2 = op2->__anon1.i;
10033 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
10036 exp->expType = op1->type;
10038 op1->type->refCount++;
10043 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10045 unsigned int value2 = op2->__anon1.ui;
10048 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
10051 exp->expType = op1->type;
10053 op1->type->refCount++;
10058 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10060 long long value2 = op2->__anon1.i64;
10063 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
10066 exp->expType = op1->type;
10068 op1->type->refCount++;
10073 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10075 uint64 value2 = op2->__anon1.ui64;
10078 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
10081 exp->expType = op1->type;
10083 op1->type->refCount++;
10088 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10090 short value2 = op2->__anon1.s;
10093 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
10096 exp->expType = op1->type;
10098 op1->type->refCount++;
10103 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10105 unsigned short value2 = op2->__anon1.us;
10108 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
10111 exp->expType = op1->type;
10113 op1->type->refCount++;
10118 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10120 char value2 = op2->__anon1.c;
10123 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
10126 exp->expType = op1->type;
10128 op1->type->refCount++;
10133 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10135 unsigned char value2 = op2->__anon1.uc;
10138 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
10141 exp->expType = op1->type;
10143 op1->type->refCount++;
10148 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10150 float value2 = op2->__anon1.f;
10153 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
10156 exp->expType = op1->type;
10158 op1->type->refCount++;
10163 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10165 double value2 = op2->__anon1.d;
10168 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
10171 exp->expType = op1->type;
10173 op1->type->refCount++;
10178 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10180 int value2 = op2->__anon1.i;
10183 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
10186 exp->expType = op1->type;
10188 op1->type->refCount++;
10193 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10195 unsigned int value2 = op2->__anon1.ui;
10198 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
10201 exp->expType = op1->type;
10203 op1->type->refCount++;
10208 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10210 long long value2 = op2->__anon1.i64;
10213 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
10216 exp->expType = op1->type;
10218 op1->type->refCount++;
10223 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10225 uint64 value2 = op2->__anon1.ui64;
10228 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
10231 exp->expType = op1->type;
10233 op1->type->refCount++;
10238 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10240 short value2 = op2->__anon1.s;
10243 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
10246 exp->expType = op1->type;
10248 op1->type->refCount++;
10253 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10255 unsigned short value2 = op2->__anon1.us;
10258 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
10261 exp->expType = op1->type;
10263 op1->type->refCount++;
10268 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10270 char value2 = op2->__anon1.c;
10273 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
10276 exp->expType = op1->type;
10278 op1->type->refCount++;
10283 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10285 unsigned char value2 = op2->__anon1.uc;
10288 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
10291 exp->expType = op1->type;
10293 op1->type->refCount++;
10298 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10300 float value2 = op2->__anon1.f;
10303 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
10306 exp->expType = op1->type;
10308 op1->type->refCount++;
10313 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10315 double value2 = op2->__anon1.d;
10318 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
10321 exp->expType = op1->type;
10323 op1->type->refCount++;
10328 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10330 int value2 = op2->__anon1.i;
10333 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
10336 exp->expType = op1->type;
10338 op1->type->refCount++;
10343 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10345 unsigned int value2 = op2->__anon1.ui;
10348 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
10351 exp->expType = op1->type;
10353 op1->type->refCount++;
10358 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10360 long long value2 = op2->__anon1.i64;
10363 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
10366 exp->expType = op1->type;
10368 op1->type->refCount++;
10373 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10375 uint64 value2 = op2->__anon1.ui64;
10378 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
10381 exp->expType = op1->type;
10383 op1->type->refCount++;
10388 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10390 short value2 = op2->__anon1.s;
10393 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
10396 exp->expType = op1->type;
10398 op1->type->refCount++;
10403 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10405 unsigned short value2 = op2->__anon1.us;
10408 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
10411 exp->expType = op1->type;
10413 op1->type->refCount++;
10418 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10420 char value2 = op2->__anon1.c;
10423 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
10426 exp->expType = op1->type;
10428 op1->type->refCount++;
10433 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10435 unsigned char value2 = op2->__anon1.uc;
10438 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
10441 exp->expType = op1->type;
10443 op1->type->refCount++;
10448 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10450 float value2 = op2->__anon1.f;
10453 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
10456 exp->expType = op1->type;
10458 op1->type->refCount++;
10463 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10465 double value2 = op2->__anon1.d;
10468 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
10471 exp->expType = op1->type;
10473 op1->type->refCount++;
10478 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10480 int value2 = op2->__anon1.i;
10483 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
10486 exp->expType = op1->type;
10488 op1->type->refCount++;
10493 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10495 unsigned int value2 = op2->__anon1.ui;
10498 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
10501 exp->expType = op1->type;
10503 op1->type->refCount++;
10508 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10510 long long value2 = op2->__anon1.i64;
10513 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
10516 exp->expType = op1->type;
10518 op1->type->refCount++;
10523 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10525 uint64 value2 = op2->__anon1.ui64;
10528 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
10531 exp->expType = op1->type;
10533 op1->type->refCount++;
10538 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10540 short value2 = op2->__anon1.s;
10543 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
10546 exp->expType = op1->type;
10548 op1->type->refCount++;
10553 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10555 unsigned short value2 = op2->__anon1.us;
10558 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
10561 exp->expType = op1->type;
10563 op1->type->refCount++;
10568 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10570 char value2 = op2->__anon1.c;
10573 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
10576 exp->expType = op1->type;
10578 op1->type->refCount++;
10583 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10585 unsigned char value2 = op2->__anon1.uc;
10588 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
10591 exp->expType = op1->type;
10593 op1->type->refCount++;
10598 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10600 float value2 = op2->__anon1.f;
10603 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
10606 exp->expType = op1->type;
10608 op1->type->refCount++;
10613 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10615 double value2 = op2->__anon1.d;
10618 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
10621 exp->expType = op1->type;
10623 op1->type->refCount++;
10628 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10631 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
10634 exp->expType = op1->type;
10636 op1->type->refCount++;
10641 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10644 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
10647 exp->expType = op1->type;
10649 op1->type->refCount++;
10654 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10657 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
10660 exp->expType = op1->type;
10662 op1->type->refCount++;
10667 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10670 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
10673 exp->expType = op1->type;
10675 op1->type->refCount++;
10680 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10683 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
10686 exp->expType = op1->type;
10688 op1->type->refCount++;
10693 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10696 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
10699 exp->expType = op1->type;
10701 op1->type->refCount++;
10706 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10709 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
10712 exp->expType = op1->type;
10714 op1->type->refCount++;
10719 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10722 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
10725 exp->expType = op1->type;
10727 op1->type->refCount++;
10732 struct OpTable intOps =
10734 (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)
10737 struct OpTable uintOps =
10739 (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)
10742 struct OpTable int64Ops =
10744 (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)
10747 struct OpTable uint64Ops =
10749 (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)
10752 struct OpTable shortOps =
10754 (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)
10757 struct OpTable ushortOps =
10759 (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)
10762 struct OpTable floatOps =
10764 (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)
10767 struct OpTable doubleOps =
10769 (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)
10772 struct OpTable charOps =
10774 (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)
10777 struct OpTable ucharOps =
10779 (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)
10782 void ReadString(char * output, char * string)
10784 int len = strlen(string);
10786 unsigned int quoted = 0, escaped = 0;
10788 for(c = 0; c < len; c++)
10790 char ch = string[c];
10848 int UnescapeString(char * d, char * s, int len)
10853 while(j < len && (ch = s[j]))
10858 switch((ch = s[++j]))
10904 char * OffsetEscapedString(char * s, int len, int offset)
10909 while(j < len && k < offset && (ch = s[j]))
10915 return (k == offset) ? s + j : (((void *)0));
10918 extern long long __ecereNameSpace__ecere__com___strtoi64(const char * string, const char * * endString, int base);
10920 extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char * string, const char * * endString, int base);
10922 extern double strtod(const char * , char * * );
10924 extern float (* __ecereMethod_float_inf)(void);
10926 extern float (* __ecereMethod_float_nan)(void);
10928 extern double (* __ecereMethod_double_inf)(void);
10930 extern double (* __ecereMethod_double_nan)(void);
10932 struct Operand GetOperand(struct Expression * exp)
10934 struct Operand op =
10941 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
10944 struct Type * type = exp->expType;
10948 while(type->kind == 8 && 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))
10950 if(!type->__anon1._class->__anon1.registered->dataType)
10951 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
10952 type = type->__anon1._class->__anon1.registered->dataType;
10954 if(exp->type == 3 && op.kind == 13)
10956 op.__anon1.ui64 = (uint64)exp->__anon1.__anon2.string;
10958 op.ops = uint64Ops;
10960 else if(exp->isConstant && exp->type == 2)
10962 op.kind = type->kind;
10969 if(exp->__anon1.__anon1.constant[0] == '\'')
10971 op.__anon1.c = exp->__anon1.__anon1.constant[1];
10974 else if(type->isSigned)
10976 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10981 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10989 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10994 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10995 op.ops = ushortOps;
11002 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11007 op.__anon1.ui = strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11015 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11020 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11021 op.ops = uint64Ops;
11028 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11033 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11034 op.ops = uint64Ops;
11041 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11046 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11047 op.ops = uint64Ops;
11052 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11053 op.__anon1.f = __ecereMethod_float_inf();
11054 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11055 op.__anon1.f = -__ecereMethod_float_inf();
11056 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11057 op.__anon1.f = __ecereMethod_float_nan();
11058 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11059 op.__anon1.f = -__ecereMethod_float_nan();
11061 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11065 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11066 op.__anon1.d = __ecereMethod_double_inf();
11067 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11068 op.__anon1.d = -__ecereMethod_double_inf();
11069 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11070 op.__anon1.d = __ecereMethod_double_nan();
11071 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11072 op.__anon1.d = -__ecereMethod_double_nan();
11074 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11075 op.ops = doubleOps;
11080 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11082 op.ops = uint64Ops;
11090 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
11094 switch(_class->typeSize)
11097 if(!strcmp(_class->dataTypeString, "uint64"))
11098 v = (long long)*(uint64 *)ptr;
11100 v = *(long long *)ptr;
11103 if(!strcmp(_class->dataTypeString, "uint"))
11104 v = (long long)*(unsigned int *)ptr;
11106 v = (long long)*(int *)ptr;
11109 if(!strcmp(_class->dataTypeString, "uint16"))
11110 v = (long long)*(unsigned short *)ptr;
11112 v = (long long)*(short *)ptr;
11115 if(!strcmp(_class->dataTypeString, "byte"))
11116 v = (long long)*(unsigned char *)ptr;
11118 v = (long long)*(char *)ptr;
11124 int __ecereVMethodID_class_OnGetString;
11126 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
11128 static __attribute__((unused)) void UnusedFunction()
11132 ((const char * (*)(struct __ecereNameSpace__ecere__com__Class *, const void *, char * tempString, void * fieldData, unsigned int * needClass))__ecereClass_int->_vTbl[__ecereVMethodID_class_OnGetString])(__ecereClass_int, (void *)&a, 0, 0, 0);
11135 extern int __ecereVMethodID_class_OnGetString;
11137 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
11139 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11141 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
11143 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11144 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
11147 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11148 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11149 struct Type * type;
11150 void * ptr = inst->data + dataMember->offset + offset;
11151 char * result = (((void *)0));
11153 exp->loc = member->loc = inst->loc;
11154 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11155 if(!dataMember->dataType)
11156 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11157 type = dataMember->dataType;
11158 if(type->kind == 8)
11160 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11162 if(_class->type == 4)
11164 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11168 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11169 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11171 for(item = e->values.first; item; item = item->next)
11173 if(item->data == GetEnumValue(_class, ptr))
11175 result = item->name;
11181 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11183 exp->destType = MkClassType(_class->fullName);
11184 ProcessExpressionType(exp);
11188 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11190 if(!_class->dataType)
11191 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11192 type = _class->dataType;
11201 FreeExpContents(exp);
11202 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11208 FreeExpContents(exp);
11209 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11215 FreeExpContents(exp);
11216 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11222 FreeExpContents(exp);
11223 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11229 FreeExpContents(exp);
11230 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11236 FreeExpContents(exp);
11237 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11242 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11245 ListAdd(memberList, member);
11247 if(parentDataMember->type == 1)
11252 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
11254 void PopulateInstance(struct Instantiation * inst)
11256 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
11257 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
11258 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11259 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
11262 inst->members = MkListOne(MkMembersInitList(memberList));
11264 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
11265 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
11267 if(!dataMember->isProperty)
11269 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11270 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
11273 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11274 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11275 struct Type * type;
11276 void * ptr = inst->data + dataMember->offset;
11277 char * result = (((void *)0));
11279 exp->loc = member->loc = inst->loc;
11280 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11281 if(!dataMember->dataType)
11282 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11283 type = dataMember->dataType;
11284 if(type->kind == 8)
11286 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11288 if(_class->type == 4)
11290 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11294 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11295 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11297 for(item = e->values.first; item; item = item->next)
11299 if(item->data == GetEnumValue(_class, ptr))
11301 result = item->name;
11308 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11310 exp->destType = MkClassType(_class->fullName);
11311 ProcessExpressionType(exp);
11314 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11316 if(!_class->dataType)
11317 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11318 type = _class->dataType;
11327 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11333 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11339 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11345 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11351 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11356 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11359 ListAdd(memberList, member);
11365 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);
11367 extern void FreeInstance(struct Instantiation * inst);
11369 void ComputeInstantiation(struct Expression * exp)
11371 struct Instantiation * inst = exp->__anon1.instance;
11372 struct MembersInit * members;
11373 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11374 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11375 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11376 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11377 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11378 int subMemberStackPos = 0;
11381 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11385 if(_class->type == 0 || _class->type == 5)
11387 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11388 if(_class->type == 0)
11389 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11392 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11396 for(members = (*inst->members).first; members; members = members->next)
11398 switch(members->type)
11402 if(members->__anon1.dataMembers)
11404 struct MemberInit * member;
11406 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11408 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11409 unsigned int found = 0;
11410 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11411 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11412 unsigned int dataMemberOffset;
11416 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11419 if(curMember->isProperty)
11420 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11423 dataMember = curMember;
11424 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11425 if(_class->type == 0)
11426 dataMemberOffset += _class->base->structSize;
11433 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11437 if(prop->memberAccess == 1)
11439 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11440 curClass = prop->_class;
11445 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11446 int _subMemberStackPos = 0;
11448 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11452 if(dataMember->memberAccess == 1)
11454 curMember = dataMember;
11455 curClass = dataMember->_class;
11456 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11457 subMemberStackPos = _subMemberStackPos;
11462 if(found && member->initializer && member->initializer->type == 0)
11464 struct Expression * value = member->initializer->__anon1.exp;
11465 struct Type * type = (((void *)0));
11466 unsigned int deepMember = 0;
11470 type = prop->dataType;
11472 else if(dataMember)
11474 if(!dataMember->dataType)
11475 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11476 type = dataMember->dataType;
11478 if(ident && ident->next)
11481 for(ident = ident->next; ident && type; ident = ident->next)
11483 if(type->kind == 8)
11485 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11487 type = prop->dataType;
11490 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11492 type = dataMember->dataType;
11495 else if(type->kind == 9 || type->kind == 10)
11497 struct Type * memberType;
11499 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11501 if(!strcmp(memberType->name, ident->string))
11512 FreeType(value->destType);
11513 value->destType = type;
11516 ComputeExpression(value);
11518 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11520 if(type->kind == 8)
11522 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11524 if(_class->type == 2 || _class->type == 3 || _class->type == 4)
11526 if(!_class->dataType)
11527 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11528 type = _class->dataType;
11533 void * ptr = inst->data + dataMemberOffset;
11535 if(value->type == 2)
11541 GetInt(value, (int *)ptr);
11546 GetInt64(value, (long long *)ptr);
11551 GetIntPtr(value, (intptr_t *)ptr);
11556 GetIntSize(value, (ssize_t *)ptr);
11561 GetFloat(value, (float *)ptr);
11566 GetDouble(value, (double *)ptr);
11571 else if(value->type == 1)
11573 if(type->kind == 8)
11575 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11577 if(_class->type == 1)
11579 ComputeTypeSize(type);
11580 if(value->__anon1.instance->data)
11581 memcpy(ptr, value->__anon1.instance->data, type->size);
11588 if(value->type == 1 && value->__anon1.instance->data)
11590 if(type->kind == 8)
11592 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11594 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)))
11596 void (* Set)(void *, void *) = (void *)prop->Set;
11598 Set(inst->data, value->__anon1.instance->data);
11599 PopulateInstance(inst);
11603 else if(value->type == 2)
11609 void (* Set)(void *, double) = (void *)prop->Set;
11611 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11616 void (* Set)(void *, float) = (void *)prop->Set;
11618 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11623 void (* Set)(void *, int) = (void *)prop->Set;
11625 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11630 void (* Set)(void *, long long) = (void *)prop->Set;
11632 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11637 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11639 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11644 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11646 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11651 else if(value->type == 3)
11655 ReadString(temp, value->__anon1.__anon2.string);
11656 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11660 else if(!deepMember && type && _class->type == 3)
11664 if(value->type == 2)
11666 if(type->kind == 8)
11668 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11670 if(_class->type == 3)
11672 if(!_class->dataType)
11673 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11674 type = _class->dataType;
11682 float (* Set)(float) = (void *)prop->Set;
11684 GetFloat(member->initializer->__anon1.exp, &fValue);
11685 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11692 double (* Set)(double) = (void *)prop->Set;
11694 GetDouble(member->initializer->__anon1.exp, &dValue);
11695 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11703 else if(!deepMember && type && _class->type == 2)
11707 if(value->type == 1 && value->__anon1.instance->data)
11709 unsigned int (* Set)(void *) = (void *)prop->Set;
11711 bits = Set(value->__anon1.instance->data);
11713 else if(value->type == 2)
11717 else if(dataMember)
11719 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11720 struct Type * type;
11723 bits = (bits & ~bitMember->mask);
11724 if(!bitMember->dataType)
11725 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11726 type = bitMember->dataType;
11727 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11729 if(!type->__anon1._class->__anon1.registered->dataType)
11730 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11731 type = type->__anon1._class->__anon1.registered->dataType;
11740 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11748 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11757 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11765 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11773 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11781 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11786 bits |= part << bitMember->pos;
11792 if(_class && _class->type == 3)
11794 ComputeExpression(member->initializer->__anon1.exp);
11795 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11797 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11807 if(_class && _class->type == 2)
11809 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11814 FreeInstance(inst);
11818 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
11820 unsigned int result = 0;
11825 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
11826 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
11830 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
11831 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11834 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)
11835 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11838 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)
11839 result = GetOpFloat(op, &op->__anon1.f);
11842 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)
11843 result = GetOpDouble(op, &op->__anon1.d);
11846 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)
11847 result = GetOpUInt64(op, &op->__anon1.ui64);
11850 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)
11851 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11854 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11855 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11858 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11859 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11865 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11867 if(exp->__anon1.op.op == SIZEOF)
11869 FreeExpContents(exp);
11871 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11875 if(!exp->__anon1.op.exp1)
11877 switch(exp->__anon1.op.op)
11881 struct Expression * exp2 = exp->__anon1.op.exp2;
11883 exp->__anon1.op.exp2 = (((void *)0));
11884 FreeExpContents(exp);
11885 FreeType(exp->expType);
11886 FreeType(exp->destType);
11888 ((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
11894 FreeExpContents(exp);
11895 op1->ops.Neg(exp, op1);
11899 if(op1->ops.BitNot)
11901 FreeExpContents(exp);
11902 op1->ops.BitNot(exp, op1);
11908 FreeExpContents(exp);
11909 op1->ops.Not(exp, op1);
11916 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11918 if(Promote(op2, op1->kind, op1->type->isSigned))
11919 op2->kind = op1->kind, op2->ops = op1->ops;
11920 else if(Promote(op1, op2->kind, op2->type->isSigned))
11921 op1->kind = op2->kind, op1->ops = op2->ops;
11923 switch(exp->__anon1.op.op)
11928 FreeExpContents(exp);
11929 op1->ops.Add(exp, op1, op2);
11935 FreeExpContents(exp);
11936 op1->ops.Sub(exp, op1, op2);
11942 FreeExpContents(exp);
11943 op1->ops.Mul(exp, op1, op2);
11949 FreeExpContents(exp);
11950 op1->ops.Div(exp, op1, op2);
11956 FreeExpContents(exp);
11957 op1->ops.Mod(exp, op1, op2);
11961 if(exp->__anon1.op.exp2)
11963 if(op1->ops.BitAnd)
11965 FreeExpContents(exp);
11966 op1->ops.BitAnd(exp, op1, op2);
11973 FreeExpContents(exp);
11974 op1->ops.BitOr(exp, op1, op2);
11978 if(op1->ops.BitXor)
11980 FreeExpContents(exp);
11981 op1->ops.BitXor(exp, op1, op2);
11985 if(op1->ops.LShift)
11987 FreeExpContents(exp);
11988 op1->ops.LShift(exp, op1, op2);
11992 if(op1->ops.RShift)
11994 FreeExpContents(exp);
11995 op1->ops.RShift(exp, op1, op2);
12001 FreeExpContents(exp);
12002 op1->ops.Equ(exp, op1, op2);
12008 FreeExpContents(exp);
12009 op1->ops.Nqu(exp, op1, op2);
12015 FreeExpContents(exp);
12016 op1->ops.And(exp, op1, op2);
12022 FreeExpContents(exp);
12023 op1->ops.Or(exp, op1, op2);
12029 FreeExpContents(exp);
12030 op1->ops.Grt(exp, op1, op2);
12036 FreeExpContents(exp);
12037 op1->ops.Sma(exp, op1, op2);
12041 if(op1->ops.GrtEqu)
12043 FreeExpContents(exp);
12044 op1->ops.GrtEqu(exp, op1, op2);
12048 if(op1->ops.SmaEqu)
12050 FreeExpContents(exp);
12051 op1->ops.SmaEqu(exp, op1, op2);
12059 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
12061 extern struct Expression * MkExpIdentifier(struct Identifier * id);
12063 void ComputeExpression(struct Expression * exp)
12069 ComputeInstantiation(exp);
12074 struct Expression * exp1, * exp2 = (((void *)0));
12075 struct Operand op1 =
12082 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
12085 struct Operand op2 =
12092 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
12096 if(exp->__anon1.op.exp2)
12098 struct Expression * e = exp->__anon1.op.exp2;
12100 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
12102 if(e->type == 5 || e->type == 32 || e->type == 23)
12105 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12107 e = (*e->__anon1.list).last;
12110 if(exp->__anon1.op.op == 261 && e && e->expType)
12112 if(e->type == 3 && e->__anon1.__anon2.string)
12114 char * string = e->__anon1.__anon2.string;
12115 int len = strlen(string);
12116 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
12118 len = UnescapeString(tmp, string + 1, len - 2);
12119 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
12120 FreeExpContents(exp);
12122 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
12126 struct Type * type = e->expType;
12129 FreeExpContents(exp);
12131 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12137 ComputeExpression(exp->__anon1.op.exp2);
12139 if(exp->__anon1.op.exp1)
12141 ComputeExpression(exp->__anon1.op.exp1);
12142 exp1 = exp->__anon1.op.exp1;
12143 exp2 = exp->__anon1.op.exp2;
12144 op1 = GetOperand(exp1);
12146 op1.type->refCount++;
12149 op2 = GetOperand(exp2);
12151 op2.type->refCount++;
12156 exp1 = exp->__anon1.op.exp2;
12157 op1 = GetOperand(exp1);
12159 op1.type->refCount++;
12161 CallOperator(exp, exp1, exp2, &op1, &op2);
12163 FreeType(op1.type);
12165 FreeType(op2.type);
12171 struct Expression * e, * n;
12173 for(e = (*exp->__anon1.list).first; e; e = n)
12178 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
12179 struct Expression * prev = exp->prev;
12180 struct Expression * next = exp->next;
12182 ComputeExpression(e);
12183 FreeType(exp->expType);
12184 FreeType(exp->destType);
12188 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
12189 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
12200 struct Expression * memberExp = exp->__anon1.member.exp;
12201 struct Identifier * memberID = exp->__anon1.member.member;
12202 struct Type * type;
12204 ComputeExpression(exp->__anon1.member.exp);
12205 type = exp->__anon1.member.exp->expType;
12208 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)));
12209 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
12210 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
12211 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
12213 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
12214 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
12218 struct Symbol * classSym;
12221 PrintTypeNoConst(type, string, 0, 1);
12222 classSym = FindClass(string);
12223 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12225 if(exp->__anon1.member.member)
12227 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
12229 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
12231 if(!prop && !member && _class && exp->__anon1.member.member)
12233 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
12235 convertTo = _class;
12236 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12237 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
12243 struct Type * type = prop->dataType;
12245 if(_class->type == 3)
12247 if(type->kind == 8)
12249 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12251 if(_class->type == 3)
12253 if(!_class->dataType)
12254 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12255 type = _class->dataType;
12263 float (* Get)(float) = (void *)prop->Get;
12265 GetFloat(exp->__anon1.member.exp, &value);
12266 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
12273 double (* Get)(double);
12275 GetDouble(exp->__anon1.member.exp, &value);
12277 Get = (void *)prop->Set;
12279 Get = (void *)prop->Get;
12280 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
12290 struct Expression * value = exp->__anon1.member.exp;
12291 struct Type * type;
12293 if(!prop->dataType)
12294 ProcessPropertyType(prop);
12295 type = prop->dataType;
12299 else if(_class->type == 1)
12305 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12307 if(propertyClass->type == 1 && value->type == 1)
12309 void (* Set)(void *, void *) = (void *)prop->Set;
12311 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12312 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12313 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12314 exp->__anon1.instance->loc = exp->loc;
12316 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
12317 PopulateInstance(exp->__anon1.instance);
12324 void (* Set)(void *, int) = (void *)prop->Set;
12326 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12327 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12328 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12329 exp->__anon1.instance->loc = exp->loc;
12331 GetInt(value, &intValue);
12332 Set(exp->__anon1.instance->data, intValue);
12333 PopulateInstance(exp->__anon1.instance);
12338 long long intValue;
12339 void (* Set)(void *, long long) = (void *)prop->Set;
12341 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12342 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12343 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12344 exp->__anon1.instance->loc = exp->loc;
12346 GetInt64(value, &intValue);
12347 Set(exp->__anon1.instance->data, intValue);
12348 PopulateInstance(exp->__anon1.instance);
12354 void (* Set)(void *, intptr_t) = (void *)prop->Set;
12356 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12357 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12358 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12359 exp->__anon1.instance->loc = exp->loc;
12361 GetIntPtr(value, &intValue);
12362 Set(exp->__anon1.instance->data, intValue);
12363 PopulateInstance(exp->__anon1.instance);
12369 void (* Set)(void *, ssize_t) = (void *)prop->Set;
12371 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12372 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12373 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12374 exp->__anon1.instance->loc = exp->loc;
12376 GetIntSize(value, &intValue);
12377 Set(exp->__anon1.instance->data, intValue);
12378 PopulateInstance(exp->__anon1.instance);
12384 void (* Set)(void *, float) = (void *)prop->Set;
12386 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12387 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12388 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12389 exp->__anon1.instance->loc = exp->loc;
12391 GetFloat(value, &floatValue);
12392 Set(exp->__anon1.instance->data, floatValue);
12393 PopulateInstance(exp->__anon1.instance);
12398 double doubleValue;
12399 void (* Set)(void *, double) = (void *)prop->Set;
12401 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12402 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12403 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12404 exp->__anon1.instance->loc = exp->loc;
12406 GetDouble(value, &doubleValue);
12407 Set(exp->__anon1.instance->data, doubleValue);
12408 PopulateInstance(exp->__anon1.instance);
12413 else if(_class->type == 2)
12419 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12421 if(propertyClass->type == 1 && value->__anon1.instance->data)
12423 unsigned int (* Set)(void *) = (void *)prop->Set;
12424 unsigned int bits = Set(value->__anon1.instance->data);
12426 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12430 else if(_class->type == 2)
12432 unsigned int value;
12433 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
12436 GetUInt(exp->__anon1.member.exp, &value);
12438 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12447 if(_class->type == 2)
12449 unsigned int value;
12451 GetUInt(exp->__anon1.member.exp, &value);
12456 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12458 if(_class->type == 1)
12460 void (* Get)(unsigned int, void *) = (void *)prop->Get;
12462 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12463 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12464 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12465 exp->__anon1.instance->loc = exp->loc;
12467 Get(value, exp->__anon1.instance->data);
12468 PopulateInstance(exp->__anon1.instance);
12470 else if(_class->type == 2)
12472 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
12473 uint64 bits = Get(value);
12475 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
12482 else if(_class->type == 1)
12484 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
12490 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12492 if(_class->type == 1 && value)
12494 void (* Get)(void *, void *) = (void *)prop->Get;
12496 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12497 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12498 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12499 exp->__anon1.instance->loc = exp->loc;
12501 Get(value, exp->__anon1.instance->data);
12502 PopulateInstance(exp->__anon1.instance);
12513 exp->isConstant = 0;
12522 FreeExpression(memberExp);
12523 FreeIdentifier(memberID);
12529 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
12531 FreeExpContents(exp);
12532 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12539 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
12541 if(classSym && classSym->__anon1.registered)
12543 if(classSym->__anon1.registered->fixed)
12545 FreeSpecifier(exp->__anon1._class);
12546 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
12551 char className[1024];
12553 strcpy(className, "__ecereClass_");
12554 FullClassNameCat(className, classSym->string, 1);
12555 DeclareClass(classSym, className);
12556 FreeExpContents(exp);
12558 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
12559 exp->__anon1.member.member = MkIdentifier("structSize");
12566 struct Type * type;
12567 struct Expression * e = exp;
12569 if(exp->type == 11)
12571 if(exp->__anon1.cast.exp)
12572 ComputeExpression(exp->__anon1.cast.exp);
12573 e = exp->__anon1.cast.exp;
12575 if(e && exp->expType)
12577 type = exp->expType;
12578 if(type->kind == 8)
12580 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12582 if(_class && (_class->type == 3 || _class->type == 2))
12584 if(!_class->dataType)
12585 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12586 type = _class->dataType;
12595 char value = (char)0;
12597 if(GetChar(e, &value))
12599 FreeExpContents(exp);
12600 exp->__anon1.__anon1.constant = PrintChar(value);
12606 unsigned char value = (unsigned char)0;
12608 if(GetUChar(e, &value))
12610 FreeExpContents(exp);
12611 exp->__anon1.__anon1.constant = PrintUChar(value);
12619 short value = (short)0;
12621 if(GetShort(e, &value))
12623 FreeExpContents(exp);
12624 exp->__anon1.__anon1.constant = PrintShort(value);
12630 unsigned short value = (unsigned short)0;
12632 if(GetUShort(e, &value))
12634 FreeExpContents(exp);
12635 exp->__anon1.__anon1.constant = PrintUShort(value);
12645 if(GetInt(e, &value))
12647 FreeExpContents(exp);
12648 exp->__anon1.__anon1.constant = PrintInt(value);
12654 unsigned int value = 0;
12656 if(GetUInt(e, &value))
12658 FreeExpContents(exp);
12659 exp->__anon1.__anon1.constant = PrintUInt(value);
12667 long long value = 0;
12669 if(GetInt64(e, &value))
12671 FreeExpContents(exp);
12672 exp->__anon1.__anon1.constant = PrintInt64(value);
12680 if(GetUInt64(e, &value))
12682 FreeExpContents(exp);
12683 exp->__anon1.__anon1.constant = PrintUInt64(value);
12691 intptr_t value = 0;
12693 if(GetIntPtr(e, &value))
12695 FreeExpContents(exp);
12696 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12702 uintptr_t value = 0;
12704 if(GetUIntPtr(e, &value))
12706 FreeExpContents(exp);
12707 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12717 if(GetIntSize(e, &value))
12719 FreeExpContents(exp);
12720 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12728 if(GetUIntSize(e, &value))
12730 FreeExpContents(exp);
12731 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12740 if(GetFloat(e, &value))
12742 FreeExpContents(exp);
12743 exp->__anon1.__anon1.constant = PrintFloat(value);
12752 if(GetDouble(e, &value))
12754 FreeExpContents(exp);
12755 exp->__anon1.__anon1.constant = PrintDouble(value);
12766 struct Operand op1 =
12773 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
12776 struct Operand op2 =
12783 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
12786 struct Operand op3 =
12793 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
12797 if(exp->__anon1.cond.exp)
12798 ComputeExpression((*exp->__anon1.cond.exp).last);
12799 if(exp->__anon1.cond.elseExp)
12800 ComputeExpression(exp->__anon1.cond.elseExp);
12801 if(exp->__anon1.cond.cond)
12802 ComputeExpression(exp->__anon1.cond.cond);
12803 op1 = GetOperand(exp->__anon1.cond.cond);
12805 op1.type->refCount++;
12806 op2 = GetOperand((*exp->__anon1.cond.exp).last);
12808 op2.type->refCount++;
12809 op3 = GetOperand(exp->__anon1.cond.elseExp);
12811 op3.type->refCount++;
12814 FreeExpContents(exp);
12815 op1.ops.Cond(exp, &op1, &op2, &op3);
12818 FreeType(op1.type);
12820 FreeType(op2.type);
12822 FreeType(op3.type);
12828 void ApplyAnyObjectLogic(struct Expression * e);
12830 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
12832 unsigned int result = 1;
12836 struct __ecereNameSpace__ecere__sys__OldList converts =
12840 struct Conversion * convert;
12842 if(destType->kind == 0)
12844 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
12848 for(convert = converts.first; convert; convert = convert->next)
12850 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
12854 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12855 int objectType = exp->expType ? exp->expType->classObjectType : 0;
12858 newExp->prev = (((void *)0));
12859 newExp->next = (((void *)0));
12860 newExp->destType = (((void *)0));
12864 exp->addedThis = 1;
12865 exp->__anon1.member.exp = newExp;
12866 FreeType(exp->__anon1.member.exp->expType);
12867 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
12868 exp->__anon1.member.exp->expType->classObjectType = objectType;
12869 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
12870 exp->__anon1.member.memberType = 1;
12871 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12874 exp->expType->refCount++;
12875 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12881 exp->addedThis = 1;
12882 exp->__anon1.member.exp = newExp;
12883 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)
12885 newExp->byReference = 1;
12887 FreeType(exp->__anon1.member.exp->expType);
12888 exp->__anon1.member.exp->expType = (((void *)0));
12889 if(convert->convert->dataType)
12891 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12892 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
12893 exp->__anon1.member.exp->expType->refCount = 1;
12894 exp->__anon1.member.exp->expType->classObjectType = objectType;
12895 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12897 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
12898 exp->__anon1.member.memberType = 4;
12899 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12901 if(convert->resultType)
12902 convert->resultType->refCount++;
12908 FreeType(exp->expType);
12911 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12912 if(exp->destType->casted)
12915 exp->expType->refCount++;
12919 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12920 if(exp->destType->casted)
12922 if(convert->resultType)
12923 convert->resultType->refCount++;
12927 if(exp->isConstant && inCompiler)
12928 ComputeExpression(exp);
12929 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
12931 if(!result && exp->expType && converts.count)
12933 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
12935 if(!result && exp->expType && exp->destType)
12937 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))
12944 extern struct Expression * GetNonBracketsExp(struct Expression * exp);
12946 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
12948 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
12950 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
12952 void CheckTemplateTypes(struct Expression * exp)
12954 struct Expression * nbExp = GetNonBracketsExp(exp);
12956 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
12958 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12959 struct Context * context;
12963 exp->destType->refCount++;
12965 exp->expType->refCount++;
12966 newExp->prev = (((void *)0));
12967 newExp->next = (((void *)0));
12968 switch(exp->expType->kind)
12971 if(exp->destType->classObjectType)
12974 exp->destType->refCount--;
12976 exp->expType->refCount--;
12977 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
12981 struct __ecereNameSpace__ecere__sys__OldList * specs;
12982 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
12983 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
12985 context = PushContext();
12986 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
12987 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
12988 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
12990 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
12991 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
12992 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
12993 exp->__anon1.compound->__anon1.compound.context = context;
12994 PopContext(context);
12999 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
13000 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13005 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
13007 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13008 struct Context * context;
13012 exp->destType->refCount++;
13014 exp->expType->refCount++;
13015 newExp->prev = (((void *)0));
13016 newExp->next = (((void *)0));
13017 switch(exp->expType->kind)
13020 if(exp->destType->classObjectType)
13023 exp->destType->refCount--;
13025 exp->expType->refCount--;
13026 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13030 struct __ecereNameSpace__ecere__sys__OldList * specs;
13031 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
13032 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
13034 context = PushContext();
13035 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
13036 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
13037 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
13039 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
13040 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
13041 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
13042 exp->__anon1.compound->__anon1.compound.context = context;
13043 PopContext(context);
13048 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
13051 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)));
13052 ProcessExpressionType((*exp->__anon1.list).first);
13058 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
13059 exp->needTemplateCast = 2;
13060 newExp->needCast = 1;
13061 newExp->needTemplateCast = 2;
13062 ProcessExpressionType((*exp->__anon1.list).first);
13068 if(exp->expType->kind == 20)
13070 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
13074 FreeType(exp->destType);
13075 FreeType(exp->expType);
13076 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13080 if(newExp->type == 8 && newExp->__anon1.member.memberType == 3)
13083 exp->__anon1.op.op = '*';
13084 exp->__anon1.op.exp1 = (((void *)0));
13085 exp->__anon1.op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '&', newExp))));
13089 char typeString[1024];
13090 struct Declarator * decl;
13091 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13093 typeString[0] = '\0';
13094 PrintType(exp->expType, typeString, 0, 0);
13095 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13097 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
13098 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13099 exp->__anon1.cast.exp->needCast = 1;
13107 extern int strncmp(const char * , const char * , size_t n);
13109 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
13111 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
13113 int nsLen = strlen(nameSpace);
13114 struct Symbol * symbol;
13116 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)))
13118 char * s = symbol->string;
13120 if(!strncmp(s, nameSpace, nsLen))
13125 for(c = strlen(s) - 1; c >= 0; c--)
13128 namePart = s + c + 1;
13129 if(!strcmp(namePart, name))
13137 return (((void *)0));
13140 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
13143 char nameSpace[1024];
13144 const char * namePart;
13145 unsigned int gotColon = 0;
13147 nameSpace[0] = '\0';
13148 for(c = strlen(name) - 1; c >= 0; c--)
13154 namePart = name + c + 1;
13155 while(c >= 0 && name[c] == ':')
13159 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
13163 memcpy(nameSpace, name, c + 1);
13164 nameSpace[c + 1] = (char)0;
13165 return ScanWithNameSpace(tree, nameSpace, namePart);
13169 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13175 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13179 return ScanWithNameSpace(tree, "", namePart);
13181 return (((void *)0));
13184 static void ProcessDeclaration(struct Declaration * decl);
13186 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
13188 struct Context * ctx;
13189 struct Symbol * symbol = (((void *)0));
13191 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
13193 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
13195 symbol = (((void *)0));
13198 char curName[1024];
13200 strcpy(curName, thisNameSpace);
13201 strcat(curName, "::");
13202 strcat(curName, name);
13203 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
13206 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
13209 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
13210 if(symbol || ctx == endContext)
13213 if(inCompiler && curExternal && symbol && ctx == globalContext && curExternal->symbol && symbol->id > curExternal->symbol->idCode && symbol->__anon2.__anon1.pointerExternal)
13215 if(symbol->__anon2.__anon1.pointerExternal->type == 0)
13217 struct FunctionDefinition * function = symbol->__anon2.__anon1.pointerExternal->__anon1.function;
13218 struct Context * tmpContext = curContext;
13220 curContext = (((void *)0));
13221 symbol->__anon2.__anon1.pointerExternal = MkExternalDeclaration(MkDeclaration(CopyList(function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(function->declarator), (((void *)0))))));
13222 curContext = tmpContext;
13223 symbol->__anon2.__anon1.pointerExternal->symbol = symbol;
13224 DeclareType(symbol->type, 1, 1);
13225 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, symbol->__anon2.__anon1.pointerExternal);
13226 symbol->id = curExternal->symbol->idCode;
13228 else if(symbol->__anon2.__anon1.pointerExternal->type == 1 && curExternal->symbol->idCode < symbol->__anon2.__anon1.pointerExternal->symbol->id)
13230 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
13231 symbol->id = curExternal->symbol->idCode;
13237 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
13239 if(!type->isSigned && type->kind != 22 && type->kind != 23)
13240 ListAdd(specs, MkSpecifier(UNSIGNED));
13245 if(type->__anon1._class->__anon1.registered)
13247 if(!type->__anon1._class->__anon1.registered->dataType)
13248 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
13249 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
13254 ListAdd(specs, MkSpecifier(DOUBLE));
13257 ListAdd(specs, MkSpecifier(FLOAT));
13260 ListAdd(specs, MkSpecifier(CHAR));
13263 ListAdd(specs, MkSpecifier(_BOOL));
13266 ListAdd(specs, MkSpecifier(SHORT));
13269 ListAdd(specs, MkSpecifier(INT64));
13272 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
13275 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
13279 ListAdd(specs, MkSpecifier(INT));
13284 static void PrintArraySize(struct Type * arrayType, char * string)
13290 if(arrayType->__anon1.__anon4.enumClass)
13291 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
13292 else if(arrayType->__anon1.__anon4.arraySizeExp)
13293 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
13295 strcat(string, size);
13298 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
13302 if(printConst && type->constant)
13303 strcat(string, "const ");
13308 struct Symbol * c = type->__anon1._class;
13310 if(type->classObjectType == 2)
13311 strcat(string, "typed_object");
13312 else if(type->classObjectType == 3)
13313 strcat(string, "any_object");
13317 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
13319 if(type->byReference)
13320 strcat(string, " &");
13324 strcat(string, "void");
13327 strcat(string, type->isSigned ? "int" : "uint");
13330 strcat(string, type->isSigned ? "int64" : "uint64");
13333 strcat(string, type->isSigned ? "intptr" : "uintptr");
13336 strcat(string, type->isSigned ? "intsize" : "uintsize");
13339 strcat(string, type->isSigned ? "char" : "byte");
13342 strcat(string, "_Bool");
13345 strcat(string, type->isSigned ? "short" : "uint16");
13348 strcat(string, "float");
13351 strcat(string, "double");
13354 if(type->__anon1.__anon1.enumName)
13356 strcat(string, "struct ");
13357 strcat(string, type->__anon1.__anon1.enumName);
13359 else if(type->typeName)
13360 strcat(string, type->typeName);
13363 struct Type * member;
13365 strcat(string, "struct { ");
13366 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
13368 PrintType(member, string, 1, fullName);
13369 strcat(string, "; ");
13371 strcat(string, "}");
13375 if(type->__anon1.__anon1.enumName)
13377 strcat(string, "union ");
13378 strcat(string, type->__anon1.__anon1.enumName);
13380 else if(type->typeName)
13381 strcat(string, type->typeName);
13384 strcat(string, "union ");
13385 strcat(string, "(unnamed)");
13389 if(type->__anon1.__anon1.enumName)
13391 strcat(string, "enum ");
13392 strcat(string, type->__anon1.__anon1.enumName);
13394 else if(type->typeName)
13395 strcat(string, type->typeName);
13397 strcat(string, "int");
13400 strcat(string, "...");
13403 strcat(string, "subclass(");
13404 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
13405 strcat(string, ")");
13408 strcat(string, type->__anon1.templateParameter->identifier->string);
13411 strcat(string, "thisclass");
13414 strcat(string, "__builtin_va_list");
13420 extern char * __ecereNameSpace__ecere__sys__RSearchString(const char * buffer, const char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
13422 static void PrintName(struct Type * type, char * string, unsigned int fullName)
13424 if(type->name && type->name[0])
13427 strcat(string, type->name);
13430 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
13436 strcat(string, name);
13441 static void PrintAttribs(struct Type * type, char * string)
13445 if(type->dllExport)
13446 strcat(string, "dllexport ");
13447 if(type->attrStdcall)
13448 strcat(string, "stdcall ");
13452 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
13454 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13456 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
13457 PrintAttribs(type, string);
13458 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
13459 strcat(string, " const");
13460 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
13461 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13462 strcat(string, " (");
13463 if(type->kind == 13)
13465 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
13466 PrintAttribs(type->__anon1.type, string);
13468 if(type->kind == 13)
13470 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
13471 strcat(string, "*");
13473 strcat(string, " *");
13475 if(printConst && type->constant && type->kind == 13)
13476 strcat(string, " const");
13479 PrintTypeSpecs(type, string, fullName, printConst);
13482 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
13484 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13485 strcat(string, ")");
13486 if(type->kind == 12)
13487 PrintArraySize(type, string);
13488 else if(type->kind == 11)
13490 struct Type * param;
13492 strcat(string, "(");
13493 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
13495 PrintType(param, string, 1, fullName);
13497 strcat(string, ", ");
13499 strcat(string, ")");
13501 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13502 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
13505 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
13507 PrePrintType(type, string, fullName, (((void *)0)), printConst);
13508 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
13509 strcat(string, " ");
13510 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
13512 struct Symbol * _class = type->__anon1.__anon2.thisClass;
13514 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
13516 if(type->classObjectType == 1)
13517 strcat(string, "class");
13519 strcat(string, type->byReference ? "typed_object&" : "typed_object");
13521 else if(_class && _class->string)
13523 char * s = _class->string;
13529 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
13535 strcat(string, name);
13538 strcat(string, "::");
13540 if(printName && type->name)
13541 PrintName(type, string, fullName);
13542 PostPrintType(type, string, fullName);
13543 if(type->bitFieldCount)
13547 sprintf(count, ":%d", type->bitFieldCount);
13548 strcat(string, count);
13552 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13554 _PrintType(type, string, printName, fullName, 1);
13557 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13559 _PrintType(type, string, printName, fullName, 0);
13562 static struct Type * FindMember(struct Type * type, char * string)
13564 struct Type * memberType;
13566 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13568 if(!memberType->name)
13570 struct Type * subType = FindMember(memberType, string);
13575 else if(!strcmp(memberType->name, string))
13578 return (((void *)0));
13581 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
13583 struct Type * memberType;
13585 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13587 if(!memberType->name)
13589 struct Type * subType = FindMember(memberType, string);
13593 *offset += memberType->offset;
13597 else if(!strcmp(memberType->name, string))
13599 *offset += memberType->offset;
13603 return (((void *)0));
13606 extern unsigned int parseError;
13608 unsigned int GetParseError()
13613 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
13615 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
13617 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
13619 struct Expression * ParseExpressionString(char * expression)
13622 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
13623 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
13624 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13626 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13627 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
13628 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
13629 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13631 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13632 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
13634 parsedExpression = (((void *)0));
13636 expression_yyparse();
13637 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
13638 return parsedExpression;
13641 extern char * QMkString(const char * source);
13643 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
13645 struct Identifier * id = exp->__anon1.__anon1.identifier;
13646 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
13647 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13648 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13649 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
13651 if(_class && _class->type == 4)
13653 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
13654 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13658 struct __ecereNameSpace__ecere__com__Class * baseClass;
13660 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
13662 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13664 for(value = e->values.first; value; value = value->next)
13666 if(!strcmp(value->name, id->string))
13671 char constant[256];
13673 FreeExpContents(exp);
13675 exp->isConstant = 1;
13676 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
13677 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13679 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
13680 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13681 exp->expType = MkClassType(baseClass->fullName);
13689 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
13691 ProcessMethodType(method);
13692 exp->expType = __extension__ ({
13693 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13695 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
13699 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
13701 if(!prop->dataType)
13702 ProcessPropertyType(prop);
13703 exp->expType = prop->dataType;
13705 prop->dataType->refCount++;
13708 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
13710 if(!member->dataType)
13711 member->dataType = ProcessTypeString(member->dataTypeString, 0);
13712 exp->expType = member->dataType;
13713 if(member->dataType)
13714 member->dataType->refCount++;
13717 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
13719 if(!classProp->dataType)
13720 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
13721 if(classProp->constant)
13723 FreeExpContents(exp);
13724 exp->isConstant = 1;
13725 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
13728 exp->__anon1.__anon1.constant = QMkString((char *)classProp->Get(_class));
13732 char constant[256];
13735 sprintf(constant, "%d", (int)classProp->Get(_class));
13736 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13742 exp->expType = classProp->dataType;
13743 if(classProp->dataType)
13744 classProp->dataType->refCount++;
13750 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
13752 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
13753 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
13754 struct __ecereNameSpace__ecere__com__NameSpace * child;
13758 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)))
13760 data = ScanGlobalData(child, name);
13768 extern struct __ecereNameSpace__ecere__com__NameSpace * globalData;
13770 extern char * strncpy(char * , const char * , size_t n);
13772 static struct GlobalData * FindGlobalData(char * name)
13775 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
13777 nameSpace = globalData;
13778 for(c = 0; name[c]; c++)
13780 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
13782 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
13783 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
13785 strncpy(spaceName, name + start, c - start);
13786 spaceName[c - start] = '\0';
13787 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
13788 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
13790 return (((void *)0));
13791 nameSpace = newSpace;
13799 return ScanGlobalData(nameSpace, name + start);
13801 return (((void *)0));
13804 static int definedExpStackPos;
13806 static void * definedExpStack[512];
13808 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
13810 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
13812 FreeExpContents(checkedExp);
13813 FreeType(checkedExp->expType);
13814 FreeType(checkedExp->destType);
13815 *checkedExp = *newExp;
13816 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13817 checkedExp->prev = prev;
13818 checkedExp->next = next;
13821 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
13823 extern int printf(const char * , ...);
13825 void __ecereMethod_Expression_Clear();
13827 void ApplyAnyObjectLogic(struct Expression * e)
13829 struct Type * destType = e->destType;
13831 if(destType && (destType->classObjectType == 3))
13833 if(e && e->expType)
13835 struct Type * type = e->expType;
13836 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
13838 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
13840 _class = type->__anon1._class->__anon1.registered;
13842 else if(type->kind == 19)
13844 _class = FindClass("ecere::com::Class")->__anon1.registered;
13848 char string[1024] = "";
13849 struct Symbol * classSym;
13851 PrintTypeNoConst(type, string, 0, 1);
13852 classSym = FindClass(string);
13854 _class = classSym->__anon1.registered;
13856 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)))
13858 if(!_class || strcmp(_class->fullName, "char *"))
13860 struct Expression * checkedExp = e, * newExp;
13862 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
13864 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
13866 if(checkedExp->type == 23)
13868 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13871 checkedExp = (*checkedExp->__anon1.list).last;
13873 else if(checkedExp->type == 11)
13874 checkedExp = checkedExp->__anon1.cast.exp;
13876 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
13878 newExp = checkedExp->__anon1.op.exp2;
13879 checkedExp->__anon1.op.exp2 = (((void *)0));
13880 FreeExpContents(checkedExp);
13881 if(e->expType && e->expType->passAsTemplate)
13885 ComputeTypeSize(e->expType);
13886 sprintf(size, "%d", e->expType->size);
13887 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))))));
13889 ReplaceExpContents(checkedExp, newExp);
13890 e->byReference = 1;
13892 else if(!e->byReference || (_class && _class->type == 5))
13894 struct Expression * checkedExp;
13897 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;
13899 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
13901 struct Context * context = PushContext();
13902 struct Declarator * decl;
13903 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13904 char typeString[1024];
13905 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13907 typeString[0] = '\0';
13909 newExp->prev = (((void *)0));
13910 newExp->next = (((void *)0));
13911 newExp->expType = (((void *)0));
13912 PrintTypeNoConst(e->expType, typeString, 0, 1);
13913 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13914 newExp->destType = ProcessType(specs, decl);
13915 curContext = context;
13919 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
13922 sprintf(name, "__internalValue%03X", internalValueCounter++);
13923 if(!curCompound->__anon1.compound.declarations)
13924 curCompound->__anon1.compound.declarations = MkList();
13925 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
13926 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
13927 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
13928 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
13931 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
13933 struct Type * type = e->destType;
13935 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13936 CopyTypeInto(e->destType, type);
13937 e->destType->refCount = 1;
13938 e->destType->classObjectType = 0;
13941 e->__anon1.compound->__anon1.compound.context = context;
13942 PopContext(context);
13943 curContext = context->parent;
13947 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
13949 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
13951 if(checkedExp->type == 23)
13953 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13956 checkedExp = (*checkedExp->__anon1.list).last;
13958 else if(checkedExp->type == 11)
13959 checkedExp = checkedExp->__anon1.cast.exp;
13962 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13964 *operand = *checkedExp;
13965 __ecereMethod_Expression_Clear(checkedExp);
13966 checkedExp->destType = ProcessTypeString("void *", 0);
13967 checkedExp->expType = checkedExp->destType;
13968 checkedExp->destType->refCount++;
13969 checkedExp->type = 4;
13970 checkedExp->__anon1.op.op = '&';
13971 checkedExp->__anon1.op.exp1 = (((void *)0));
13972 checkedExp->__anon1.op.exp2 = operand;
13981 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))))
13983 if(e->expType->classObjectType && destType && destType->classObjectType)
13989 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13992 thisExp->prev = (((void *)0));
13993 thisExp->next = (((void *)0));
13994 __ecereMethod_Expression_Clear(e);
13996 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
13997 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
13998 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
14000 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14001 CopyTypeInto(e->expType, thisExp->expType);
14002 e->expType->byReference = 0;
14003 e->expType->refCount = 1;
14004 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))
14006 e->expType->classObjectType = 0;
14011 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
14013 if(destType->kind == 14)
14015 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
14017 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))
14019 unsigned int byReference = e->expType->byReference;
14020 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14021 struct Declarator * decl;
14022 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14023 char typeString[1024];
14024 struct Type * type;
14025 int backupClassObjectType;
14026 unsigned int backupByReference;
14028 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
14032 backupClassObjectType = type->classObjectType;
14033 backupByReference = type->byReference;
14034 type->classObjectType = 0;
14035 type->byReference = 0;
14036 typeString[0] = '\0';
14037 PrintType(type, typeString, 0, 1);
14038 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
14039 type->classObjectType = backupClassObjectType;
14040 type->byReference = backupByReference;
14042 thisExp->prev = (((void *)0));
14043 thisExp->next = (((void *)0));
14044 __ecereMethod_Expression_Clear(e);
14045 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)))
14048 e->__anon1.op.op = '*';
14049 e->__anon1.op.exp1 = (((void *)0));
14050 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
14051 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14052 CopyTypeInto(e->expType, type);
14053 e->expType->byReference = 0;
14054 e->expType->refCount = 1;
14059 e->__anon1.cast.typeName = MkTypeName(specs, decl);
14060 e->__anon1.cast.exp = thisExp;
14061 e->byReference = 1;
14065 e->destType = destType;
14066 destType->refCount++;
14071 void ApplyLocation(struct Expression * exp, struct Location * loc)
14077 if(exp->__anon1.op.exp1)
14078 ApplyLocation(exp->__anon1.op.exp1, loc);
14079 if(exp->__anon1.op.exp2)
14080 ApplyLocation(exp->__anon1.op.exp2, loc);
14083 if(exp->__anon1.list)
14085 struct Expression * e;
14087 for(e = (*exp->__anon1.list).first; e; e = e->next)
14088 ApplyLocation(e, loc);
14092 if(exp->__anon1.index.index)
14094 struct Expression * e;
14096 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
14097 ApplyLocation(e, loc);
14099 if(exp->__anon1.index.exp)
14100 ApplyLocation(exp->__anon1.index.exp, loc);
14103 if(exp->__anon1.call.arguments)
14105 struct Expression * arg;
14107 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
14108 ApplyLocation(arg, loc);
14110 if(exp->__anon1.call.exp)
14111 ApplyLocation(exp->__anon1.call.exp, loc);
14115 if(exp->__anon1.member.exp)
14116 ApplyLocation(exp->__anon1.member.exp, loc);
14119 if(exp->__anon1.cast.exp)
14120 ApplyLocation(exp->__anon1.cast.exp, loc);
14123 if(exp->__anon1.cond.exp)
14125 struct Expression * e;
14127 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
14128 ApplyLocation(e, loc);
14130 if(exp->__anon1.cond.cond)
14131 ApplyLocation(exp->__anon1.cond.cond, loc);
14132 if(exp->__anon1.cond.elseExp)
14133 ApplyLocation(exp->__anon1.cond.elseExp, loc);
14136 if(exp->__anon1.vaArg.exp)
14137 ApplyLocation(exp->__anon1.vaArg.exp, loc);
14144 extern char * strstr(const char * , const char * );
14146 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
14148 struct __ecereNameSpace__ecere__com__DefinedExpression
14150 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
14151 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
14153 const char * value;
14154 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
14155 } __attribute__ ((gcc_struct));
14157 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14159 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14161 extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char * string, int * numBytes);
14163 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
14165 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
14167 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * decl);
14169 static void ProcessStatement(struct Statement * stmt);
14171 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
14173 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
14175 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
14177 extern const char * sourceFile;
14179 extern unsigned int IsVoidPtrCast(struct TypeName * typeName);
14181 extern struct Expression * MoveExpContents(struct Expression * exp);
14183 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
14185 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
14187 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
14189 void ProcessExpressionType(struct Expression * exp)
14191 unsigned int unresolved = 0;
14192 struct Location oldyylloc = yylloc;
14193 unsigned int notByReference = 0;
14195 if(!exp || exp->expType)
14202 struct Identifier * id = exp->__anon1.__anon1.identifier;
14204 if(!id || !topContext)
14206 if(id->_class && id->_class->__anon1.__anon1.name)
14208 id->classSym = id->_class->__anon1.__anon1.symbol;
14210 if(!strcmp(id->string, "__runtimePlatform"))
14212 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
14215 else if(strstr(id->string, "__ecereClass") == id->string)
14217 exp->expType = ProcessTypeString("ecere::com::Class", 1);
14220 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
14222 ReplaceClassMembers(exp, thisClass);
14225 ProcessExpressionType(exp);
14228 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
14233 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14237 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
14243 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
14246 ProcessExpressionType(exp);
14250 else if(currentClass && !id->_class)
14252 if(ResolveIdWithClass(exp, currentClass, 1))
14255 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14260 struct Type * type = symbol->type;
14261 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
14263 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
14265 struct Context * context = SetupTemplatesContext(_class);
14267 type = ReplaceThisClassType(_class);
14268 FinishTemplatesContext(context);
14270 type->refCount = 0;
14272 FreeSpecifier(id->_class);
14273 id->_class = (((void *)0));
14274 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14275 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
14276 id->classSym = (((void *)0));
14277 exp->expType = type;
14280 if(type && (type->kind == 15))
14281 exp->isConstant = 1;
14282 if(symbol->isParam || !strcmp(id->string, "this"))
14284 if(_class && _class->type == 1 && !type->declaredWithStruct)
14285 exp->byReference = 1;
14287 if(symbol->isIterator)
14289 if(symbol->isIterator == 3)
14292 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
14293 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
14294 exp->expType = (((void *)0));
14295 ProcessExpressionType(exp);
14297 else if(symbol->isIterator != 4)
14300 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
14301 exp->__anon1.member.exp->expType = exp->expType;
14302 exp->__anon1.member.member = MkIdentifier("data");
14303 exp->expType = (((void *)0));
14304 ProcessExpressionType(exp);
14311 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
14313 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14317 strcpy(name, thisNameSpace);
14318 strcat(name, "::");
14319 strcat(name, id->string);
14320 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
14323 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
14328 for(c = 0; c < definedExpStackPos; c++)
14329 if(definedExpStack[c] == definedExp)
14331 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
14333 struct Location backupYylloc = yylloc;
14334 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
14336 definedExpStack[definedExpStackPos++] = definedExp;
14337 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
14338 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
14339 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14341 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14342 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
14343 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
14344 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14346 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14347 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
14349 parsedExpression = (((void *)0));
14351 expression_yyparse();
14352 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
14354 fileInput = backInput;
14355 yylloc = backupYylloc;
14356 if(parsedExpression)
14358 FreeIdentifier(id);
14360 exp->__anon1.list = MkListOne(parsedExpression);
14361 ApplyLocation(parsedExpression, &yylloc);
14362 ProcessExpressionType(exp);
14363 definedExpStackPos--;
14366 definedExpStackPos--;
14372 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
14378 struct GlobalData * data = (((void *)0));
14380 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14384 strcpy(name, thisNameSpace);
14385 strcat(name, "::");
14386 strcat(name, id->string);
14387 data = FindGlobalData(name);
14390 data = FindGlobalData(id->string);
14393 DeclareGlobalData(data);
14394 exp->expType = data->dataType;
14396 data->dataType->refCount++;
14397 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14398 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
14399 FreeSpecifier(id->_class);
14400 id->_class = (((void *)0));
14405 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
14407 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14411 strcpy(name, thisNameSpace);
14412 strcat(name, "::");
14413 strcat(name, id->string);
14414 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
14417 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
14422 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14423 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
14425 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
14426 strcpy(name, "__ecereFunction_");
14427 FullClassNameCat(name, id->string, 0);
14428 if(DeclareFunction(function, name))
14430 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14431 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
14433 exp->expType = function->dataType;
14434 if(function->dataType)
14435 function->dataType->refCount++;
14436 FreeSpecifier(id->_class);
14437 id->_class = (((void *)0));
14449 if(!exp->__anon1.instance->_class)
14451 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
14453 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
14456 ProcessInstantiationType(exp->__anon1.instance);
14457 exp->isConstant = exp->__anon1.instance->isConstant;
14458 if(exp->__anon1.instance->_class)
14460 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
14468 char * constant = exp->__anon1.__anon1.constant;
14469 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
14471 exp->expType = type;
14472 if(constant[0] == '\'')
14474 if((int)((unsigned char *)constant)[1] > 127)
14477 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
14481 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
14482 exp->__anon1.__anon1.constant = PrintUInt(ch);
14484 type->__anon1._class = FindClass("unichar");
14485 type->isSigned = 0;
14490 type->isSigned = 1;
14495 char * dot = strchr(constant, '.');
14496 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
14501 exponent = strchr(constant, 'p');
14503 exponent = strchr(constant, 'P');
14507 exponent = strchr(constant, 'e');
14509 exponent = strchr(constant, 'E');
14511 if(dot || exponent)
14513 if(strchr(constant, 'f') || strchr(constant, 'F'))
14517 type->isSigned = 1;
14521 unsigned int isSigned = constant[0] == '-';
14522 char * endP = (((void *)0));
14523 long long i64 = strtoll(constant, &endP, 0);
14524 uint64 ui64 = strtoull(constant, &endP, 0);
14525 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll"));
14529 if(i64 < (((int)0x80000000)))
14534 if(ui64 > (((int)0x7fffffff)))
14536 if(ui64 > (0xffffffff))
14539 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
14543 else if(constant[0] != '0' || !constant[1])
14546 type->kind = is64Bit ? 4 : 3;
14547 type->isSigned = isSigned;
14550 exp->isConstant = 1;
14551 if(exp->destType && exp->destType->kind == 7)
14553 else if(exp->destType && exp->destType->kind == 6)
14555 else if(exp->destType && exp->destType->kind == 4)
14562 exp->isConstant = 1;
14563 exp->expType = __extension__ ({
14564 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14566 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
14567 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14569 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
14570 }), __ecereInstance2;
14576 ProcessExpressionType(exp->__anon1._new.size);
14577 exp->expType = __extension__ ({
14578 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14580 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
14582 DeclareType(exp->expType->__anon1.type, 0, 0);
14586 ProcessExpressionType(exp->__anon1._renew.size);
14587 ProcessExpressionType(exp->__anon1._renew.exp);
14588 exp->expType = __extension__ ({
14589 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14591 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
14593 DeclareType(exp->expType->__anon1.type, 0, 0);
14597 unsigned int assign = 0, boolResult = 0, boolOps = 0;
14598 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
14599 unsigned int useDestType = 0, useSideType = 0;
14600 struct Location oldyylloc = yylloc;
14601 unsigned int useSideUnit = 0;
14602 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
14603 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
14605 switch(exp->__anon1.op.op)
14659 if(exp->__anon1.op.exp1)
14666 if(exp->__anon1.op.op == '&')
14668 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
14670 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
14671 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14673 if(symbol && symbol->isIterator == 2)
14676 exp->__anon1.member.exp = exp->__anon1.op.exp2;
14677 exp->__anon1.member.member = MkIdentifier("key");
14678 exp->expType = (((void *)0));
14679 exp->__anon1.op.exp2->expType = symbol->type;
14680 symbol->type->refCount++;
14681 ProcessExpressionType(exp);
14687 if(exp->__anon1.op.exp1)
14689 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
14691 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
14693 if(exp->__anon1.op.exp1->destType)
14694 FreeType(exp->__anon1.op.exp1->destType);
14695 exp->__anon1.op.exp1->destType = exp->destType;
14696 exp->__anon1.op.exp1->opDestType = 1;
14698 exp->destType->refCount++;
14702 if(exp->__anon1.op.exp1->destType)
14703 FreeType(exp->__anon1.op.exp1->destType);
14704 exp->__anon1.op.exp1->destType = dummy;
14707 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14708 exp->__anon1.op.exp1->destType->count++;
14709 ProcessExpressionType(exp->__anon1.op.exp1);
14710 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14711 exp->__anon1.op.exp1->destType->count--;
14712 exp->__anon1.op.exp1->opDestType = 0;
14713 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)
14715 exp->__anon1.op.exp2 = MkExpConstant("1");
14716 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
14719 if(exp->__anon1.op.exp1->destType == dummy)
14722 exp->__anon1.op.exp1->destType = (((void *)0));
14724 type1 = exp->__anon1.op.exp1->expType;
14726 if(exp->__anon1.op.exp2)
14728 char expString[10240];
14730 expString[0] = '\0';
14731 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
14733 if(exp->__anon1.op.exp1)
14735 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
14736 if(exp->__anon1.op.exp1->expType)
14737 exp->__anon1.op.exp1->expType->refCount++;
14741 exp->__anon1.op.exp2->destType = exp->destType;
14742 if(!exp->__anon1.op.exp1 || exp->__anon1.op.op != '&')
14743 exp->__anon1.op.exp2->opDestType = 1;
14745 exp->destType->refCount++;
14749 exp->expType = type1;
14754 PrintExpression(exp->__anon1.op.exp2, expString);
14755 if(type1 && type1->kind == 13)
14757 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)
14758 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
14759 else if(exp->__anon1.op.op == '=')
14761 if(exp->__anon1.op.exp2->destType)
14762 FreeType(exp->__anon1.op.exp2->destType);
14763 exp->__anon1.op.exp2->destType = type1;
14770 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)
14774 if(exp->__anon1.op.exp2->destType)
14775 FreeType(exp->__anon1.op.exp2->destType);
14776 exp->__anon1.op.exp2->destType = type1;
14783 exp->expType = type1;
14785 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
14787 if(exp->__anon1.op.exp2->destType)
14788 FreeType(exp->__anon1.op.exp2->destType);
14789 exp->__anon1.op.exp2->destType = exp->destType;
14790 if(exp->__anon1.op.op != '&')
14791 exp->__anon1.op.exp2->opDestType = 1;
14793 exp->destType->refCount++;
14797 if(exp->__anon1.op.exp2->destType)
14798 FreeType(exp->__anon1.op.exp2->destType);
14799 exp->__anon1.op.exp2->destType = dummy;
14802 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))
14804 FreeType(exp->__anon1.op.exp2->destType);
14805 exp->__anon1.op.exp2->destType = type1;
14808 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14809 exp->__anon1.op.exp2->destType->count++;
14810 if(exp->__anon1.op.op == SIZEOF)
14812 struct Expression * e = exp->__anon1.op.exp2;
14814 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
14816 if(e->type == 5 || e->type == 32 || e->type == 23)
14819 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
14821 e = (*e->__anon1.list).last;
14824 if(e->type == 11 && e->__anon1.cast.exp)
14825 e->__anon1.cast.exp->needCast = 1;
14827 ProcessExpressionType(exp->__anon1.op.exp2);
14828 exp->__anon1.op.exp2->opDestType = 0;
14829 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14830 exp->__anon1.op.exp2->destType->count--;
14831 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
14833 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)
14835 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
14836 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
14838 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)))
14840 if(exp->__anon1.op.op == ADD_ASSIGN)
14841 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14843 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))
14845 if(exp->__anon1.op.op == ADD_ASSIGN)
14846 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14848 else if(inCompiler)
14850 char type1String[1024];
14851 char type2String[1024];
14853 type1String[0] = '\0';
14854 type2String[0] = '\0';
14855 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
14856 PrintType(type1, type2String, 0, 1);
14857 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
14858 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
14861 if(exp->__anon1.op.exp2->destType == dummy)
14864 exp->__anon1.op.exp2->destType = (((void *)0));
14866 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
14868 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14869 type2->refCount = 1;
14870 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
14871 type2->isSigned = 1;
14873 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))
14875 type2 = __extension__ ({
14876 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14878 __ecereInstance1->kind = 3, __ecereInstance1;
14880 type2->refCount = 1;
14881 type2->isSigned = 1;
14885 type2 = exp->__anon1.op.exp2->expType;
14891 if(exp->__anon1.op.op == SIZEOF)
14893 exp->expType = __extension__ ({
14894 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14896 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
14898 exp->isConstant = 1;
14900 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
14902 exp->expType = Dereference(type2);
14903 if(type2 && type2->kind == 8)
14904 notByReference = 1;
14906 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
14907 exp->expType = Reference(type2);
14912 if(exp->__anon1.op.exp1)
14914 if(exp->__anon1.op.exp1->destType)
14915 FreeType(exp->__anon1.op.exp1->destType);
14916 exp->__anon1.op.exp1->destType = MkClassType("bool");
14917 exp->__anon1.op.exp1->destType->truth = 1;
14918 if(!exp->__anon1.op.exp1->expType)
14919 ProcessExpressionType(exp->__anon1.op.exp1);
14921 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
14922 FreeType(exp->__anon1.op.exp1->expType);
14923 exp->__anon1.op.exp1->expType = MkClassType("bool");
14924 exp->__anon1.op.exp1->expType->truth = 1;
14926 if(exp->__anon1.op.exp2)
14928 if(exp->__anon1.op.exp2->destType)
14929 FreeType(exp->__anon1.op.exp2->destType);
14930 exp->__anon1.op.exp2->destType = MkClassType("bool");
14931 exp->__anon1.op.exp2->destType->truth = 1;
14932 if(!exp->__anon1.op.exp2->expType)
14933 ProcessExpressionType(exp->__anon1.op.exp2);
14935 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
14936 FreeType(exp->__anon1.op.exp2->expType);
14937 exp->__anon1.op.exp2->expType = MkClassType("bool");
14938 exp->__anon1.op.exp2->expType->truth = 1;
14941 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")))))
14943 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"))))
14945 if(exp->__anon1.op.op == '-' && ((type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4) || (type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)))
14947 struct Type * intType;
14949 if(!type1->__anon1._class->__anon1.registered->dataType)
14950 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
14951 if(!type2->__anon1._class->__anon1.registered->dataType)
14952 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
14953 intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
14954 if(exp->__anon1.op.exp1->destType)
14955 FreeType(exp->__anon1.op.exp1->destType);
14956 if(exp->__anon1.op.exp2->destType)
14957 FreeType(exp->__anon1.op.exp2->destType);
14958 exp->__anon1.op.exp1->destType = intType;
14959 exp->__anon1.op.exp2->destType = intType;
14960 intType->refCount++;
14964 if(exp->__anon1.op.exp2->destType)
14965 FreeType(exp->__anon1.op.exp2->destType);
14966 exp->__anon1.op.exp2->destType = type1;
14968 if(exp->__anon1.op.exp1->destType)
14969 FreeType(exp->__anon1.op.exp1->destType);
14970 exp->__anon1.op.exp1->destType = type2;
14973 if(!boolResult && type1->kind == 8 && (!exp->destType || exp->destType->kind != 8) && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1->__anon1._class->__anon1.registered != type2->__anon1._class->__anon1.registered)
14974 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);
14975 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
14977 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
14981 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
14983 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
14984 ProcessExpressionType(exp->__anon1.op.exp1);
14985 if(type2->kind != 13)
14987 ProcessExpressionType(classExp);
14988 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
14989 if(!exp->__anon1.op.exp2->expType)
14993 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
14996 ProcessExpressionType(exp->__anon1.op.exp2);
15000 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)))
15002 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
15003 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15004 exp->expType = type1;
15008 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)))
15010 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
15011 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15012 exp->expType = type2;
15016 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))
15018 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
15022 unsigned int success = 0;
15024 if(type1->kind == 13 && type2->kind == 13)
15026 if(exp->__anon1.op.op == '+')
15027 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
15028 else if(exp->__anon1.op.op == '-')
15030 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
15032 exp->expType = __extension__ ({
15033 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15035 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
15038 if(type1->__anon1.type->kind == 20)
15040 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
15044 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
15046 ProcessExpressionType(classExp);
15048 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"))));
15049 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
15057 if(!success && exp->__anon1.op.exp1->type == 2)
15059 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15062 FreeType(exp->expType);
15063 exp->expType = exp->__anon1.op.exp1->destType;
15064 if(exp->__anon1.op.exp1->destType)
15065 exp->__anon1.op.exp1->destType->refCount++;
15068 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15071 FreeType(exp->expType);
15072 exp->expType = exp->__anon1.op.exp2->destType;
15073 if(exp->__anon1.op.exp2->destType)
15074 exp->__anon1.op.exp2->destType->refCount++;
15080 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15083 FreeType(exp->expType);
15084 exp->expType = exp->__anon1.op.exp2->destType;
15085 if(exp->__anon1.op.exp2->destType)
15086 exp->__anon1.op.exp2->destType->refCount++;
15089 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15092 FreeType(exp->expType);
15093 exp->expType = exp->__anon1.op.exp1->destType;
15094 if(exp->__anon1.op.exp1->destType)
15095 exp->__anon1.op.exp1->destType->refCount++;
15101 char expString1[10240];
15102 char expString2[10240];
15106 expString1[0] = '\0';
15107 expString2[0] = '\0';
15112 PrintExpression(exp->__anon1.op.exp1, expString1);
15113 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15114 PrintExpression(exp->__anon1.op.exp2, expString2);
15115 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15116 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
15117 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
15119 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
15123 else if(!boolResult && (!useSideUnit) && type2 && type1 && type2->kind == 8 && type1->kind != 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
15125 if(exp->__anon1.op.exp1->destType)
15126 FreeType(exp->__anon1.op.exp1->destType);
15127 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15128 if(type2->__anon1._class->__anon1.registered->dataType)
15129 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15130 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15131 exp->expType = type2;
15135 else if(!boolResult && (!useSideUnit) && type1 && type2 && type1->kind == 8 && type2->kind != 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
15137 if(exp->__anon1.op.exp2->destType)
15138 FreeType(exp->__anon1.op.exp2->destType);
15139 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15140 if(type1->__anon1._class->__anon1.registered->dataType)
15141 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15142 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15143 exp->expType = type1;
15149 unsigned int valid = 0;
15151 if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
15153 if(exp->__anon1.op.exp2->destType)
15154 FreeType(exp->__anon1.op.exp2->destType);
15155 if(!type1->__anon1._class->__anon1.registered->dataType)
15156 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
15157 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15158 exp->__anon1.op.exp2->destType->refCount++;
15159 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15162 type2 = exp->__anon1.op.exp2->destType;
15165 exp->expType = type2;
15168 if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
15170 if(exp->__anon1.op.exp1->destType)
15171 FreeType(exp->__anon1.op.exp1->destType);
15172 if(!type2->__anon1._class->__anon1.registered->dataType)
15173 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
15174 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15175 exp->__anon1.op.exp1->destType->refCount++;
15176 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15177 type1 = exp->__anon1.op.exp1->destType;
15178 exp->expType = type1;
15181 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
15183 unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
15184 unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
15186 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
15188 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15190 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15193 FreeType(exp->expType);
15194 exp->expType = exp->__anon1.op.exp2->expType;
15195 if(exp->__anon1.op.exp2->expType)
15196 exp->__anon1.op.exp2->expType->refCount++;
15200 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15202 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15205 FreeType(exp->expType);
15206 exp->expType = exp->__anon1.op.exp1->expType;
15207 if(exp->__anon1.op.exp1->expType)
15208 exp->__anon1.op.exp1->expType->refCount++;
15215 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15217 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15220 FreeType(exp->expType);
15221 exp->expType = exp->__anon1.op.exp1->expType;
15222 if(exp->__anon1.op.exp1->expType)
15223 exp->__anon1.op.exp1->expType->refCount++;
15227 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15229 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15232 FreeType(exp->expType);
15233 exp->expType = exp->__anon1.op.exp2->expType;
15234 if(exp->__anon1.op.exp2->expType)
15235 exp->__anon1.op.exp2->expType->refCount++;
15243 if(type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && (type1->kind != 8 || !type1->__anon1._class || !type1->__anon1._class->__anon1.registered || type1->__anon1._class->__anon1.registered->type != 3))
15245 if(exp->__anon1.op.exp1->destType)
15246 FreeType(exp->__anon1.op.exp1->destType);
15247 exp->__anon1.op.exp1->destType = type2;
15249 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15252 FreeType(exp->expType);
15253 exp->expType = exp->__anon1.op.exp1->destType;
15254 if(exp->__anon1.op.exp1->destType)
15255 exp->__anon1.op.exp1->destType->refCount++;
15260 if(exp->__anon1.op.exp2->destType)
15261 FreeType(exp->__anon1.op.exp2->destType);
15262 exp->__anon1.op.exp2->destType = type1;
15264 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15267 FreeType(exp->expType);
15268 exp->expType = exp->__anon1.op.exp2->destType;
15269 if(exp->__anon1.op.exp2->destType)
15270 exp->__anon1.op.exp2->destType->refCount++;
15272 else if(type1 && type2)
15274 char expString1[10240];
15275 char expString2[10240];
15276 char type1String[1024];
15277 char type2String[1024];
15279 expString1[0] = '\0';
15280 expString2[0] = '\0';
15281 type1String[0] = '\0';
15282 type2String[0] = '\0';
15285 PrintExpression(exp->__anon1.op.exp1, expString1);
15286 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15287 PrintExpression(exp->__anon1.op.exp2, expString2);
15288 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15289 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
15290 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
15292 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
15293 if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
15295 exp->expType = exp->__anon1.op.exp1->expType;
15296 if(exp->__anon1.op.exp1->expType)
15297 exp->__anon1.op.exp1->expType->refCount++;
15299 else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15301 exp->expType = exp->__anon1.op.exp2->expType;
15302 if(exp->__anon1.op.exp2->expType)
15303 exp->__anon1.op.exp2->expType->refCount++;
15311 if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15313 struct Type * oldType = exp->__anon1.op.exp1->expType;
15315 exp->__anon1.op.exp1->expType = (((void *)0));
15316 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15319 exp->__anon1.op.exp1->expType = oldType;
15321 if(exp->__anon1.op.exp1->destType)
15322 FreeType(exp->__anon1.op.exp1->destType);
15323 exp->__anon1.op.exp1->destType = type2;
15325 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15328 FreeType(exp->expType);
15329 exp->expType = exp->__anon1.op.exp1->destType;
15330 if(exp->__anon1.op.exp1->destType)
15331 exp->__anon1.op.exp1->destType->refCount++;
15335 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
15337 if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
15339 if(exp->__anon1.op.exp1->destType)
15340 FreeType(exp->__anon1.op.exp1->destType);
15341 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15342 if(type2->__anon1._class->__anon1.registered->dataType)
15343 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15344 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15346 if(exp->__anon1.op.op == '!')
15348 exp->expType = MkClassType("bool");
15349 exp->expType->truth = 1;
15353 exp->expType = type2;
15358 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
15360 if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
15362 if(exp->__anon1.op.exp2->destType)
15363 FreeType(exp->__anon1.op.exp2->destType);
15364 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15365 if(type1->__anon1._class->__anon1.registered->dataType)
15366 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15367 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15369 exp->expType = type1;
15375 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
15377 char expString[10000];
15379 expString[0] = '\0';
15382 PrintExpression(exp->__anon1.op.exp1, expString);
15383 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15386 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15388 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
15390 char expString[10240];
15392 expString[0] = '\0';
15395 PrintExpression(exp->__anon1.op.exp2, expString);
15396 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15399 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15403 FreeType(exp->expType);
15404 exp->expType = MkClassType("bool");
15405 exp->expType->truth = 1;
15407 if(exp->__anon1.op.op != SIZEOF)
15408 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
15409 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
15411 DeclareType(exp->__anon1.op.exp2->expType, 0, 0);
15413 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
15414 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
15415 yylloc = oldyylloc;
15424 struct Expression * e;
15426 exp->isConstant = 1;
15427 for(e = (*exp->__anon1.list).first; e; e = e->next)
15429 unsigned int inced = 0;
15433 FreeType(e->destType);
15434 e->opDestType = exp->opDestType;
15435 e->destType = exp->destType;
15438 exp->destType->refCount++;
15439 e->destType->count++;
15443 ProcessExpressionType(e);
15445 exp->destType->count--;
15446 if(!exp->expType && !e->next)
15448 exp->expType = e->expType;
15450 e->expType->refCount++;
15453 exp->isConstant = 0;
15455 e = (*exp->__anon1.list).first;
15456 if(!e->next && e->type == 8)
15458 struct Expression * next = exp->next, * prev = exp->prev;
15460 FreeType(exp->expType);
15461 FreeType(exp->destType);
15462 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
15466 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
15467 ProcessExpressionType(exp);
15473 struct Expression * e;
15475 exp->isConstant = 1;
15476 ProcessExpressionType(exp->__anon1.index.exp);
15477 if(!exp->__anon1.index.exp->isConstant)
15478 exp->isConstant = 0;
15479 if(exp->__anon1.index.exp->expType)
15481 struct Type * source = exp->__anon1.index.exp->expType;
15483 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
15485 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
15486 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
15488 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
15490 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
15491 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
15493 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
15495 if(type->kind == 8)
15496 type->constant = 1;
15497 else if(type->kind == 13)
15499 struct Type * t = type;
15501 while(t->kind == 13)
15502 t = t->__anon1.type;
15505 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
15510 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
15512 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
15515 FreeType(e->destType);
15516 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
15518 ProcessExpressionType(e);
15523 exp->isConstant = 0;
15526 exp->expType = Dereference(exp->__anon1.index.exp->expType);
15528 DeclareType(exp->expType, 0, 0);
15533 struct Expression * e;
15534 struct Type * functionType;
15535 struct Type * methodType = (((void *)0));
15541 PrintExpression(exp->__anon1.call.exp, name);
15542 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
15544 PrintExpression(exp->__anon1.call.exp, name);
15547 if(exp->__anon1.call.exp->type == 0)
15549 struct Expression * idExp = exp->__anon1.call.exp;
15550 struct Identifier * id = idExp->__anon1.__anon1.identifier;
15552 if(!strcmp(id->string, "__builtin_frame_address"))
15554 exp->expType = ProcessTypeString("void *", 1);
15555 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15556 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15559 else if(!strcmp(id->string, "__ENDIAN_PAD"))
15561 exp->expType = ProcessTypeString("int", 1);
15562 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15563 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15566 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
15568 struct Expression * a = (((void *)0));
15569 struct Expression * b = (((void *)0));
15570 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
15572 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
15574 a = (*exp->__anon1.call.arguments).first;
15575 b = (*exp->__anon1.call.arguments).last;
15579 else if((*exp->__anon1.call.arguments).count == 1)
15581 a = (*exp->__anon1.call.arguments).first;
15586 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
15587 idExp->__anon1.__anon1.identifier = (((void *)0));
15588 FreeExpContents(exp);
15589 ProcessExpressionType(a);
15591 ProcessExpressionType(b);
15593 exp->__anon1.list = MkList();
15594 if(a->expType && (!b || b->expType))
15596 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
15600 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15601 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
15602 struct Declaration * decl;
15603 char temp1[1024], temp2[1024];
15605 GetTypeSpecs(a->expType, specs);
15606 if(a && !a->isConstant && a->type != 0)
15608 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
15609 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
15610 tempExp1 = QMkExpId(temp1);
15611 tempExp1->expType = a->expType;
15613 a->expType->refCount++;
15614 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
15616 if(b && !b->isConstant && b->type != 0)
15618 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
15619 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
15620 tempExp2 = QMkExpId(temp2);
15621 tempExp2->expType = b->expType;
15623 b->expType->refCount++;
15624 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
15626 decl = MkDeclaration(specs, decls);
15627 if(!curCompound->__anon1.compound.declarations)
15628 curCompound->__anon1.compound.declarations = MkList();
15629 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
15633 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
15635 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
15637 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
15638 exp->expType = a->expType;
15640 a->expType->refCount++;
15642 else if(!strcmp(id->string, "Abs"))
15644 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
15645 exp->expType = a->expType;
15647 a->expType->refCount++;
15649 else if(!strcmp(id->string, "Sgn"))
15651 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"))))));
15652 exp->expType = ProcessTypeString("int", 0);
15654 FreeExpression(tempExp1);
15656 FreeExpression(tempExp2);
15657 FreeIdentifier(id);
15663 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
15665 if(!exp->__anon1.call.exp->destType)
15667 exp->__anon1.call.exp->destType = dummy;
15670 ProcessExpressionType(exp->__anon1.call.exp);
15671 if(exp->__anon1.call.exp->destType == dummy)
15674 exp->__anon1.call.exp->destType = (((void *)0));
15678 functionType = exp->__anon1.call.exp->expType;
15679 if(functionType && functionType->kind == 16)
15681 methodType = functionType;
15682 functionType = methodType->__anon1.__anon3.method->dataType;
15683 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
15685 char typeString[1024];
15687 typeString[0] = '\0';
15689 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
15691 functionType->__anon1.__anon2.thisClass = (((void *)0));
15692 PrintType(functionType, typeString, 1, 1);
15693 functionType->__anon1.__anon2.thisClass = back;
15695 if(strstr(typeString, "thisclass"))
15697 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15698 struct Declarator * decl;
15701 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15703 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
15704 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))
15705 thisClassParams = 0;
15706 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15708 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
15710 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
15711 ProcessDeclarator(decl);
15712 thisClass = backupThisClass;
15714 thisClassParams = 1;
15715 functionType = ProcessType(specs, decl);
15716 functionType->refCount = 0;
15717 FinishTemplatesContext(context);
15719 FreeList(specs, (void *)(FreeSpecifier));
15720 FreeDeclarator(decl);
15724 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
15726 struct Type * type = functionType->__anon1.type;
15728 if(!functionType->refCount)
15730 functionType->__anon1.type = (((void *)0));
15731 FreeType(functionType);
15733 functionType = type;
15735 if(functionType && functionType->kind != 11)
15737 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
15739 else if(functionType)
15741 unsigned int emptyParams = 0, noParams = 0;
15742 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
15743 struct Type * type = functionType->__anon1.__anon2.params.first;
15744 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
15746 struct Location oldyylloc = yylloc;
15750 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
15752 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
15755 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
15757 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)
15759 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
15762 e->destType = type;
15764 type = functionType->__anon1.__anon2.params.first;
15767 type->refCount = 0;
15769 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
15771 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
15772 type->byReference = functionType->byReference;
15773 type->typedByReference = functionType->typedByReference;
15776 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
15778 e->destType = type;
15780 type = functionType->__anon1.__anon2.params.first;
15783 type->refCount = 0;
15786 if(type && type->kind == 0)
15789 if(!type->refCount)
15791 type = (((void *)0));
15793 for(; e; e = e->next)
15795 if(!type && !emptyParams)
15798 if(methodType && methodType->__anon1.__anon3.methodClass)
15799 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);
15801 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);
15804 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
15806 struct Type * templatedType = (((void *)0));
15807 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
15808 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
15811 if(_class && _class->templateArgs)
15813 struct __ecereNameSpace__ecere__com__Class * sClass;
15815 for(sClass = _class; sClass; sClass = sClass->base)
15817 if(sClass->templateClass)
15818 sClass = sClass->templateClass;
15820 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
15822 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
15824 struct __ecereNameSpace__ecere__com__Class * nextClass;
15826 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
15828 if(nextClass->templateClass)
15829 nextClass = nextClass->templateClass;
15830 id += nextClass->templateParams.count;
15840 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
15842 unsigned int constant = type->constant;
15843 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
15846 struct Context * context = SetupTemplatesContext(_class);
15848 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
15849 FinishTemplatesContext(context);
15851 if(templatedType->kind == 8 && constant)
15852 templatedType->constant = 1;
15853 else if(templatedType->kind == 13)
15855 struct Type * t = templatedType->__anon1.type;
15857 while(t->kind == 13)
15858 t = t->__anon1.type;
15860 t->constant = constant;
15862 e->destType = templatedType;
15865 templatedType->passAsTemplate = 1;
15870 e->destType = type;
15877 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
15879 e->destType = type->prev;
15880 e->destType->refCount++;
15884 e->destType = type;
15889 if(type && type->kind != 14)
15891 struct Type * next = type->next;
15893 if(!type->refCount)
15898 if(type && type->kind != 14)
15900 if(methodType && methodType->__anon1.__anon3.methodClass)
15901 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);
15903 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);
15905 yylloc = oldyylloc;
15906 if(type && !type->refCount)
15911 functionType = __extension__ ({
15912 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15914 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
15916 if(exp->__anon1.call.exp->type == 0)
15918 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
15922 struct Symbol * symbol;
15923 struct Location oldyylloc = yylloc;
15925 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
15926 if(strstr(string, "__builtin_") == string)
15930 functionType->__anon1.__anon2.returnType = exp->destType;
15931 exp->destType->refCount++;
15935 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
15936 symbol = __extension__ ({
15937 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
15939 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
15941 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
15942 if(strstr(symbol->string, "::"))
15943 globalContext->hasNameSpace = 1;
15944 yylloc = oldyylloc;
15947 else if(exp->__anon1.call.exp->type == 8)
15951 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
15952 if(!functionType->__anon1.__anon2.returnType)
15954 functionType->__anon1.__anon2.returnType = __extension__ ({
15955 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15957 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
15961 if(functionType && functionType->kind == 11)
15963 exp->expType = functionType->__anon1.__anon2.returnType;
15964 if(functionType->__anon1.__anon2.returnType)
15965 functionType->__anon1.__anon2.returnType->refCount++;
15966 if(!functionType->refCount)
15967 FreeType(functionType);
15969 if(exp->__anon1.call.arguments)
15971 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
15972 ProcessExpressionType(e);
15978 struct Type * type;
15979 struct Location oldyylloc = yylloc;
15980 unsigned int thisPtr;
15981 struct Expression * checkExp = exp->__anon1.member.exp;
15985 if(checkExp->type == 11)
15986 checkExp = checkExp->__anon1.cast.exp;
15987 else if(checkExp->type == 5)
15988 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
15992 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
15993 exp->thisPtr = thisPtr;
15994 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
15996 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
15998 ProcessExpressionType(exp->__anon1.member.exp);
15999 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)
16001 exp->isConstant = 0;
16004 exp->isConstant = exp->__anon1.member.exp->isConstant;
16005 type = exp->__anon1.member.exp->expType;
16007 if(type && (type->kind == 20))
16009 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
16010 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
16014 for(param = _class->templateParams.first; param; param = param->next)
16016 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
16020 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
16022 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
16026 struct Expression * expMember = exp->__anon1.member.exp;
16027 struct Declarator * decl;
16028 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16029 char thisClassTypeString[1024];
16031 FreeIdentifier(exp->__anon1.member.member);
16032 ProcessExpressionType(argExp);
16034 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
16038 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
16039 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
16042 strcpy(thisClassTypeString, _class->fullName);
16044 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
16045 exp->expType = ProcessType(specs, decl);
16046 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
16048 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16049 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16050 int paramCount = 0;
16051 int lastParam = -1;
16052 char templateString[1024];
16053 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16055 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16056 for(cClass = expClass; cClass; cClass = cClass->base)
16060 for(param = cClass->templateParams.first; param; param = param->next)
16063 struct __ecereNameSpace__ecere__com__Class * sClass;
16064 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16066 for(sClass = cClass->base; sClass; sClass = sClass->base)
16067 id += sClass->templateParams.count;
16068 arg = expClass->templateArgs[id];
16069 for(sClass = _class; sClass; sClass = sClass->base)
16071 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
16073 struct __ecereNameSpace__ecere__com__Class * nextClass;
16075 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
16076 p += nextClass->templateParams.count;
16077 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
16079 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
16081 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16083 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
16084 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
16091 char argument[256];
16093 argument[0] = '\0';
16094 switch(param->type)
16098 char expString[1024];
16099 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16100 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16101 struct Expression * exp;
16102 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16104 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16105 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16106 ProcessExpressionType(exp);
16107 ComputeExpression(exp);
16108 expString[0] = '\0';
16109 PrintExpression(exp, expString);
16110 strcat(argument, expString);
16111 FreeExpression(exp);
16116 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16121 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16123 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
16124 strcat(argument, thisClassTypeString);
16126 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16134 strcat(templateString, ", ");
16135 if(lastParam != p - 1)
16137 strcat(templateString, param->name);
16138 strcat(templateString, " = ");
16140 strcat(templateString, argument);
16149 int len = strlen(templateString);
16151 if(templateString[len - 1] == '>')
16152 templateString[len++] = ' ';
16153 templateString[len++] = '>';
16154 templateString[len++] = '\0';
16157 struct Context * context = SetupTemplatesContext(_class);
16159 FreeType(exp->expType);
16160 exp->expType = ProcessTypeString(templateString, 0);
16161 FinishTemplatesContext(context);
16165 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")))))))));
16168 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
16170 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
16173 if(type && (type->kind == 20))
16175 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)))
16177 struct Identifier * id = exp->__anon1.member.member;
16178 int typeKind = type->kind;
16179 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));
16181 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
16183 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
16188 if(typeKind == 3 || typeKind == 15)
16189 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
16192 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
16194 _class = type->__anon1._class->__anon1.registered;
16196 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
16198 _class = FindClass("char *")->__anon1.registered;
16200 else if(type->kind == 13)
16202 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
16203 FreeType(exp->expType);
16204 exp->expType = ProcessTypeString("uintptr", 0);
16205 exp->byReference = 1;
16209 char string[1024] = "";
16210 struct Symbol * classSym;
16212 PrintTypeNoConst(type, string, 0, 1);
16213 classSym = FindClass(string);
16215 _class = classSym->__anon1.registered;
16221 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
16222 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
16223 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
16224 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
16225 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
16227 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
16228 exp->__anon1.member.memberType = 1;
16229 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
16230 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
16233 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
16235 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16236 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
16238 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16240 member = (((void *)0));
16242 if(!member && !prop)
16243 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16244 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
16245 exp->__anon1.member.thisPtr = 1;
16249 unsigned int useMemberForNonConst = 0;
16253 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
16254 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);
16255 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16256 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
16258 if((!prop || useMemberForNonConst) && !member)
16260 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
16263 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16264 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);
16265 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16266 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16271 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
16272 prop = (((void *)0));
16274 member = (((void *)0));
16278 if(!prop && !member && !method)
16279 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
16280 if(!prop && !member && !method)
16284 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
16287 exp->__anon1.member.memberType = 5;
16288 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
16292 char structName[1024];
16293 struct Identifier * id = exp->__anon1.member.member;
16294 struct Expression * classExp = exp->__anon1.member.exp;
16297 FreeType(classExp->expType);
16298 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
16299 strcpy(structName, "__ecereClassData_");
16300 FullClassNameCat(structName, type->__anon1._class->string, 0);
16302 exp->__anon1.member.member = id;
16303 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"))))))));
16305 ProcessExpressionType(exp);
16311 struct Symbol * classSym = FindClass(id->string);
16315 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
16318 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
16322 if(exp->__anon1.member.exp->destType)
16323 FreeType(exp->__anon1.member.exp->destType);
16325 if(method && !method->_class->symbol)
16326 method->_class->symbol = FindClass(method->_class->fullName);
16327 if(prop && !prop->_class->symbol)
16328 prop->_class->symbol = FindClass(prop->_class->fullName);
16329 exp->__anon1.member.exp->destType = __extension__ ({
16330 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16332 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1;
16337 exp->__anon1.member.memberType = 1;
16338 if(!prop->dataType)
16339 ProcessPropertyType(prop);
16340 exp->expType = prop->dataType;
16341 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
16343 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16345 CopyTypeInto(type, exp->expType);
16346 type->refCount = 1;
16347 type->constant = 1;
16348 exp->expType = type;
16350 else if(prop->dataType)
16351 prop->dataType->refCount++;
16355 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16357 FreeExpContents(exp);
16359 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16360 ProcessExpressionType(exp);
16363 exp->__anon1.member.memberType = 3;
16364 DeclareStruct(_class->fullName, 0);
16365 if(!member->dataType)
16367 struct Context * context = SetupTemplatesContext(_class);
16369 member->dataType = ProcessTypeString(member->dataTypeString, 0);
16370 FinishTemplatesContext(context);
16372 exp->expType = member->dataType;
16373 if(member->dataType)
16374 member->dataType->refCount++;
16376 else if(revConvert)
16378 exp->__anon1.member.memberType = 4;
16379 exp->expType = MkClassType(revConvert->_class->fullName);
16384 exp->__anon1.member.memberType = 2;
16386 if(!method->dataType)
16387 ProcessMethodType(method);
16388 exp->expType = __extension__ ({
16389 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16391 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
16393 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
16394 exp->expType->__anon1.__anon3.usedClass = _class;
16396 else if(!classProp)
16398 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16400 FreeExpContents(exp);
16402 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16403 FreeType(exp->expType);
16404 exp->expType = MkClassType("ecere::com::Class");
16407 yylloc = exp->__anon1.member.member->loc;
16408 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
16410 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
16412 if(_class && exp->expType)
16414 struct __ecereNameSpace__ecere__com__Class * tClass;
16416 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
16417 while(tClass && !tClass->templateClass)
16418 tClass = tClass->base;
16419 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
16422 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16423 struct __ecereNameSpace__ecere__com__Class * sClass;
16425 for(sClass = tClass; sClass; sClass = sClass->base)
16428 if(sClass->templateClass)
16429 sClass = sClass->templateClass;
16430 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16432 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
16434 for(sClass = sClass->base; sClass; sClass = sClass->base)
16435 id += sClass->templateParams.count;
16443 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
16445 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16446 struct Context * context = SetupTemplatesContext(tClass);
16447 unsigned int constant = exp->expType->constant;
16449 FreeType(exp->expType);
16450 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16451 if(exp->expType->kind == 8 && constant)
16452 exp->expType->constant = 1;
16453 else if(exp->expType->kind == 13)
16455 struct Type * t = exp->expType->__anon1.type;
16457 while(t->kind == 13)
16458 t = t->__anon1.type;
16460 t->constant = constant;
16464 if(exp->expType->kind == 21)
16466 FreeType(exp->expType);
16467 exp->expType = ReplaceThisClassType(_class);
16469 if(tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType))))
16470 exp->expType->passAsTemplate = 1;
16473 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16474 if(exp->destType->kind == 8 && constant)
16475 exp->destType->constant = 1;
16476 else if(exp->destType->kind == 13)
16478 struct Type * t = exp->destType->__anon1.type;
16480 while(t->kind == 13)
16481 t = t->__anon1.type;
16483 t->constant = constant;
16485 if(exp->destType->kind == 21)
16487 FreeType(exp->destType);
16488 exp->destType = ReplaceThisClassType(_class);
16492 FinishTemplatesContext(context);
16495 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)
16498 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16499 struct __ecereNameSpace__ecere__com__Class * sClass;
16501 for(sClass = tClass; sClass; sClass = sClass->base)
16504 if(sClass->templateClass)
16505 sClass = sClass->templateClass;
16506 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16508 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
16510 for(sClass = sClass->base; sClass; sClass = sClass->base)
16511 id += sClass->templateParams.count;
16521 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16522 struct Context * context = SetupTemplatesContext(tClass);
16523 struct Type * basicType;
16525 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16528 if(basicType->kind == 21)
16530 FreeType(basicType);
16531 basicType = ReplaceThisClassType(_class);
16533 FreeType(exp->expType);
16534 exp->expType = __extension__ ({
16535 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16537 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
16541 exp->destType = exp->expType;
16542 exp->destType->refCount++;
16545 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
16546 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16547 struct Declarator * decl;
16549 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
16552 exp->destType->refCount++;
16554 exp->expType->refCount++;
16556 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
16557 exp->__anon1.cast.exp = newExp;
16560 FinishTemplatesContext(context);
16563 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
16565 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16569 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16571 int paramCount = 0;
16572 int lastParam = -1;
16573 char templateString[1024];
16574 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16576 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16577 while(cClass != expClass)
16579 struct __ecereNameSpace__ecere__com__Class * sClass;
16581 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
16584 for(param = cClass->templateParams.first; param; param = param->next)
16586 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
16588 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
16589 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16591 while(cClassCur != tClass && !paramCur)
16593 struct __ecereNameSpace__ecere__com__Class * sClassCur;
16595 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
16597 cClassCur = sClassCur;
16598 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
16600 if(!strcmp(paramCur->name, param->name))
16607 if(paramCur && paramCur->type == 0)
16608 arg = tClass->templateArgs[cp];
16610 arg = expClass->templateArgs[p];
16612 char argument[256];
16614 argument[0] = '\0';
16615 switch(param->type)
16619 char expString[1024];
16620 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16621 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16622 struct Expression * exp;
16623 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16625 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16626 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16627 ProcessExpressionType(exp);
16628 ComputeExpression(exp);
16629 expString[0] = '\0';
16630 PrintExpression(exp, expString);
16631 strcat(argument, expString);
16632 FreeExpression(exp);
16637 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16642 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16643 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16650 strcat(templateString, ", ");
16651 if(lastParam != p - 1)
16653 strcat(templateString, param->name);
16654 strcat(templateString, " = ");
16656 strcat(templateString, argument);
16665 int len = strlen(templateString);
16667 if(templateString[len - 1] == '>')
16668 templateString[len++] = ' ';
16669 templateString[len++] = '>';
16670 templateString[len++] = '\0';
16672 FreeType(exp->expType);
16674 struct Context * context = SetupTemplatesContext(tClass);
16676 exp->expType = ProcessTypeString(templateString, 0);
16677 FinishTemplatesContext(context);
16684 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)");
16686 else if(type && (type->kind == 9 || type->kind == 10))
16688 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
16692 exp->expType = memberType;
16694 memberType->refCount++;
16699 char expString[10240];
16701 expString[0] = '\0';
16704 PrintExpression(exp, expString);
16705 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16707 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
16709 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
16711 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
16713 struct Identifier * id = exp->__anon1.member.member;
16714 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));
16718 FreeType(exp->expType);
16719 exp->expType = ReplaceThisClassType(_class);
16723 yylloc = oldyylloc;
16728 struct Type * destType = exp->destType;
16730 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
16732 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
16734 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
16738 ProcessExpressionType(exp);
16745 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
16747 if(classSym && classSym->__anon1.registered)
16749 if(classSym->__anon1.registered->type == 5)
16754 DeclareStruct(classSym->string, 0);
16755 FreeSpecifier(exp->__anon1._class);
16757 FullClassNameCat(name, classSym->string, 0);
16758 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
16762 if(classSym->__anon1.registered->fixed)
16764 FreeSpecifier(exp->__anon1._class);
16765 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
16770 char className[1024];
16772 strcpy(className, "__ecereClass_");
16773 FullClassNameCat(className, classSym->string, 1);
16774 DeclareClass(classSym, className);
16775 FreeExpContents(exp);
16777 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
16778 exp->__anon1.member.member = MkIdentifier("structSize");
16782 exp->expType = __extension__ ({
16783 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16785 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16791 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
16793 exp->expType = __extension__ ({
16794 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16796 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16798 exp->isConstant = 1;
16799 DeclareType(type, 0, 0);
16805 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
16808 FreeType(exp->__anon1.cast.exp->destType);
16809 exp->__anon1.cast.exp->destType = type;
16812 ProcessExpressionType(exp->__anon1.cast.exp);
16815 exp->expType = type;
16816 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
16818 void * prev = exp->prev, * next = exp->next;
16819 struct Type * expType = exp->__anon1.cast.exp->destType;
16820 struct Expression * castExp = exp->__anon1.cast.exp;
16821 struct Type * destType = exp->destType;
16824 expType->refCount++;
16825 FreeType(exp->expType);
16826 FreeTypeName(exp->__anon1.cast.typeName);
16828 FreeType(exp->expType);
16829 FreeType(exp->destType);
16830 exp->expType = expType;
16831 exp->destType = destType;
16832 ((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
16838 exp->isConstant = exp->__anon1.cast.exp->isConstant;
16844 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
16846 exp->expType = type;
16851 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
16853 ProcessExpressionType(exp->__anon1.vaArg.exp);
16854 exp->expType = type;
16859 struct Expression * e;
16861 exp->isConstant = 1;
16862 FreeType(exp->__anon1.cond.cond->destType);
16863 exp->__anon1.cond.cond->destType = MkClassType("bool");
16864 exp->__anon1.cond.cond->destType->truth = 1;
16865 ProcessExpressionType(exp->__anon1.cond.cond);
16866 if(!exp->__anon1.cond.cond->isConstant)
16867 exp->isConstant = 0;
16868 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
16872 FreeType(e->destType);
16873 e->destType = exp->destType;
16875 e->destType->refCount++;
16877 ProcessExpressionType(e);
16880 exp->expType = e->expType;
16882 e->expType->refCount++;
16885 exp->isConstant = 0;
16887 FreeType(exp->__anon1.cond.elseExp->destType);
16888 exp->__anon1.cond.elseExp->destType = exp->destType ? exp->destType : exp->expType;
16889 if(exp->__anon1.cond.elseExp->destType)
16890 exp->__anon1.cond.elseExp->destType->refCount++;
16891 ProcessExpressionType(exp->__anon1.cond.elseExp);
16892 if(!exp->__anon1.cond.elseExp->isConstant)
16893 exp->isConstant = 0;
16898 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
16900 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
16902 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
16904 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
16906 exp->destType->refCount++;
16908 ProcessStatement(exp->__anon1.compound);
16909 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
16911 exp->expType->refCount++;
16917 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
16919 if(spec && spec->type == 1)
16921 exp->expType = MkClassType(spec->__anon1.__anon1.name);
16922 exp->expType->kind = 19;
16923 exp->byReference = 1;
16927 exp->expType = MkClassType("ecere::com::Class");
16928 exp->byReference = 1;
16934 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
16938 struct Identifier * id = exp->__anon1.classData.id;
16939 char structName[1024];
16940 struct Expression * classExp;
16942 strcpy(structName, "__ecereClassData_");
16943 FullClassNameCat(structName, _class->fullName, 0);
16945 exp->__anon1.member.member = id;
16946 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
16947 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
16949 classExp = MkExpIdentifier(MkIdentifier("class"));
16950 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"))))))));
16951 ProcessExpressionType(exp);
16958 struct Type * type = (((void *)0));
16959 const char * typeString = (((void *)0));
16960 char typeStringBuf[1024];
16962 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))
16964 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
16966 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
16968 else if(exp->__anon1.list)
16970 struct Expression * e;
16972 for(e = (*exp->__anon1.list).first; e; e = e->next)
16974 ProcessExpressionType(e);
16984 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
16988 e->expType = (((void *)0));
16989 e = (*exp->__anon1.list).first;
16990 ProcessExpressionType(e);
16993 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
16995 FreeType(e->expType);
16996 e->expType = (((void *)0));
16998 type = (((void *)0));
17006 FreeType(e->expType);
17007 e->expType = (((void *)0));
17013 typeStringBuf[0] = '\0';
17014 PrintTypeNoConst(type, typeStringBuf, 0, 1);
17015 typeString = typeStringBuf;
17017 type = (((void *)0));
17022 char templateString[1024];
17023 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
17024 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
17025 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17026 struct Expression * expExt;
17027 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17029 sprintf(templateString, "Container<%s>", typeString);
17030 if(exp->__anon1.list)
17032 struct Expression * e;
17034 type = ProcessTypeString(typeString, 0);
17035 while((e = (*exp->__anon1.list).first))
17037 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
17038 e->destType = type;
17040 ProcessExpressionType(e);
17041 ListAdd(initializers, MkInitializerAssignment(e));
17044 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17046 DeclareStruct("ecere::com::BuiltInContainer", 0);
17047 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
17048 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17049 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
17050 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17051 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
17052 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17053 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
17054 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17055 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
17056 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
17058 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
17060 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17061 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
17062 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17063 exp->expType = ProcessTypeString(templateString, 0);
17065 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
17066 ProcessExpressionType(expExt);
17070 exp->expType = ProcessTypeString("Container", 0);
17071 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
17076 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
17078 FreeType(exp->expType);
17079 exp->expType = ReplaceThisClassType(thisClass);
17081 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)
17083 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
17087 if(exp->expType->kind != 15)
17089 struct Type * member;
17090 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
17092 FreeType(exp->expType);
17093 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17094 exp->expType->kind = symbol->type->kind;
17095 exp->expType->refCount++;
17096 exp->expType->__anon1.__anon1.enumName = enumName;
17097 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
17098 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17099 member->refCount++;
17103 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
17105 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17107 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink64), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
17109 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
17115 if(exp->destType && (exp->destType->kind == 18))
17117 else if(exp->destType && !exp->destType->keepCast)
17119 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
17120 exp->needTemplateCast = 1;
17121 if(exp->destType->kind == 0)
17123 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
17125 if(!exp->destType->count || unresolved)
17130 if(exp->destType->kind != 14)
17137 char expString[10240];
17139 expString[0] = '\0';
17140 PrintType(exp->destType, type2, 0, 1);
17143 PrintExpression(exp, expString);
17144 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17147 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
17148 else if(exp->type != 16)
17149 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
17154 char expString[10240];
17156 expString[0] = '\0';
17159 PrintExpression(exp, expString);
17160 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17163 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
17164 else if(exp->type != 16)
17165 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17177 PrintType(exp->expType, type1, 0, 1);
17178 PrintType(exp->destType, type2, 0, 1);
17180 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)))
17184 char expString[10240];
17186 expString[0] = '\0';
17189 PrintExpression(exp, expString);
17190 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17192 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")))
17193 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
17194 FreeType(exp->expType);
17195 exp->destType->refCount++;
17196 exp->expType = exp->destType;
17201 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))
17203 struct Expression * nbExp = GetNonBracketsExp(exp);
17205 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
17207 struct Expression * e = MoveExpContents(exp);
17209 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
17211 exp->__anon1.cast.exp->destType = exp->destType;
17213 exp->destType->refCount++;
17214 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
17218 else if(unresolved)
17220 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
17221 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);
17222 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
17223 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
17225 else if(!exp->expType && exp->type != 16)
17227 char expString[10240];
17229 expString[0] = '\0';
17232 PrintExpression(exp, expString);
17233 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17235 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17238 ApplyAnyObjectLogic(exp);
17239 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)))
17241 exp->byReference = 1;
17243 yylloc = oldyylloc;
17246 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)
17250 *curMember = (*curMember)->next;
17251 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
17253 *curMember = subMemberStack[--(*subMemberStackPos)];
17254 *curMember = (*curMember)->next;
17256 while((*curMember) && (*curMember)->isProperty)
17257 *curMember = (*curMember)->next;
17258 if(subMemberStackPos)
17260 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17262 subMemberStack[(*subMemberStackPos)++] = *curMember;
17263 *curMember = (*curMember)->members.first;
17264 while(*curMember && (*curMember)->isProperty)
17265 *curMember = (*curMember)->next;
17273 if(subMemberStackPos && *subMemberStackPos)
17275 *curMember = subMemberStack[--(*subMemberStackPos)];
17276 *curMember = (*curMember)->next;
17280 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
17282 if(*curClass == _class)
17284 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
17286 *curMember = (*curClass)->membersAndProperties.first;
17288 while((*curMember) && (*curMember)->isProperty)
17289 *curMember = (*curMember)->next;
17290 if(subMemberStackPos)
17292 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17294 subMemberStack[(*subMemberStackPos)++] = *curMember;
17295 *curMember = (*curMember)->members.first;
17296 while(*curMember && (*curMember)->isProperty)
17297 *curMember = (*curMember)->next;
17304 static void ProcessInitializer(struct Initializer * init, struct Type * type)
17309 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
17311 if(init->__anon1.exp && !init->__anon1.exp->destType)
17313 FreeType(init->__anon1.exp->destType);
17314 init->__anon1.exp->destType = type;
17318 if(init->__anon1.exp)
17320 ProcessExpressionType(init->__anon1.exp);
17321 init->isConstant = init->__anon1.exp->isConstant;
17327 struct Expression * exp = init->__anon1.exp;
17328 struct Instantiation * inst = exp->__anon1.instance;
17329 struct MembersInit * members;
17332 init->__anon1.list = MkList();
17335 for(members = (*inst->members).first; members; members = members->next)
17337 if(members->type == 0)
17339 struct MemberInit * member;
17341 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
17343 ListAdd(init->__anon1.list, member->initializer);
17344 member->initializer = (((void *)0));
17349 FreeExpression(exp);
17353 struct Initializer * i;
17354 struct Type * initializerType = (((void *)0));
17355 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
17356 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
17357 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
17358 int subMemberStackPos = 0;
17360 if(type && type->kind == 12)
17361 initializerType = Dereference(type);
17362 else if(type && (type->kind == 9 || type->kind == 10))
17363 initializerType = type->__anon1.__anon1.members.first;
17364 for(i = (*init->__anon1.list).first; i; i = i->next)
17366 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17368 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
17371 if(!curMember->dataType)
17372 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
17373 initializerType = curMember->dataType;
17376 ProcessInitializer(i, initializerType);
17377 if(initializerType && type && (type->kind == 9 || type->kind == 10))
17378 initializerType = initializerType->next;
17380 init->isConstant = 0;
17382 if(type && type->kind == 12)
17383 FreeType(initializerType);
17384 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))
17386 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
17393 extern struct Symbol * FindType(struct Context * ctx, const char * name);
17395 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
17397 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct)
17403 if(spec->__anon1.specifier == THISCLASS)
17408 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17409 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17410 ProcessSpecifier(spec, declareStruct);
17417 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
17420 DeclareType(symbol->type, 1, 1);
17421 else if((symbol = spec->__anon1.__anon1.symbol) && symbol->__anon1.registered && symbol->__anon1.registered->type == 1 && declareStruct)
17422 DeclareStruct(spec->__anon1.__anon1.name, 0);
17427 struct Enumerator * e;
17429 if(spec->__anon1.__anon2.list)
17431 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
17434 ProcessExpressionType(e->exp);
17442 if(spec->__anon1.__anon2.definitions)
17444 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
17446 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
17453 static void ProcessDeclarator(struct Declarator * decl)
17458 if(decl->__anon1.identifier->classSym)
17460 FreeSpecifier(decl->__anon1.identifier->_class);
17461 decl->__anon1.identifier->_class = (((void *)0));
17465 if(decl->__anon1.array.exp)
17466 ProcessExpressionType(decl->__anon1.array.exp);
17473 if(decl->declarator)
17474 ProcessDeclarator(decl->declarator);
17475 if(decl->type == 4)
17477 struct Identifier * id = GetDeclId(decl);
17479 if(id && id->_class)
17481 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(id->_class), param->declarator = (((void *)0)), param);
17483 if(!decl->__anon1.function.parameters)
17484 decl->__anon1.function.parameters = MkList();
17485 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
17486 id->_class = (((void *)0));
17488 if(decl->__anon1.function.parameters)
17490 struct TypeName * param;
17492 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
17494 if(param->qualifiers && (*param->qualifiers).first)
17496 struct Specifier * spec = (*param->qualifiers).first;
17498 if(spec && spec->__anon1.specifier == TYPED_OBJECT)
17500 struct Declarator * d = param->declarator;
17501 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);
17504 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
17505 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17506 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
17507 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
17508 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
17511 else if(spec && spec->__anon1.specifier == ANY_OBJECT)
17513 struct Declarator * d = param->declarator;
17515 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17516 param->qualifiers = MkListOne(MkSpecifier(VOID));
17518 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
17519 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
17521 else if(spec->__anon1.specifier == THISCLASS)
17526 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17527 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17528 ProcessSpecifier(spec, 0);
17532 if(param->declarator)
17533 ProcessDeclarator(param->declarator);
17541 extern struct Identifier * CopyIdentifier(struct Identifier * id);
17543 extern void FreeInitDeclarator(struct InitDeclarator * decl);
17545 static void ProcessDeclaration(struct Declaration * decl)
17547 yylloc = decl->loc;
17552 unsigned int declareStruct = 0;
17554 if(decl->__anon1.__anon1.declarators)
17556 struct InitDeclarator * d;
17558 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17560 struct Type * type, * subType;
17562 ProcessDeclarator(d->declarator);
17563 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17566 ProcessInitializer(d->initializer, type);
17567 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
17569 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
17571 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
17573 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
17574 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
17575 if(decl->__anon1.__anon1.specifiers)
17576 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
17577 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
17580 decl->__anon1.inst = inst;
17584 for(subType = type; subType; )
17586 if(subType->kind == 8)
17591 else if(subType->kind == 13)
17593 else if(subType->kind == 12)
17594 subType = subType->__anon1.__anon4.arrayType;
17603 if(decl->__anon1.__anon1.specifiers)
17605 struct Specifier * s;
17607 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
17609 ProcessSpecifier(s, declareStruct);
17616 ProcessInstantiationType(decl->__anon1.inst);
17621 struct Specifier * spec;
17622 struct Declarator * d;
17623 unsigned int declareStruct = 0;
17625 if(decl->__anon1.__anon1.declarators)
17627 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17629 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17630 struct Type * subType;
17632 ProcessDeclarator(d);
17633 for(subType = type; subType; )
17635 if(subType->kind == 8)
17640 else if(subType->kind == 13)
17642 else if(subType->kind == 12)
17643 subType = subType->__anon1.__anon4.arrayType;
17650 if(decl->__anon1.__anon1.specifiers)
17652 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
17653 ProcessSpecifier(spec, declareStruct);
17660 static struct FunctionDefinition * curFunction;
17662 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
17664 char propName[1024], propNameM[1024];
17665 char getName[1024], setName[1024];
17666 struct __ecereNameSpace__ecere__sys__OldList * args;
17668 DeclareProperty(prop, setName, getName);
17669 strcpy(propName, "__ecereProp_");
17670 FullClassNameCat(propName, prop->_class->fullName, 0);
17671 strcat(propName, "_");
17672 FullClassNameCat(propName, prop->name, 1);
17673 strcpy(propNameM, "__ecerePropM_");
17674 FullClassNameCat(propNameM, prop->_class->fullName, 0);
17675 strcat(propNameM, "_");
17676 FullClassNameCat(propNameM, prop->name, 1);
17677 if(prop->isWatchable)
17680 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17681 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17682 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17684 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17685 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17686 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17690 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17691 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17692 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17694 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17695 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17696 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17698 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
17699 curFunction->propSet->fireWatchersDone = 1;
17702 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
17704 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
17706 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
17708 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
17710 extern struct Statement * MkWhileStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement);
17712 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
17714 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
17716 extern void FreePropertyWatch(struct PropertyWatch * watcher);
17718 static void ProcessStatement(struct Statement * stmt)
17720 yylloc = stmt->loc;
17724 ProcessStatement(stmt->__anon1.labeled.stmt);
17727 if(stmt->__anon1.caseStmt.exp)
17729 FreeType(stmt->__anon1.caseStmt.exp->destType);
17730 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
17732 curSwitchType->refCount++;
17733 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
17734 ComputeExpression(stmt->__anon1.caseStmt.exp);
17736 if(stmt->__anon1.caseStmt.stmt)
17737 ProcessStatement(stmt->__anon1.caseStmt.stmt);
17741 if(stmt->__anon1.compound.context)
17743 struct Declaration * decl;
17744 struct Statement * s;
17745 struct Statement * prevCompound = curCompound;
17746 struct Context * prevContext = curContext;
17748 if(!stmt->__anon1.compound.isSwitch)
17749 curCompound = stmt;
17750 curContext = stmt->__anon1.compound.context;
17751 if(stmt->__anon1.compound.declarations)
17753 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
17754 ProcessDeclaration(decl);
17756 if(stmt->__anon1.compound.statements)
17758 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
17759 ProcessStatement(s);
17761 curContext = prevContext;
17762 curCompound = prevCompound;
17768 struct Expression * exp;
17770 if(stmt->__anon1.expressions)
17772 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
17773 ProcessExpressionType(exp);
17779 struct Expression * exp;
17781 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
17782 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
17783 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
17784 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
17786 ProcessExpressionType(exp);
17788 if(stmt->__anon1.ifStmt.stmt)
17789 ProcessStatement(stmt->__anon1.ifStmt.stmt);
17790 if(stmt->__anon1.ifStmt.elseStmt)
17791 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
17796 struct Type * oldSwitchType = curSwitchType;
17798 if(stmt->__anon1.switchStmt.exp)
17800 struct Expression * exp;
17802 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
17806 ProcessExpressionType(exp);
17809 curSwitchType = exp->expType;
17812 ProcessStatement(stmt->__anon1.switchStmt.stmt);
17813 curSwitchType = oldSwitchType;
17818 if(stmt->__anon1.whileStmt.exp)
17820 struct Expression * exp;
17822 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
17823 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
17824 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
17825 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
17827 ProcessExpressionType(exp);
17830 if(stmt->__anon1.whileStmt.stmt)
17831 ProcessStatement(stmt->__anon1.whileStmt.stmt);
17836 if(stmt->__anon1.doWhile.exp)
17838 struct Expression * exp;
17840 if((*stmt->__anon1.doWhile.exp).last)
17842 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
17843 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
17844 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
17846 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
17848 ProcessExpressionType(exp);
17851 if(stmt->__anon1.doWhile.stmt)
17852 ProcessStatement(stmt->__anon1.doWhile.stmt);
17857 struct Expression * exp;
17859 if(stmt->__anon1.forStmt.init)
17860 ProcessStatement(stmt->__anon1.forStmt.init);
17861 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
17863 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
17864 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
17865 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
17867 if(stmt->__anon1.forStmt.check)
17868 ProcessStatement(stmt->__anon1.forStmt.check);
17869 if(stmt->__anon1.forStmt.increment)
17871 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
17872 ProcessExpressionType(exp);
17874 if(stmt->__anon1.forStmt.stmt)
17875 ProcessStatement(stmt->__anon1.forStmt.stmt);
17880 struct Identifier * id = stmt->__anon1.forEachStmt.id;
17881 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
17882 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
17883 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
17884 char iteratorType[1024];
17885 struct Type * source;
17886 struct Expression * e;
17887 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));
17888 struct Expression * arrayExp;
17889 const char * typeString = (((void *)0));
17890 int builtinCount = 0;
17892 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
17896 FreeType(e->destType);
17897 e->destType = ProcessTypeString("Container", 0);
17899 if(!isBuiltin || e->next)
17900 ProcessExpressionType(e);
17902 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
17903 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)))
17905 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
17906 struct Symbol * symbol;
17907 struct Expression * expIt = (((void *)0));
17908 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
17909 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
17910 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
17911 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
17914 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
17915 stmt->__anon1.compound.context->parent = curContext;
17916 curContext = stmt->__anon1.compound.context;
17917 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
17919 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
17921 isCustomAVLTree = 1;
17922 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
17925 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
17927 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
17929 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
17932 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
17936 struct Declarator * decl;
17937 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17939 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
17940 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
17941 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
17945 struct Type * type = (((void *)0));
17946 char typeStringBuf[1024];
17948 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
17949 if(((struct Expression *)(*exp).last)->type == 11)
17951 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
17954 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
17956 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)
17958 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
17960 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
17962 else if(arrayExp->__anon1.list)
17964 struct Expression * e;
17966 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
17968 ProcessExpressionType(e);
17978 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17982 e->expType = (((void *)0));
17983 e = (*arrayExp->__anon1.list).first;
17984 ProcessExpressionType(e);
17987 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17989 FreeType(e->expType);
17990 e->expType = (((void *)0));
17992 type = (((void *)0));
18000 FreeType(e->expType);
18001 e->expType = (((void *)0));
18007 typeStringBuf[0] = '\0';
18008 PrintType(type, typeStringBuf, 0, 1);
18009 typeString = typeStringBuf;
18015 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18016 struct Declarator * decl;
18017 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18019 if(arrayExp->__anon1.list)
18021 struct Expression * e;
18023 builtinCount = (*arrayExp->__anon1.list).count;
18024 type = ProcessTypeString(typeString, 0);
18025 while((e = (*arrayExp->__anon1.list).first))
18027 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
18028 e->destType = type;
18030 ProcessExpressionType(e);
18031 ListAdd(initializers, MkInitializerAssignment(e));
18034 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
18036 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
18037 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
18038 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
18039 FreeList(exp, (void *)(FreeExpression));
18043 arrayExp->expType = ProcessTypeString("Container", 0);
18044 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18047 else if(isLinkList && !isList)
18049 struct Declarator * decl;
18050 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18052 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
18053 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
18054 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
18056 else if(_class->templateArgs)
18059 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
18061 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
18062 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)))))))));
18064 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
18067 switch(block->type)
18070 if(block->__anon1.compound.context)
18071 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18074 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
18075 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18076 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
18077 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18080 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
18081 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18084 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
18085 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18088 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
18089 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18092 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
18093 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18096 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
18097 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18103 block = MkIfStmt(filter, block, (((void *)0)));
18107 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));
18108 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18109 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18110 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18116 sprintf(count, "%d", builtinCount);
18117 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));
18118 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18119 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18120 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18122 else if(isLinkList && !isList)
18124 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
18125 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
18127 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
18129 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));
18133 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18134 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18136 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));
18138 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18139 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18140 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18144 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
18146 ProcessExpressionType(expIt);
18147 if((*stmt->__anon1.compound.declarations).first)
18148 ProcessDeclaration((*stmt->__anon1.compound.declarations).first);
18150 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
18151 ProcessStatement(stmt);
18152 curContext = stmt->__anon1.compound.context->parent;
18157 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
18169 struct Expression * exp;
18171 if(stmt->__anon1.expressions)
18173 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
18177 if(curFunction && !curFunction->type)
18178 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
18179 FreeType(exp->destType);
18180 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
18182 exp->destType->refCount++;
18184 ProcessExpressionType(exp);
18191 ProcessDeclaration(stmt->__anon1.decl);
18196 struct AsmField * field;
18198 if(stmt->__anon1.asmStmt.inputFields)
18200 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
18201 if(field->expression)
18202 ProcessExpressionType(field->expression);
18204 if(stmt->__anon1.asmStmt.outputFields)
18206 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
18207 if(field->expression)
18208 ProcessExpressionType(field->expression);
18210 if(stmt->__anon1.asmStmt.clobberedFields)
18212 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
18214 if(field->expression)
18215 ProcessExpressionType(field->expression);
18222 struct PropertyWatch * propWatch;
18223 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18224 struct Expression * object = stmt->__anon1._watch.object;
18225 struct Expression * watcher = stmt->__anon1._watch.watcher;
18228 ProcessExpressionType(watcher);
18230 ProcessExpressionType(object);
18233 if(watcher || thisClass)
18235 struct External * external = curExternal;
18236 struct Context * context = curContext;
18239 stmt->__anon1.expressions = MkList();
18240 curExternal = external->prev;
18241 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18243 struct ClassFunction * func;
18244 char watcherName[1024];
18245 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;
18246 struct External * createdExternal;
18247 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
18249 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
18250 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
18251 if(propWatch->deleteWatch)
18252 strcat(watcherName, "_delete");
18255 struct Identifier * propID;
18257 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18259 strcat(watcherName, "_");
18260 strcat(watcherName, propID->string);
18263 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
18265 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)));
18266 ProcessClassFunctionBody(func, propWatch->compound);
18267 propWatch->compound = (((void *)0));
18268 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
18269 createdExternal->symbol->idCode = external->symbol->idCode;
18270 curExternal = createdExternal;
18271 ProcessFunction(createdExternal->__anon1.function);
18273 struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(createdExternal->__anon1.function->declarator), (((void *)0)))));
18275 externalDecl->__anon1.declaration = decl;
18276 if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
18277 decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
18279 if(propWatch->deleteWatch)
18281 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18283 ListAdd(args, CopyExpression(object));
18284 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18285 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
18286 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
18290 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
18291 struct Identifier * propID;
18293 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18295 char propName[1024];
18296 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18300 char getName[1024], setName[1024];
18301 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18303 DeclareProperty(prop, setName, getName);
18304 strcpy(propName, "__ecereProp_");
18305 FullClassNameCat(propName, prop->_class->fullName, 0);
18306 strcat(propName, "_");
18307 FullClassNameCat(propName, prop->name, 1);
18308 ListAdd(args, CopyExpression(object));
18309 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18310 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18311 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
18312 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
18315 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18320 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
18322 curExternal = external;
18323 curContext = context;
18325 FreeExpression(watcher);
18327 FreeExpression(object);
18328 FreeList(watches, (void *)(FreePropertyWatch));
18331 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a _class\n", (((void *)0))));
18335 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18337 ProcessStatement(propWatch->compound);
18344 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18345 struct Expression * object = stmt->__anon1._watch.object;
18346 struct __ecereNameSpace__ecere__com__Class * _class;
18349 ProcessExpressionType(object);
18352 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
18355 struct Identifier * propID;
18358 stmt->__anon1.expressions = MkList();
18359 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
18361 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
18368 for(propID = (*watches).first; propID; propID = propID->next)
18370 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18374 CreateFireWatcher(prop, object, stmt);
18377 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18382 struct __ecereNameSpace__ecere__com__Property * prop;
18383 struct __ecereNameSpace__ecere__com__Class * base;
18385 for(base = _class; base; base = base->base)
18387 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
18389 if(prop->isProperty && prop->isWatchable)
18391 CreateFireWatcher(prop, object, stmt);
18397 FreeExpression(object);
18398 FreeList(watches, (void *)(FreeIdentifier));
18401 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18407 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18408 struct Expression * object = stmt->__anon1._watch.object;
18409 struct Expression * watcher = stmt->__anon1._watch.watcher;
18410 struct __ecereNameSpace__ecere__com__Class * _class;
18413 ProcessExpressionType(object);
18415 ProcessExpressionType(watcher);
18418 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
18419 if(watcher || thisClass)
18423 struct Identifier * propID;
18426 stmt->__anon1.expressions = MkList();
18429 struct __ecereNameSpace__ecere__sys__OldList * args;
18432 ListAdd(args, CopyExpression(object));
18433 ListAdd(args, MkExpConstant("0"));
18434 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18435 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18439 for(propID = (*watches).first; propID; propID = propID->next)
18441 char propName[1024];
18442 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18446 char getName[1024], setName[1024];
18447 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18449 DeclareProperty(prop, setName, getName);
18450 strcpy(propName, "__ecereProp_");
18451 FullClassNameCat(propName, prop->_class->fullName, 0);
18452 strcat(propName, "_");
18453 FullClassNameCat(propName, prop->name, 1);
18454 ListAdd(args, CopyExpression(object));
18455 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18456 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18457 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18460 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18464 FreeExpression(object);
18466 FreeExpression(watcher);
18467 FreeList(watches, (void *)(FreeIdentifier));
18470 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18473 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
18480 extern struct Expression * QBrackets(struct Expression * exp);
18482 extern struct TypeName * QMkType(const char * spec, struct Declarator * decl);
18484 extern struct Declarator * QMkPtrDecl(const char * id);
18486 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
18488 extern struct Expression * QMkExpCond(struct Expression * cond, struct Expression * exp, struct Expression * elseExp);
18490 extern struct Statement * MkFireWatchersStmt(struct Expression * object, struct __ecereNameSpace__ecere__sys__OldList * watches);
18492 static void ProcessFunction(struct FunctionDefinition * function)
18494 struct Identifier * id = GetDeclId(function->declarator);
18495 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
18496 struct Type * type = symbol ? symbol->type : (((void *)0));
18497 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
18498 struct Context * oldTopContext = topContext;
18500 yylloc = function->loc;
18501 if(type && type->__anon1.__anon2.thisClass)
18503 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
18504 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
18505 char className[1024];
18506 char structName[1024];
18507 struct Declarator * funcDecl;
18508 struct Symbol * thisSymbol;
18509 unsigned int typedObject = 0;
18511 if(_class && !_class->base)
18513 _class = currentClass;
18514 if(_class && !_class->symbol)
18515 _class->symbol = FindClass(_class->fullName);
18516 classSym = _class ? _class->symbol : (((void *)0));
18519 thisClass = _class;
18520 if(inCompiler && _class)
18522 if(type->kind == 11)
18524 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
18526 struct Type * param = symbol->type->__anon1.__anon2.params.first;
18528 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
18531 if(type->classObjectType != 1)
18533 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
18534 symbol->type->__anon1.__anon2.staticMethod = 1;
18535 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
18536 symbol->type->extraParam = 0;
18539 strcpy(className, "__ecereClass_");
18540 FullClassNameCat(className, _class->fullName, 1);
18541 structName[0] = (char)0;
18542 FullClassNameCat(structName, _class->fullName, 0);
18543 funcDecl = GetFuncDecl(function->declarator);
18546 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18548 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18550 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18552 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18553 FreeTypeName(param);
18556 if(!function->propertyNoThis)
18558 struct TypeName * thisParam = (((void *)0));
18560 if(type->classObjectType != 1)
18562 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18563 if(!funcDecl->__anon1.function.parameters)
18564 funcDecl->__anon1.function.parameters = MkList();
18565 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18569 if(type->classObjectType != 1)
18571 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
18572 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
18574 thisParam = __extension__ ({
18575 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
18577 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
18579 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18583 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18585 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18587 funcDecl = GetFuncDecl(initDecl->declarator);
18590 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18592 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18594 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18596 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18597 FreeTypeName(param);
18600 if(type->classObjectType != 1)
18602 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
18604 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18606 if(!funcDecl->__anon1.function.parameters)
18607 funcDecl->__anon1.function.parameters = MkList();
18608 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18616 if(type->classObjectType != 1)
18618 thisSymbol = __extension__ ({
18619 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
18621 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
18623 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18624 if(typedObject && thisSymbol->type)
18626 thisSymbol->type->classObjectType = 2;
18627 thisSymbol->type->byReference = type->byReference;
18628 thisSymbol->type->typedByReference = type->byReference;
18632 if(inCompiler && _class && (_class->type == 0) && type->classObjectType != 1)
18634 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
18637 struct __ecereNameSpace__ecere__com__Class * base;
18639 for(base = _class; base && base->type != 1000; base = base->next)
18641 for(member = base->membersAndProperties.first; member; member = member->next)
18642 if(!member->isProperty)
18648 for(member = _class->membersAndProperties.first; member; member = member->next)
18649 if(!member->isProperty)
18653 char pointerName[1024];
18654 struct Declaration * decl;
18655 struct Initializer * initializer;
18656 struct Expression * exp, * bytePtr;
18658 strcpy(pointerName, "__ecerePointer_");
18659 FullClassNameCat(pointerName, _class->fullName, 0);
18661 char className[1024];
18663 strcpy(className, "__ecereClass_");
18664 FullClassNameCat(className, classSym->string, 1);
18665 DeclareClass(classSym, className);
18667 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
18672 sprintf(string, "%d", _class->offset);
18673 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpConstant(string)));
18677 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
18679 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
18680 exp->expType = __extension__ ({
18681 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18683 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
18684 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18686 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
18687 }), __ecereInstance2;
18691 yylloc = function->body->loc;
18692 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
18694 struct Context * prevContext = curContext;
18695 struct __ecereNameSpace__ecere__sys__OldList * list;
18697 curContext = function->body->__anon1.compound.context;
18698 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
18699 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
18700 curContext = prevContext;
18702 decl->symbol = (((void *)0));
18703 if(!function->body->__anon1.compound.declarations)
18704 function->body->__anon1.compound.declarations = MkList();
18705 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
18711 thisClass = (((void *)0));
18714 FreeSpecifier(id->_class);
18715 id->_class = (((void *)0));
18716 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18718 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18720 id = GetDeclId(initDecl->declarator);
18721 FreeSpecifier(id->_class);
18722 id->_class = (((void *)0));
18726 topContext = function->body->__anon1.compound.context;
18728 struct FunctionDefinition * oldFunction = curFunction;
18730 curFunction = function;
18732 ProcessStatement(function->body);
18733 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
18735 struct Statement * prevCompound = curCompound;
18736 struct Context * prevContext = curContext;
18737 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
18739 if(!function->body->__anon1.compound.statements)
18740 function->body->__anon1.compound.statements = MkList();
18741 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
18742 curCompound = function->body;
18743 curContext = function->body->__anon1.compound.context;
18744 ProcessStatement(fireWatchers);
18745 curContext = prevContext;
18746 curCompound = prevCompound;
18748 curFunction = oldFunction;
18750 if(function->declarator)
18752 ProcessDeclarator(function->declarator);
18754 topContext = oldTopContext;
18755 thisClass = oldThisClass;
18758 extern void FreeSymbol(struct Symbol * symbol);
18760 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
18762 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
18764 struct ClassDef * def;
18765 struct External * external = curExternal;
18766 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
18768 for(def = definitions->first; def; def = def->next)
18772 if(def->__anon1.function->declarator)
18773 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
18775 curExternal = external;
18776 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
18778 else if(def->type == 2)
18780 if(def->__anon1.decl->type == 2)
18782 thisClass = regClass;
18783 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
18784 thisClass = (((void *)0));
18788 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
18791 thisClass = regClass;
18792 ProcessDeclaration(def->__anon1.decl);
18793 thisClass = backThisClass;
18796 else if(def->type == 1 && def->__anon1.defProperties)
18798 struct MemberInit * defProperty;
18799 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);
18801 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18802 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
18804 thisClass = regClass;
18805 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
18806 thisClass = (((void *)0));
18808 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18809 FreeSymbol(thisSymbol);
18811 else if(def->type == 3 && def->__anon1.propertyDef)
18813 struct PropertyDef * prop = def->__anon1.propertyDef;
18815 thisClass = regClass;
18820 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18822 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18824 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
18825 ProcessStatement(prop->setStmt);
18831 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18833 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18835 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
18836 ProcessStatement(prop->getStmt);
18838 if(prop->issetStmt)
18842 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18844 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18846 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
18847 ProcessStatement(prop->issetStmt);
18849 thisClass = (((void *)0));
18851 else if(def->type == 4 && def->__anon1.propertyWatch)
18853 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
18855 thisClass = regClass;
18856 if(propertyWatch->compound)
18858 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);
18860 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18861 curExternal = (((void *)0));
18862 ProcessStatement(propertyWatch->compound);
18864 thisClass = (((void *)0));
18869 void DeclareFunctionUtil(const char * s)
18871 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
18878 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
18879 strcpy(name, "__ecereFunction_");
18880 FullClassNameCat(name, s, 0);
18881 DeclareFunction(function, name);
18885 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
18887 void ComputeDataTypes()
18889 struct External * external;
18890 struct External * temp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_External);
18891 struct External * after = (((void *)0));
18893 currentClass = (((void *)0));
18894 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
18895 for(external = (*ast).first; external; external = external->next)
18897 if(external->type == 1)
18899 struct Declaration * decl = external->__anon1.declaration;
18903 struct __ecereNameSpace__ecere__sys__OldList * decls = decl->__anon1.__anon1.declarators;
18907 struct InitDeclarator * initDecl = (*decls).first;
18911 struct Declarator * declarator = initDecl->declarator;
18913 if(declarator && declarator->type == 1)
18915 struct Identifier * id = declarator->__anon1.identifier;
18917 if(id && id->string)
18919 if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t") || !strcmp(id->string, "size_t") || !strcmp(id->string, "ssize_t"))
18921 external->symbol->id = -1001, external->symbol->idCode = -1001;
18932 struct External * e = MkExternalDeclaration(MkDeclaration(MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Instance"), (((void *)0)))), (((void *)0))));
18934 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, e);
18937 temp->symbol = __extension__ ({
18938 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
18940 __ecereInstance1->id = -1000, __ecereInstance1->idCode = -1000, __ecereInstance1;
18942 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, temp);
18943 curExternal = temp;
18944 DeclareFunctionUtil("eSystem_New");
18945 DeclareFunctionUtil("eSystem_New0");
18946 DeclareFunctionUtil("eSystem_Renew");
18947 DeclareFunctionUtil("eSystem_Renew0");
18948 DeclareFunctionUtil("eSystem_Delete");
18949 DeclareFunctionUtil("eClass_GetProperty");
18950 DeclareFunctionUtil("eClass_SetProperty");
18951 DeclareFunctionUtil("eInstance_FireSelfWatchers");
18952 DeclareFunctionUtil("eInstance_SetMethod");
18953 DeclareFunctionUtil("eInstance_IncRef");
18954 DeclareFunctionUtil("eInstance_StopWatching");
18955 DeclareFunctionUtil("eInstance_Watch");
18956 DeclareFunctionUtil("eInstance_FireWatchers");
18957 DeclareStruct("ecere::com::Class", 0);
18958 DeclareStruct("ecere::com::Instance", 0);
18959 DeclareStruct("ecere::com::Property", 0);
18960 DeclareStruct("ecere::com::DataMember", 0);
18961 DeclareStruct("ecere::com::Method", 0);
18962 DeclareStruct("ecere::com::SerialBuffer", 0);
18963 DeclareStruct("ecere::com::ClassTemplateArgument", 0);
18964 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), temp);
18965 for(external = (*ast).first; external; external = external->next)
18967 afterExternal = curExternal = external;
18968 if(external->type == 0)
18970 currentClass = external->__anon1.function->_class;
18971 ProcessFunction(external->__anon1.function);
18973 else if(external->type == 1)
18975 currentClass = (((void *)0));
18976 if(external->__anon1.declaration)
18977 ProcessDeclaration(external->__anon1.declaration);
18979 else if(external->type == 2)
18981 struct ClassDefinition * _class = external->__anon1._class;
18983 currentClass = external->symbol->__anon1.registered;
18984 if(_class->definitions)
18986 ProcessClass(_class->definitions, _class->symbol);
18990 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
18991 ((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
18994 else if(external->type == 4)
18996 thisNameSpace = external->__anon1.id->string;
18999 currentClass = (((void *)0));
19000 thisNameSpace = (((void *)0));
19001 curExternal = (((void *)0));
19002 ((temp->symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)temp->symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp->symbol)) : 0), temp->symbol = 0);
19003 ((temp ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)temp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp)) : 0), temp = 0);
19006 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);
19008 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);
19010 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
19012 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19014 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19016 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19017 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19018 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19019 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19020 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19021 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19022 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19023 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19024 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19025 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19026 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19027 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19028 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19029 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19030 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19031 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19032 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19033 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19034 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19035 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19036 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19037 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19038 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19039 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19040 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19041 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19042 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19043 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19044 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19045 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19046 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19047 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19048 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19049 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19050 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19051 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19052 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19053 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19054 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19055 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19056 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19057 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19058 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19059 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19060 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19061 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19062 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19063 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19064 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19065 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("AddMembers", "int AddMembers(ecere::sys::OldList * declarations, ecere::com::Class _class, bool isMember, uint * retSize, ecere::com::Class topClass, bool * addedPadding)", AddMembers, module, 2);
19066 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "void DeclareStruct(const char * name, bool skipNoHead)", DeclareStruct, module, 2);
19067 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19068 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19069 __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);
19070 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19071 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19072 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19073 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19074 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19075 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19076 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19077 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19078 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19079 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19080 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19081 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(GlobalData data)", DeclareGlobalData, module, 2);
19082 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19083 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
19084 __ecereClass_Conversion = class;
19085 __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);
19086 __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);
19087 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19088 __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);
19089 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19090 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19091 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19092 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19093 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19094 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19095 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19096 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19097 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19098 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19099 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19100 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19101 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19102 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19103 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19104 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19105 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19106 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19107 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19108 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19109 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(const String s)", DeclareFunctionUtil, module, 1);
19110 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
19113 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)