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 if(!(dest->__anon1.type && dest->__anon1.type->kind == 13 && source->__anon1.type->kind == 8 && source->__anon1.type->__anon1._class && source->__anon1.type->__anon1._class->__anon1.registered && (source->__anon1.type->__anon1._class->__anon1.registered->type != 0 && source->__anon1.type->__anon1._class->__anon1.registered->type != 5) && !source->__anon1.type->byReference))
5378 ComputeTypeSize(source->__anon1.type);
5379 ComputeTypeSize(dest->__anon1.type);
5380 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))
5388 static void FreeConvert(struct Conversion * convert)
5390 if(convert->resultType)
5391 FreeType(convert->resultType);
5394 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BTNamedLink;
5396 struct __ecereNameSpace__ecere__com__BTNamedLink
5399 struct __ecereNameSpace__ecere__com__BTNamedLink * parent;
5400 struct __ecereNameSpace__ecere__com__BTNamedLink * left;
5401 struct __ecereNameSpace__ecere__com__BTNamedLink * right;
5404 } __attribute__ ((gcc_struct));
5406 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__EnumClassData;
5408 struct __ecereNameSpace__ecere__com__EnumClassData
5410 struct __ecereNameSpace__ecere__sys__OldList values;
5412 } __attribute__ ((gcc_struct));
5414 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedLink64;
5416 struct __ecereNameSpace__ecere__sys__NamedLink64
5418 struct __ecereNameSpace__ecere__sys__NamedLink64 * prev;
5419 struct __ecereNameSpace__ecere__sys__NamedLink64 * next;
5422 } __attribute__ ((gcc_struct));
5424 extern unsigned int inPreCompiler;
5426 extern unsigned int inDebugger;
5428 extern void FreeExpContents(struct Expression * exp);
5430 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_Get_first(struct __ecereNameSpace__ecere__sys__BinaryTree * this);
5432 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BinaryTree_first;
5434 struct __ecereNameSpace__ecere__sys__BTNode * __ecereProp___ecereNameSpace__ecere__sys__BTNode_Get_next(struct __ecereNameSpace__ecere__sys__BTNode * this);
5436 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__sys__BTNode_next;
5438 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (* freeFn)(void * ));
5440 unsigned int MatchWithEnums_NameSpace(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
5442 struct __ecereNameSpace__ecere__com__BTNamedLink * link;
5444 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)))
5446 struct __ecereNameSpace__ecere__com__Class * _class = link->data;
5448 if(_class->type == 4)
5450 struct __ecereNameSpace__ecere__sys__OldList converts =
5454 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5458 _class->symbol = FindClass(_class->fullName);
5459 type->__anon1._class = _class->symbol;
5460 if(MatchTypes(type, dest, &converts, (((void *)0)), (((void *)0)), dest->kind != 8 || !dest->__anon1._class || strcmp(dest->__anon1._class->string, "bool"), 0, 0, 0, 0))
5462 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
5463 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5467 struct __ecereNameSpace__ecere__com__Class * baseClass;
5469 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
5471 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
5473 for(value = e->values.first; value; value = value->next)
5475 if(!strcmp(value->name, string))
5480 FreeType(sourceExp->expType);
5481 sourceExp->isConstant = 1;
5482 sourceExp->expType = MkClassType(baseClass->fullName);
5483 if(inCompiler || inPreCompiler || inDebugger)
5487 FreeExpContents(sourceExp);
5488 sourceExp->type = 2;
5489 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "short") || !strcmp(baseClass->dataTypeString, "char"))
5490 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
5492 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64XLL" : "0x%llXLL"), value->data);
5493 sourceExp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
5495 while(converts.first)
5497 struct Conversion * convert = converts.first;
5499 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&converts, convert);
5500 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(conversions, convert);
5502 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
5509 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
5510 ((type ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)type) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(type)) : 0), type = 0);
5513 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)))
5514 if(MatchWithEnums_NameSpace(nameSpace, sourceExp, dest, string, conversions))
5519 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SubModule;
5521 struct __ecereNameSpace__ecere__com__SubModule
5523 struct __ecereNameSpace__ecere__com__SubModule * prev;
5524 struct __ecereNameSpace__ecere__com__SubModule * next;
5525 struct __ecereNameSpace__ecere__com__Instance * module;
5527 } __attribute__ ((gcc_struct));
5529 unsigned int ModuleVisibility(struct __ecereNameSpace__ecere__com__Instance * searchIn, struct __ecereNameSpace__ecere__com__Instance * searchFor)
5531 struct __ecereNameSpace__ecere__com__SubModule * subModule;
5533 if(searchFor == searchIn)
5535 for(subModule = ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->modules.first; subModule; subModule = subModule->next)
5537 if(subModule->importMode == 1 || searchIn == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)searchIn + structSize_Instance)))->application)
5539 if(ModuleVisibility(subModule->module, searchFor))
5546 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Application;
5548 struct __ecereNameSpace__ecere__com__Application
5551 const char * * argv;
5553 unsigned int isGUIApp;
5554 struct __ecereNameSpace__ecere__sys__OldList allModules;
5555 char * parsedCommand;
5556 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
5557 } __attribute__ ((gcc_struct));
5559 unsigned int MatchWithEnums_Module(struct __ecereNameSpace__ecere__com__Instance * mainModule, struct Expression * sourceExp, struct Type * dest, char * string, struct __ecereNameSpace__ecere__sys__OldList * conversions)
5561 struct __ecereNameSpace__ecere__com__Instance * module;
5563 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))
5565 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))
5567 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))
5569 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)
5571 if(ModuleVisibility(mainModule, module) && MatchWithEnums_NameSpace(&((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->publicNameSpace, sourceExp, dest, string, conversions))
5577 extern struct Expression * CopyExpression(struct Expression * exp);
5579 extern unsigned long strtoul(const char * nptr, char * * endptr, int base);
5581 void ReadString(char * output, char * string);
5583 extern struct Specifier * MkEnum(struct Identifier * id, struct __ecereNameSpace__ecere__sys__OldList * list);
5585 extern struct TypeName * QMkClass(const char * spec, struct Declarator * decl);
5587 extern struct Expression * MkExpBrackets(struct __ecereNameSpace__ecere__sys__OldList * expressions);
5589 unsigned int MatchTypeExpression(struct Expression * sourceExp, struct Type * dest, struct __ecereNameSpace__ecere__sys__OldList * conversions, unsigned int skipUnitBla, unsigned int warnConst)
5591 struct Type * source;
5592 struct Type * realDest = dest;
5593 struct Type * backupSourceExpType = (((void *)0));
5594 struct Expression * computedExp = sourceExp;
5597 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)
5599 computedExp = CopyExpression(sourceExp);
5600 ComputeExpression(computedExp);
5602 source = sourceExp->expType;
5603 if(dest->kind == 13 && sourceExp->type == 2 && !strtoul(sourceExp->__anon1.__anon1.constant, (((void *)0)), 0))
5605 if(computedExp != sourceExp)
5607 FreeExpression(computedExp);
5608 computedExp = sourceExp;
5613 if(!skipUnitBla && source && dest && source->kind == 8 && dest->kind == 8)
5615 if(source->__anon1._class && source->__anon1._class->__anon1.registered && source->__anon1._class->__anon1.registered->type == 3)
5617 struct __ecereNameSpace__ecere__com__Class * sourceBase, * destBase;
5619 for(sourceBase = source->__anon1._class->__anon1.registered; sourceBase && sourceBase->base && sourceBase->base->type != 1000; sourceBase = sourceBase->base)
5621 for(destBase = dest->__anon1._class->__anon1.registered; destBase && destBase->base && destBase->base->type != 1000; destBase = destBase->base)
5623 if(sourceBase == destBase)
5625 if(computedExp != sourceExp)
5627 FreeExpression(computedExp);
5628 computedExp = sourceExp;
5637 struct __ecereNameSpace__ecere__sys__OldList * specs;
5638 unsigned int flag = 0;
5639 long long value = (((int)0x7fffffff));
5642 if(computedExp->type == 2)
5644 if(source->isSigned)
5645 value = strtoll(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
5647 value = strtoull(computedExp->__anon1.__anon1.constant, (((void *)0)), 0);
5649 else if(computedExp->type == 4 && sourceExp->__anon1.op.op == '-' && !computedExp->__anon1.op.exp1 && computedExp->__anon1.op.exp2 && computedExp->__anon1.op.exp2->type == 2)
5651 if(source->isSigned)
5652 value = -strtoll(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
5654 value = -strtoull(computedExp->__anon1.op.exp2->__anon1.__anon1.constant, (((void *)0)), 0);
5656 if(computedExp != sourceExp)
5658 FreeExpression(computedExp);
5659 computedExp = sourceExp;
5661 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"))
5664 source = __extension__ ({
5665 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5667 __ecereInstance1->kind = 3, __ecereInstance1->isSigned = 0, __ecereInstance1->refCount = 1, __ecereInstance1;
5672 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
5674 if(_class && _class->type == 3)
5676 if(source->kind != 8)
5678 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5679 struct Type * tempDest, * tempSource;
5681 for(; _class->base->type != 1000; _class = _class->base)
5684 tempDest = tempType;
5687 _class->symbol = FindClass(_class->fullName);
5688 tempType->__anon1._class = _class->symbol;
5689 tempType->truth = dest->truth;
5690 if(tempType->__anon1._class)
5691 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
5692 backupSourceExpType = sourceExp->expType;
5693 if(dest->passAsTemplate)
5695 sourceExp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5696 CopyTypeInto(sourceExp->expType, dest);
5697 sourceExp->expType->passAsTemplate = 0;
5701 sourceExp->expType = dest;
5705 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5708 if(_class && _class->type == 2 && source->kind != 8)
5710 if(!dest->__anon1._class->__anon1.registered->dataType)
5711 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
5712 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5715 FreeType(sourceExp->expType);
5716 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
5720 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
5722 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
5723 struct Declarator * decl;
5726 ReadString(string, sourceExp->__anon1.__anon2.string);
5727 decl = SpecDeclFromString(string, specs, (((void *)0)));
5728 FreeExpContents(sourceExp);
5729 FreeType(sourceExp->expType);
5730 sourceExp->type = 24;
5731 sourceExp->__anon1._classExp.specifiers = specs;
5732 sourceExp->__anon1._classExp.decl = decl;
5733 sourceExp->expType = dest;
5737 if(backupSourceExpType)
5738 FreeType(backupSourceExpType);
5742 else if(source->kind == 8)
5744 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
5746 if(_class && (_class->type == 3 || _class->type == 2))
5750 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5751 struct Type * tempDest, * tempSource;
5753 if(!source->__anon1._class->__anon1.registered->dataType)
5754 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
5755 for(; _class->base->type != 1000; _class = _class->base)
5758 tempSource = tempType;
5760 tempType->__anon1._class = FindClass(_class->fullName);
5761 tempType->truth = source->truth;
5762 tempType->classObjectType = source->classObjectType;
5763 if(tempType->__anon1._class)
5764 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
5765 if(conversions && conversions->last)
5767 ((struct Conversion *)conversions->last)->resultType = dest;
5770 FreeType(sourceExp->expType);
5771 sourceExp->expType = MkClassType(_class->fullName);
5772 sourceExp->expType->truth = source->truth;
5773 sourceExp->expType->classObjectType = source->classObjectType;
5774 if(!sourceExp->destType)
5776 FreeType(sourceExp->destType);
5777 sourceExp->destType = sourceExp->expType;
5778 if(sourceExp->expType)
5779 sourceExp->expType->refCount++;
5781 if(!_class->dataType)
5782 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5784 dest = MkClassType(source->__anon1._class->string);
5785 dest->truth = source->truth;
5786 dest->classObjectType = source->classObjectType;
5788 source = _class->dataType;
5790 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5796 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5805 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
5806 unsigned int fittingValue = 0;
5808 if(_class && _class->type == 4)
5810 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5811 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
5813 if(c && value >= 0 && value <= c->largest)
5816 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
5818 if(_class->type == 0 || _class->type == 5)
5820 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5822 *newExp = *sourceExp;
5823 if(sourceExp->destType)
5824 sourceExp->destType->refCount++;
5825 if(sourceExp->expType)
5826 sourceExp->expType->refCount++;
5827 sourceExp->type = 11;
5828 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
5829 sourceExp->__anon1.cast.exp = newExp;
5830 FreeType(sourceExp->expType);
5831 sourceExp->expType = (((void *)0));
5832 ProcessExpressionType(sourceExp);
5835 FreeType(sourceExp->expType);
5836 sourceExp->expType = dest;
5841 if(backupSourceExpType)
5842 FreeType(backupSourceExpType);
5845 if(!_class->dataType)
5846 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5848 dest = _class->dataType;
5851 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))
5853 specs = MkListOne(MkSpecifier(DOUBLE));
5855 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))
5857 specs = MkListOne(MkSpecifier(FLOAT));
5859 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))
5863 ListAdd(specs, MkSpecifier(UNSIGNED));
5864 ListAdd(specs, MkSpecifier(INT64));
5866 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
5870 ListAdd(specs, MkSpecifier(UNSIGNED));
5871 ListAdd(specs, MkSpecifier(INT));
5873 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5877 ListAdd(specs, MkSpecifier(UNSIGNED));
5878 ListAdd(specs, MkSpecifier(SHORT));
5880 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5884 ListAdd(specs, MkSpecifier(UNSIGNED));
5885 ListAdd(specs, MkSpecifier(CHAR));
5891 if(backupSourceExpType)
5893 if(sourceExp->expType)
5894 FreeType(sourceExp->expType);
5895 sourceExp->expType = backupSourceExpType;
5900 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))
5902 specs = MkListOne(MkSpecifier(DOUBLE));
5904 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))
5906 specs = MkListOne(MkSpecifier(FLOAT));
5908 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
5911 ListAdd(specs, MkSpecifier(BOOL));
5913 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)))
5917 ListAdd(specs, MkSpecifier(UNSIGNED));
5918 ListAdd(specs, MkSpecifier(CHAR));
5920 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)))))
5924 ListAdd(specs, MkSpecifier(UNSIGNED));
5925 ListAdd(specs, MkSpecifier(SHORT));
5927 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
5931 ListAdd(specs, MkSpecifier(UNSIGNED));
5932 ListAdd(specs, MkSpecifier(INT));
5934 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
5938 ListAdd(specs, MkSpecifier(UNSIGNED));
5939 ListAdd(specs, MkSpecifier(INT64));
5941 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
5943 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
5949 if(backupSourceExpType)
5951 if(sourceExp->expType)
5952 FreeType(sourceExp->expType);
5953 sourceExp->expType = backupSourceExpType;
5957 if(!flag && !sourceExp->opDestType)
5959 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5961 *newExp = *sourceExp;
5962 newExp->prev = (((void *)0));
5963 newExp->next = (((void *)0));
5964 if(sourceExp->destType)
5965 sourceExp->destType->refCount++;
5966 if(sourceExp->expType)
5967 sourceExp->expType->refCount++;
5968 sourceExp->type = 11;
5969 if(realDest->kind == 8)
5971 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
5972 FreeList(specs, (void *)(FreeSpecifier));
5975 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
5976 if(newExp->type == 4)
5978 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
5981 sourceExp->__anon1.cast.exp = newExp;
5982 FreeType(sourceExp->expType);
5983 sourceExp->expType = (((void *)0));
5984 ProcessExpressionType(sourceExp);
5987 FreeList(specs, (void *)(FreeSpecifier));
5990 if(backupSourceExpType)
5991 FreeType(backupSourceExpType);
5996 if(computedExp != sourceExp)
5998 FreeExpression(computedExp);
5999 computedExp = sourceExp;
6001 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
6002 sourceExp = (*sourceExp->__anon1.list).last;
6003 if(sourceExp->type == 0)
6005 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
6009 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
6011 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
6012 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
6016 for(; _class && _class->type == 4; _class = _class->base)
6018 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
6019 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
6021 for(value = e->values.first; value; value = value->next)
6023 if(!strcmp(value->name, id->string))
6028 FreeType(sourceExp->expType);
6029 sourceExp->isConstant = 1;
6030 sourceExp->expType = MkClassType(_class->fullName);
6031 if(inCompiler || inPreCompiler || inDebugger)
6033 FreeExpContents(sourceExp);
6034 sourceExp->type = 2;
6035 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
6036 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
6038 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
6047 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
6058 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6060 int value2 = op2->__anon1.i;
6063 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
6066 exp->expType = op1->type;
6068 op1->type->refCount++;
6073 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6075 unsigned int value2 = op2->__anon1.ui;
6078 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
6081 exp->expType = op1->type;
6083 op1->type->refCount++;
6088 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6090 long long value2 = op2->__anon1.i64;
6093 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
6096 exp->expType = op1->type;
6098 op1->type->refCount++;
6103 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6105 uint64 value2 = op2->__anon1.ui64;
6108 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
6111 exp->expType = op1->type;
6113 op1->type->refCount++;
6118 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6120 short value2 = op2->__anon1.s;
6123 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s + value2));
6126 exp->expType = op1->type;
6128 op1->type->refCount++;
6133 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6135 unsigned short value2 = op2->__anon1.us;
6138 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us + value2));
6141 exp->expType = op1->type;
6143 op1->type->refCount++;
6148 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6150 char value2 = op2->__anon1.c;
6153 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c + value2));
6156 exp->expType = op1->type;
6158 op1->type->refCount++;
6163 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6165 unsigned char value2 = op2->__anon1.uc;
6168 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc + value2));
6171 exp->expType = op1->type;
6173 op1->type->refCount++;
6178 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6180 float value2 = op2->__anon1.f;
6183 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
6186 exp->expType = op1->type;
6188 op1->type->refCount++;
6193 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6195 double value2 = op2->__anon1.d;
6198 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
6201 exp->expType = op1->type;
6203 op1->type->refCount++;
6208 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6210 int value2 = op2->__anon1.i;
6213 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
6216 exp->expType = op1->type;
6218 op1->type->refCount++;
6223 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6225 unsigned int value2 = op2->__anon1.ui;
6228 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
6231 exp->expType = op1->type;
6233 op1->type->refCount++;
6238 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6240 long long value2 = op2->__anon1.i64;
6243 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
6246 exp->expType = op1->type;
6248 op1->type->refCount++;
6253 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6255 uint64 value2 = op2->__anon1.ui64;
6258 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
6261 exp->expType = op1->type;
6263 op1->type->refCount++;
6268 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6270 short value2 = op2->__anon1.s;
6273 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s - value2));
6276 exp->expType = op1->type;
6278 op1->type->refCount++;
6283 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6285 unsigned short value2 = op2->__anon1.us;
6288 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us - value2));
6291 exp->expType = op1->type;
6293 op1->type->refCount++;
6298 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6300 char value2 = op2->__anon1.c;
6303 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c - value2));
6306 exp->expType = op1->type;
6308 op1->type->refCount++;
6313 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6315 unsigned char value2 = op2->__anon1.uc;
6318 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc - value2));
6321 exp->expType = op1->type;
6323 op1->type->refCount++;
6328 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6330 float value2 = op2->__anon1.f;
6333 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
6336 exp->expType = op1->type;
6338 op1->type->refCount++;
6343 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6345 double value2 = op2->__anon1.d;
6348 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
6351 exp->expType = op1->type;
6353 op1->type->refCount++;
6358 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6360 int value2 = op2->__anon1.i;
6363 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
6366 exp->expType = op1->type;
6368 op1->type->refCount++;
6373 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6375 unsigned int value2 = op2->__anon1.ui;
6378 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
6381 exp->expType = op1->type;
6383 op1->type->refCount++;
6388 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6390 long long value2 = op2->__anon1.i64;
6393 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
6396 exp->expType = op1->type;
6398 op1->type->refCount++;
6403 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6405 uint64 value2 = op2->__anon1.ui64;
6408 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
6411 exp->expType = op1->type;
6413 op1->type->refCount++;
6418 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6420 short value2 = op2->__anon1.s;
6423 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s * value2));
6426 exp->expType = op1->type;
6428 op1->type->refCount++;
6433 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6435 unsigned short value2 = op2->__anon1.us;
6438 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us * value2));
6441 exp->expType = op1->type;
6443 op1->type->refCount++;
6448 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6450 char value2 = op2->__anon1.c;
6453 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c * value2));
6456 exp->expType = op1->type;
6458 op1->type->refCount++;
6463 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6465 unsigned char value2 = op2->__anon1.uc;
6468 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc * value2));
6471 exp->expType = op1->type;
6473 op1->type->refCount++;
6478 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6480 float value2 = op2->__anon1.f;
6483 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
6486 exp->expType = op1->type;
6488 op1->type->refCount++;
6493 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6495 double value2 = op2->__anon1.d;
6498 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
6501 exp->expType = op1->type;
6503 op1->type->refCount++;
6508 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6510 int value2 = op2->__anon1.i;
6513 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i / value2) : 0);
6516 exp->expType = op1->type;
6518 op1->type->refCount++;
6523 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6525 unsigned int value2 = op2->__anon1.ui;
6528 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui / value2) : 0);
6531 exp->expType = op1->type;
6533 op1->type->refCount++;
6538 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6540 long long value2 = op2->__anon1.i64;
6543 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 / value2) : 0);
6546 exp->expType = op1->type;
6548 op1->type->refCount++;
6553 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6555 uint64 value2 = op2->__anon1.ui64;
6558 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 / value2) : 0);
6561 exp->expType = op1->type;
6563 op1->type->refCount++;
6568 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6570 short value2 = op2->__anon1.s;
6573 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s / value2) : (short)0);
6576 exp->expType = op1->type;
6578 op1->type->refCount++;
6583 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6585 unsigned short value2 = op2->__anon1.us;
6588 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us / value2) : (unsigned short)0);
6591 exp->expType = op1->type;
6593 op1->type->refCount++;
6598 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6600 char value2 = op2->__anon1.c;
6603 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c / value2) : (char)0);
6606 exp->expType = op1->type;
6608 op1->type->refCount++;
6613 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6615 unsigned char value2 = op2->__anon1.uc;
6618 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc / value2) : (unsigned char)0);
6621 exp->expType = op1->type;
6623 op1->type->refCount++;
6628 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6630 float value2 = op2->__anon1.f;
6633 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f / value2);
6636 exp->expType = op1->type;
6638 op1->type->refCount++;
6643 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6645 double value2 = op2->__anon1.d;
6648 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d / value2);
6651 exp->expType = op1->type;
6653 op1->type->refCount++;
6658 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6660 int value2 = op2->__anon1.i;
6663 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i % value2) : 0);
6666 exp->expType = op1->type;
6668 op1->type->refCount++;
6673 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6675 unsigned int value2 = op2->__anon1.ui;
6678 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui % value2) : 0);
6681 exp->expType = op1->type;
6683 op1->type->refCount++;
6688 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6690 long long value2 = op2->__anon1.i64;
6693 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 % value2) : 0);
6696 exp->expType = op1->type;
6698 op1->type->refCount++;
6703 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6705 uint64 value2 = op2->__anon1.ui64;
6708 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 % value2) : 0);
6711 exp->expType = op1->type;
6713 op1->type->refCount++;
6718 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6720 short value2 = op2->__anon1.s;
6723 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s % value2) : (short)0);
6726 exp->expType = op1->type;
6728 op1->type->refCount++;
6733 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6735 unsigned short value2 = op2->__anon1.us;
6738 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us % value2) : (unsigned short)0);
6741 exp->expType = op1->type;
6743 op1->type->refCount++;
6748 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6750 char value2 = op2->__anon1.c;
6753 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c % value2) : (char)0);
6756 exp->expType = op1->type;
6758 op1->type->refCount++;
6763 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6765 unsigned char value2 = op2->__anon1.uc;
6768 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc % value2) : (unsigned char)0);
6771 exp->expType = op1->type;
6773 op1->type->refCount++;
6778 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
6781 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
6784 exp->expType = op1->type;
6786 op1->type->refCount++;
6791 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
6794 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
6797 exp->expType = op1->type;
6799 op1->type->refCount++;
6804 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
6807 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
6810 exp->expType = op1->type;
6812 op1->type->refCount++;
6817 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
6820 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
6823 exp->expType = op1->type;
6825 op1->type->refCount++;
6830 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
6833 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
6836 exp->expType = op1->type;
6838 op1->type->refCount++;
6843 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
6846 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
6849 exp->expType = op1->type;
6851 op1->type->refCount++;
6856 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
6859 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
6862 exp->expType = op1->type;
6864 op1->type->refCount++;
6869 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
6872 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
6875 exp->expType = op1->type;
6877 op1->type->refCount++;
6882 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
6885 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
6888 exp->expType = op1->type;
6890 op1->type->refCount++;
6895 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
6898 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
6901 exp->expType = op1->type;
6903 op1->type->refCount++;
6908 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
6911 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
6914 exp->expType = op1->type;
6916 op1->type->refCount++;
6921 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
6924 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
6927 exp->expType = op1->type;
6929 op1->type->refCount++;
6934 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
6937 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
6940 exp->expType = op1->type;
6942 op1->type->refCount++;
6947 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
6950 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
6953 exp->expType = op1->type;
6955 op1->type->refCount++;
6960 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
6963 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
6966 exp->expType = op1->type;
6968 op1->type->refCount++;
6973 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
6976 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
6979 exp->expType = op1->type;
6981 op1->type->refCount++;
6986 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
6989 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
6992 exp->expType = op1->type;
6994 op1->type->refCount++;
6999 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
7002 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
7005 exp->expType = op1->type;
7007 op1->type->refCount++;
7012 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
7015 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
7018 exp->expType = op1->type;
7020 op1->type->refCount++;
7025 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
7028 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
7031 exp->expType = op1->type;
7033 op1->type->refCount++;
7038 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
7041 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
7044 exp->expType = op1->type;
7046 op1->type->refCount++;
7051 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
7054 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
7057 exp->expType = op1->type;
7059 op1->type->refCount++;
7064 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
7067 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
7070 exp->expType = op1->type;
7072 op1->type->refCount++;
7077 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
7080 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
7083 exp->expType = op1->type;
7085 op1->type->refCount++;
7090 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
7093 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
7096 exp->expType = op1->type;
7098 op1->type->refCount++;
7103 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
7106 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
7109 exp->expType = op1->type;
7111 op1->type->refCount++;
7116 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
7119 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
7122 exp->expType = op1->type;
7124 op1->type->refCount++;
7129 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
7132 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
7135 exp->expType = op1->type;
7137 op1->type->refCount++;
7142 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
7145 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
7148 exp->expType = op1->type;
7150 op1->type->refCount++;
7155 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
7158 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
7161 exp->expType = op1->type;
7163 op1->type->refCount++;
7168 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7170 int value2 = op2->__anon1.i;
7173 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
7176 exp->expType = op1->type;
7178 op1->type->refCount++;
7183 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7185 unsigned int value2 = op2->__anon1.ui;
7188 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
7191 exp->expType = op1->type;
7193 op1->type->refCount++;
7198 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7200 long long value2 = op2->__anon1.i64;
7203 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
7206 exp->expType = op1->type;
7208 op1->type->refCount++;
7213 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7215 uint64 value2 = op2->__anon1.ui64;
7218 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
7221 exp->expType = op1->type;
7223 op1->type->refCount++;
7228 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7230 short value2 = op2->__anon1.s;
7233 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
7236 exp->expType = op1->type;
7238 op1->type->refCount++;
7243 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7245 unsigned short value2 = op2->__anon1.us;
7248 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
7251 exp->expType = op1->type;
7253 op1->type->refCount++;
7258 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7260 char value2 = op2->__anon1.c;
7263 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
7266 exp->expType = op1->type;
7268 op1->type->refCount++;
7273 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7275 unsigned char value2 = op2->__anon1.uc;
7278 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
7281 exp->expType = op1->type;
7283 op1->type->refCount++;
7288 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7290 float value2 = op2->__anon1.f;
7293 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
7296 exp->expType = op1->type;
7298 op1->type->refCount++;
7303 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7305 double value2 = op2->__anon1.d;
7308 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
7311 exp->expType = op1->type;
7313 op1->type->refCount++;
7318 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7320 int value2 = op2->__anon1.i;
7323 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
7326 exp->expType = op1->type;
7328 op1->type->refCount++;
7333 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7335 unsigned int value2 = op2->__anon1.ui;
7338 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
7341 exp->expType = op1->type;
7343 op1->type->refCount++;
7348 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7350 long long value2 = op2->__anon1.i64;
7353 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
7356 exp->expType = op1->type;
7358 op1->type->refCount++;
7363 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7365 uint64 value2 = op2->__anon1.ui64;
7368 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
7371 exp->expType = op1->type;
7373 op1->type->refCount++;
7378 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7380 short value2 = op2->__anon1.s;
7383 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
7386 exp->expType = op1->type;
7388 op1->type->refCount++;
7393 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7395 unsigned short value2 = op2->__anon1.us;
7398 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
7401 exp->expType = op1->type;
7403 op1->type->refCount++;
7408 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7410 char value2 = op2->__anon1.c;
7413 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
7416 exp->expType = op1->type;
7418 op1->type->refCount++;
7423 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7425 unsigned char value2 = op2->__anon1.uc;
7428 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
7431 exp->expType = op1->type;
7433 op1->type->refCount++;
7438 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7440 float value2 = op2->__anon1.f;
7443 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
7446 exp->expType = op1->type;
7448 op1->type->refCount++;
7453 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7455 double value2 = op2->__anon1.d;
7458 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
7461 exp->expType = op1->type;
7463 op1->type->refCount++;
7468 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7470 int value2 = op2->__anon1.i;
7473 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
7476 exp->expType = op1->type;
7478 op1->type->refCount++;
7483 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7485 unsigned int value2 = op2->__anon1.ui;
7488 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
7491 exp->expType = op1->type;
7493 op1->type->refCount++;
7498 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7500 long long value2 = op2->__anon1.i64;
7503 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
7506 exp->expType = op1->type;
7508 op1->type->refCount++;
7513 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7515 uint64 value2 = op2->__anon1.ui64;
7518 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
7521 exp->expType = op1->type;
7523 op1->type->refCount++;
7528 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7530 short value2 = op2->__anon1.s;
7533 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
7536 exp->expType = op1->type;
7538 op1->type->refCount++;
7543 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7545 unsigned short value2 = op2->__anon1.us;
7548 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
7551 exp->expType = op1->type;
7553 op1->type->refCount++;
7558 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7560 char value2 = op2->__anon1.c;
7563 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
7566 exp->expType = op1->type;
7568 op1->type->refCount++;
7573 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7575 unsigned char value2 = op2->__anon1.uc;
7578 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
7581 exp->expType = op1->type;
7583 op1->type->refCount++;
7588 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7590 float value2 = op2->__anon1.f;
7593 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
7596 exp->expType = op1->type;
7598 op1->type->refCount++;
7603 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7605 double value2 = op2->__anon1.d;
7608 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
7611 exp->expType = op1->type;
7613 op1->type->refCount++;
7618 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7620 int value2 = op2->__anon1.i;
7623 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
7626 exp->expType = op1->type;
7628 op1->type->refCount++;
7633 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7635 unsigned int value2 = op2->__anon1.ui;
7638 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
7641 exp->expType = op1->type;
7643 op1->type->refCount++;
7648 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7650 long long value2 = op2->__anon1.i64;
7653 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
7656 exp->expType = op1->type;
7658 op1->type->refCount++;
7663 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7665 uint64 value2 = op2->__anon1.ui64;
7668 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
7671 exp->expType = op1->type;
7673 op1->type->refCount++;
7678 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7680 short value2 = op2->__anon1.s;
7683 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
7686 exp->expType = op1->type;
7688 op1->type->refCount++;
7693 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7695 unsigned short value2 = op2->__anon1.us;
7698 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
7701 exp->expType = op1->type;
7703 op1->type->refCount++;
7708 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7710 char value2 = op2->__anon1.c;
7713 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
7716 exp->expType = op1->type;
7718 op1->type->refCount++;
7723 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7725 unsigned char value2 = op2->__anon1.uc;
7728 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
7731 exp->expType = op1->type;
7733 op1->type->refCount++;
7738 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7740 float value2 = op2->__anon1.f;
7743 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
7746 exp->expType = op1->type;
7748 op1->type->refCount++;
7753 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7755 double value2 = op2->__anon1.d;
7758 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
7761 exp->expType = op1->type;
7763 op1->type->refCount++;
7768 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7770 int value2 = op2->__anon1.i;
7773 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i /= value2) : 0);
7776 exp->expType = op1->type;
7778 op1->type->refCount++;
7783 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7785 unsigned int value2 = op2->__anon1.ui;
7788 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui /= value2) : 0);
7791 exp->expType = op1->type;
7793 op1->type->refCount++;
7798 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7800 long long value2 = op2->__anon1.i64;
7803 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 /= value2) : 0);
7806 exp->expType = op1->type;
7808 op1->type->refCount++;
7813 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7815 uint64 value2 = op2->__anon1.ui64;
7818 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 /= value2) : 0);
7821 exp->expType = op1->type;
7823 op1->type->refCount++;
7828 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7830 short value2 = op2->__anon1.s;
7833 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s /= value2) : (short)0);
7836 exp->expType = op1->type;
7838 op1->type->refCount++;
7843 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7845 unsigned short value2 = op2->__anon1.us;
7848 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us /= value2) : (unsigned short)0);
7851 exp->expType = op1->type;
7853 op1->type->refCount++;
7858 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7860 char value2 = op2->__anon1.c;
7863 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c /= value2) : (char)0);
7866 exp->expType = op1->type;
7868 op1->type->refCount++;
7873 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7875 unsigned char value2 = op2->__anon1.uc;
7878 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc /= value2) : (unsigned char)0);
7881 exp->expType = op1->type;
7883 op1->type->refCount++;
7888 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7890 float value2 = op2->__anon1.f;
7893 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f /= value2);
7896 exp->expType = op1->type;
7898 op1->type->refCount++;
7903 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7905 double value2 = op2->__anon1.d;
7908 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d /= value2);
7911 exp->expType = op1->type;
7913 op1->type->refCount++;
7918 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7920 int value2 = op2->__anon1.i;
7923 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i %= value2) : 0);
7926 exp->expType = op1->type;
7928 op1->type->refCount++;
7933 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7935 unsigned int value2 = op2->__anon1.ui;
7938 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui %= value2) : 0);
7941 exp->expType = op1->type;
7943 op1->type->refCount++;
7948 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7950 long long value2 = op2->__anon1.i64;
7953 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 %= value2) : 0);
7956 exp->expType = op1->type;
7958 op1->type->refCount++;
7963 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7965 uint64 value2 = op2->__anon1.ui64;
7968 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 %= value2) : 0);
7971 exp->expType = op1->type;
7973 op1->type->refCount++;
7978 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7980 short value2 = op2->__anon1.s;
7983 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s %= value2) : (short)0);
7986 exp->expType = op1->type;
7988 op1->type->refCount++;
7993 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7995 unsigned short value2 = op2->__anon1.us;
7998 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us %= value2) : (unsigned short)0);
8001 exp->expType = op1->type;
8003 op1->type->refCount++;
8008 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8010 char value2 = op2->__anon1.c;
8013 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c %= value2) : (char)0);
8016 exp->expType = op1->type;
8018 op1->type->refCount++;
8023 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8025 unsigned char value2 = op2->__anon1.uc;
8028 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc %= value2) : (unsigned char)0);
8031 exp->expType = op1->type;
8033 op1->type->refCount++;
8038 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8040 int value2 = op2->__anon1.i;
8043 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
8046 exp->expType = op1->type;
8048 op1->type->refCount++;
8053 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8055 unsigned int value2 = op2->__anon1.ui;
8058 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
8061 exp->expType = op1->type;
8063 op1->type->refCount++;
8068 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8070 long long value2 = op2->__anon1.i64;
8073 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
8076 exp->expType = op1->type;
8078 op1->type->refCount++;
8083 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8085 uint64 value2 = op2->__anon1.ui64;
8088 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
8091 exp->expType = op1->type;
8093 op1->type->refCount++;
8098 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8100 short value2 = op2->__anon1.s;
8103 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s & value2));
8106 exp->expType = op1->type;
8108 op1->type->refCount++;
8113 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8115 unsigned short value2 = op2->__anon1.us;
8118 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us & value2));
8121 exp->expType = op1->type;
8123 op1->type->refCount++;
8128 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8130 char value2 = op2->__anon1.c;
8133 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c & value2));
8136 exp->expType = op1->type;
8138 op1->type->refCount++;
8143 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8145 unsigned char value2 = op2->__anon1.uc;
8148 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc & value2));
8151 exp->expType = op1->type;
8153 op1->type->refCount++;
8158 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8160 int value2 = op2->__anon1.i;
8163 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
8166 exp->expType = op1->type;
8168 op1->type->refCount++;
8173 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8175 unsigned int value2 = op2->__anon1.ui;
8178 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
8181 exp->expType = op1->type;
8183 op1->type->refCount++;
8188 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8190 long long value2 = op2->__anon1.i64;
8193 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
8196 exp->expType = op1->type;
8198 op1->type->refCount++;
8203 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8205 uint64 value2 = op2->__anon1.ui64;
8208 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
8211 exp->expType = op1->type;
8213 op1->type->refCount++;
8218 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8220 short value2 = op2->__anon1.s;
8223 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s | value2));
8226 exp->expType = op1->type;
8228 op1->type->refCount++;
8233 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8235 unsigned short value2 = op2->__anon1.us;
8238 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us | value2));
8241 exp->expType = op1->type;
8243 op1->type->refCount++;
8248 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8250 char value2 = op2->__anon1.c;
8253 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c | value2));
8256 exp->expType = op1->type;
8258 op1->type->refCount++;
8263 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8265 unsigned char value2 = op2->__anon1.uc;
8268 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc | value2));
8271 exp->expType = op1->type;
8273 op1->type->refCount++;
8278 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8280 int value2 = op2->__anon1.i;
8283 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
8286 exp->expType = op1->type;
8288 op1->type->refCount++;
8293 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8295 unsigned int value2 = op2->__anon1.ui;
8298 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
8301 exp->expType = op1->type;
8303 op1->type->refCount++;
8308 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8310 long long value2 = op2->__anon1.i64;
8313 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
8316 exp->expType = op1->type;
8318 op1->type->refCount++;
8323 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8325 uint64 value2 = op2->__anon1.ui64;
8328 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
8331 exp->expType = op1->type;
8333 op1->type->refCount++;
8338 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8340 short value2 = op2->__anon1.s;
8343 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^ value2));
8346 exp->expType = op1->type;
8348 op1->type->refCount++;
8353 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8355 unsigned short value2 = op2->__anon1.us;
8358 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^ value2));
8361 exp->expType = op1->type;
8363 op1->type->refCount++;
8368 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8370 char value2 = op2->__anon1.c;
8373 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^ value2));
8376 exp->expType = op1->type;
8378 op1->type->refCount++;
8383 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8385 unsigned char value2 = op2->__anon1.uc;
8388 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^ value2));
8391 exp->expType = op1->type;
8393 op1->type->refCount++;
8398 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8400 int value2 = op2->__anon1.i;
8403 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
8406 exp->expType = op1->type;
8408 op1->type->refCount++;
8413 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8415 unsigned int value2 = op2->__anon1.ui;
8418 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
8421 exp->expType = op1->type;
8423 op1->type->refCount++;
8428 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8430 long long value2 = op2->__anon1.i64;
8433 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
8436 exp->expType = op1->type;
8438 op1->type->refCount++;
8443 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8445 uint64 value2 = op2->__anon1.ui64;
8448 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
8451 exp->expType = op1->type;
8453 op1->type->refCount++;
8458 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8460 short value2 = op2->__anon1.s;
8463 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s << value2));
8466 exp->expType = op1->type;
8468 op1->type->refCount++;
8473 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8475 unsigned short value2 = op2->__anon1.us;
8478 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us << value2));
8481 exp->expType = op1->type;
8483 op1->type->refCount++;
8488 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8490 char value2 = op2->__anon1.c;
8493 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c << value2));
8496 exp->expType = op1->type;
8498 op1->type->refCount++;
8503 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8505 unsigned char value2 = op2->__anon1.uc;
8508 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc << value2));
8511 exp->expType = op1->type;
8513 op1->type->refCount++;
8518 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8520 int value2 = op2->__anon1.i;
8523 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
8526 exp->expType = op1->type;
8528 op1->type->refCount++;
8533 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8535 unsigned int value2 = op2->__anon1.ui;
8538 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
8541 exp->expType = op1->type;
8543 op1->type->refCount++;
8548 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8550 long long value2 = op2->__anon1.i64;
8553 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
8556 exp->expType = op1->type;
8558 op1->type->refCount++;
8563 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8565 uint64 value2 = op2->__anon1.ui64;
8568 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
8571 exp->expType = op1->type;
8573 op1->type->refCount++;
8578 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8580 short value2 = op2->__anon1.s;
8583 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >> value2));
8586 exp->expType = op1->type;
8588 op1->type->refCount++;
8593 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8595 unsigned short value2 = op2->__anon1.us;
8598 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >> value2));
8601 exp->expType = op1->type;
8603 op1->type->refCount++;
8608 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8610 char value2 = op2->__anon1.c;
8613 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >> value2));
8616 exp->expType = op1->type;
8618 op1->type->refCount++;
8623 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8625 unsigned char value2 = op2->__anon1.uc;
8628 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >> value2));
8631 exp->expType = op1->type;
8633 op1->type->refCount++;
8638 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
8641 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
8644 exp->expType = op1->type;
8646 op1->type->refCount++;
8651 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
8654 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
8657 exp->expType = op1->type;
8659 op1->type->refCount++;
8664 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
8667 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
8670 exp->expType = op1->type;
8672 op1->type->refCount++;
8677 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
8680 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
8683 exp->expType = op1->type;
8685 op1->type->refCount++;
8690 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
8693 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
8696 exp->expType = op1->type;
8698 op1->type->refCount++;
8703 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
8706 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
8709 exp->expType = op1->type;
8711 op1->type->refCount++;
8716 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
8719 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
8722 exp->expType = op1->type;
8724 op1->type->refCount++;
8729 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
8732 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
8735 exp->expType = op1->type;
8737 op1->type->refCount++;
8742 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8744 int value2 = op2->__anon1.i;
8747 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
8750 exp->expType = op1->type;
8752 op1->type->refCount++;
8757 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8759 unsigned int value2 = op2->__anon1.ui;
8762 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
8765 exp->expType = op1->type;
8767 op1->type->refCount++;
8772 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8774 long long value2 = op2->__anon1.i64;
8777 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
8780 exp->expType = op1->type;
8782 op1->type->refCount++;
8787 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8789 uint64 value2 = op2->__anon1.ui64;
8792 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
8795 exp->expType = op1->type;
8797 op1->type->refCount++;
8802 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8804 short value2 = op2->__anon1.s;
8807 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
8810 exp->expType = op1->type;
8812 op1->type->refCount++;
8817 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8819 unsigned short value2 = op2->__anon1.us;
8822 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
8825 exp->expType = op1->type;
8827 op1->type->refCount++;
8832 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8834 char value2 = op2->__anon1.c;
8837 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
8840 exp->expType = op1->type;
8842 op1->type->refCount++;
8847 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8849 unsigned char value2 = op2->__anon1.uc;
8852 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
8855 exp->expType = op1->type;
8857 op1->type->refCount++;
8862 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8864 int value2 = op2->__anon1.i;
8867 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
8870 exp->expType = op1->type;
8872 op1->type->refCount++;
8877 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8879 unsigned int value2 = op2->__anon1.ui;
8882 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
8885 exp->expType = op1->type;
8887 op1->type->refCount++;
8892 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8894 long long value2 = op2->__anon1.i64;
8897 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
8900 exp->expType = op1->type;
8902 op1->type->refCount++;
8907 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8909 uint64 value2 = op2->__anon1.ui64;
8912 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
8915 exp->expType = op1->type;
8917 op1->type->refCount++;
8922 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8924 short value2 = op2->__anon1.s;
8927 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
8930 exp->expType = op1->type;
8932 op1->type->refCount++;
8937 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8939 unsigned short value2 = op2->__anon1.us;
8942 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
8945 exp->expType = op1->type;
8947 op1->type->refCount++;
8952 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8954 char value2 = op2->__anon1.c;
8957 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
8960 exp->expType = op1->type;
8962 op1->type->refCount++;
8967 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8969 unsigned char value2 = op2->__anon1.uc;
8972 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
8975 exp->expType = op1->type;
8977 op1->type->refCount++;
8982 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8984 int value2 = op2->__anon1.i;
8987 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
8990 exp->expType = op1->type;
8992 op1->type->refCount++;
8997 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8999 unsigned int value2 = op2->__anon1.ui;
9002 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
9005 exp->expType = op1->type;
9007 op1->type->refCount++;
9012 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9014 long long value2 = op2->__anon1.i64;
9017 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
9020 exp->expType = op1->type;
9022 op1->type->refCount++;
9027 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9029 uint64 value2 = op2->__anon1.ui64;
9032 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
9035 exp->expType = op1->type;
9037 op1->type->refCount++;
9042 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9044 short value2 = op2->__anon1.s;
9047 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
9050 exp->expType = op1->type;
9052 op1->type->refCount++;
9057 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9059 unsigned short value2 = op2->__anon1.us;
9062 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
9065 exp->expType = op1->type;
9067 op1->type->refCount++;
9072 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9074 char value2 = op2->__anon1.c;
9077 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
9080 exp->expType = op1->type;
9082 op1->type->refCount++;
9087 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9089 unsigned char value2 = op2->__anon1.uc;
9092 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
9095 exp->expType = op1->type;
9097 op1->type->refCount++;
9102 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9104 int value2 = op2->__anon1.i;
9107 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
9110 exp->expType = op1->type;
9112 op1->type->refCount++;
9117 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9119 unsigned int value2 = op2->__anon1.ui;
9122 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
9125 exp->expType = op1->type;
9127 op1->type->refCount++;
9132 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9134 long long value2 = op2->__anon1.i64;
9137 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
9140 exp->expType = op1->type;
9142 op1->type->refCount++;
9147 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9149 uint64 value2 = op2->__anon1.ui64;
9152 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
9155 exp->expType = op1->type;
9157 op1->type->refCount++;
9162 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9164 short value2 = op2->__anon1.s;
9167 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
9170 exp->expType = op1->type;
9172 op1->type->refCount++;
9177 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9179 unsigned short value2 = op2->__anon1.us;
9182 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
9185 exp->expType = op1->type;
9187 op1->type->refCount++;
9192 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9194 char value2 = op2->__anon1.c;
9197 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
9200 exp->expType = op1->type;
9202 op1->type->refCount++;
9207 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9209 unsigned char value2 = op2->__anon1.uc;
9212 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
9215 exp->expType = op1->type;
9217 op1->type->refCount++;
9222 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9224 int value2 = op2->__anon1.i;
9227 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
9230 exp->expType = op1->type;
9232 op1->type->refCount++;
9237 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9239 unsigned int value2 = op2->__anon1.ui;
9242 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
9245 exp->expType = op1->type;
9247 op1->type->refCount++;
9252 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9254 long long value2 = op2->__anon1.i64;
9257 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
9260 exp->expType = op1->type;
9262 op1->type->refCount++;
9267 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9269 uint64 value2 = op2->__anon1.ui64;
9272 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
9275 exp->expType = op1->type;
9277 op1->type->refCount++;
9282 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9284 short value2 = op2->__anon1.s;
9287 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
9290 exp->expType = op1->type;
9292 op1->type->refCount++;
9297 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9299 unsigned short value2 = op2->__anon1.us;
9302 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
9305 exp->expType = op1->type;
9307 op1->type->refCount++;
9312 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9314 char value2 = op2->__anon1.c;
9317 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
9320 exp->expType = op1->type;
9322 op1->type->refCount++;
9327 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9329 unsigned char value2 = op2->__anon1.uc;
9332 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
9335 exp->expType = op1->type;
9337 op1->type->refCount++;
9342 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
9345 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
9348 exp->expType = op1->type;
9350 op1->type->refCount++;
9355 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
9358 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
9361 exp->expType = op1->type;
9363 op1->type->refCount++;
9368 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
9371 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
9374 exp->expType = op1->type;
9376 op1->type->refCount++;
9381 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
9384 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
9387 exp->expType = op1->type;
9389 op1->type->refCount++;
9394 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
9397 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
9400 exp->expType = op1->type;
9402 op1->type->refCount++;
9407 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
9410 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
9413 exp->expType = op1->type;
9415 op1->type->refCount++;
9420 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
9423 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
9426 exp->expType = op1->type;
9428 op1->type->refCount++;
9433 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
9436 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
9439 exp->expType = op1->type;
9441 op1->type->refCount++;
9446 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9448 int value2 = op2->__anon1.i;
9451 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
9454 exp->expType = op1->type;
9456 op1->type->refCount++;
9461 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9463 unsigned int value2 = op2->__anon1.ui;
9466 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
9469 exp->expType = op1->type;
9471 op1->type->refCount++;
9476 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9478 long long value2 = op2->__anon1.i64;
9481 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
9484 exp->expType = op1->type;
9486 op1->type->refCount++;
9491 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9493 uint64 value2 = op2->__anon1.ui64;
9496 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
9499 exp->expType = op1->type;
9501 op1->type->refCount++;
9506 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9508 short value2 = op2->__anon1.s;
9511 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
9514 exp->expType = op1->type;
9516 op1->type->refCount++;
9521 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9523 unsigned short value2 = op2->__anon1.us;
9526 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
9529 exp->expType = op1->type;
9531 op1->type->refCount++;
9536 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9538 char value2 = op2->__anon1.c;
9541 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
9544 exp->expType = op1->type;
9546 op1->type->refCount++;
9551 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9553 unsigned char value2 = op2->__anon1.uc;
9556 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
9559 exp->expType = op1->type;
9561 op1->type->refCount++;
9566 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9568 float value2 = op2->__anon1.f;
9571 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
9574 exp->expType = op1->type;
9576 op1->type->refCount++;
9581 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9583 double value2 = op2->__anon1.d;
9586 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
9589 exp->expType = op1->type;
9591 op1->type->refCount++;
9596 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9598 int value2 = op2->__anon1.i;
9601 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
9604 exp->expType = op1->type;
9606 op1->type->refCount++;
9611 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9613 unsigned int value2 = op2->__anon1.ui;
9616 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
9619 exp->expType = op1->type;
9621 op1->type->refCount++;
9626 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9628 long long value2 = op2->__anon1.i64;
9631 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
9634 exp->expType = op1->type;
9636 op1->type->refCount++;
9641 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9643 uint64 value2 = op2->__anon1.ui64;
9646 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
9649 exp->expType = op1->type;
9651 op1->type->refCount++;
9656 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9658 short value2 = op2->__anon1.s;
9661 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
9664 exp->expType = op1->type;
9666 op1->type->refCount++;
9671 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9673 unsigned short value2 = op2->__anon1.us;
9676 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
9679 exp->expType = op1->type;
9681 op1->type->refCount++;
9686 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9688 char value2 = op2->__anon1.c;
9691 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
9694 exp->expType = op1->type;
9696 op1->type->refCount++;
9701 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9703 unsigned char value2 = op2->__anon1.uc;
9706 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
9709 exp->expType = op1->type;
9711 op1->type->refCount++;
9716 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9718 float value2 = op2->__anon1.f;
9721 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
9724 exp->expType = op1->type;
9726 op1->type->refCount++;
9731 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9733 double value2 = op2->__anon1.d;
9736 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
9739 exp->expType = op1->type;
9741 op1->type->refCount++;
9746 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9748 int value2 = op2->__anon1.i;
9751 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
9754 exp->expType = op1->type;
9756 op1->type->refCount++;
9761 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9763 unsigned int value2 = op2->__anon1.ui;
9766 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
9769 exp->expType = op1->type;
9771 op1->type->refCount++;
9776 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9778 long long value2 = op2->__anon1.i64;
9781 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
9784 exp->expType = op1->type;
9786 op1->type->refCount++;
9791 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9793 uint64 value2 = op2->__anon1.ui64;
9796 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
9799 exp->expType = op1->type;
9801 op1->type->refCount++;
9806 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9808 short value2 = op2->__anon1.s;
9811 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
9814 exp->expType = op1->type;
9816 op1->type->refCount++;
9821 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9823 unsigned short value2 = op2->__anon1.us;
9826 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
9829 exp->expType = op1->type;
9831 op1->type->refCount++;
9836 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9838 char value2 = op2->__anon1.c;
9841 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
9844 exp->expType = op1->type;
9846 op1->type->refCount++;
9851 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9853 unsigned char value2 = op2->__anon1.uc;
9856 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
9859 exp->expType = op1->type;
9861 op1->type->refCount++;
9866 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9868 float value2 = op2->__anon1.f;
9871 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
9874 exp->expType = op1->type;
9876 op1->type->refCount++;
9881 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9883 double value2 = op2->__anon1.d;
9886 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
9889 exp->expType = op1->type;
9891 op1->type->refCount++;
9896 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9898 int value2 = op2->__anon1.i;
9901 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
9904 exp->expType = op1->type;
9906 op1->type->refCount++;
9911 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9913 unsigned int value2 = op2->__anon1.ui;
9916 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
9919 exp->expType = op1->type;
9921 op1->type->refCount++;
9926 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9928 long long value2 = op2->__anon1.i64;
9931 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
9934 exp->expType = op1->type;
9936 op1->type->refCount++;
9941 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9943 uint64 value2 = op2->__anon1.ui64;
9946 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
9949 exp->expType = op1->type;
9951 op1->type->refCount++;
9956 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9958 short value2 = op2->__anon1.s;
9961 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
9964 exp->expType = op1->type;
9966 op1->type->refCount++;
9971 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9973 unsigned short value2 = op2->__anon1.us;
9976 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
9979 exp->expType = op1->type;
9981 op1->type->refCount++;
9986 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9988 char value2 = op2->__anon1.c;
9991 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
9994 exp->expType = op1->type;
9996 op1->type->refCount++;
10001 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10003 unsigned char value2 = op2->__anon1.uc;
10006 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
10009 exp->expType = op1->type;
10011 op1->type->refCount++;
10016 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10018 float value2 = op2->__anon1.f;
10021 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
10024 exp->expType = op1->type;
10026 op1->type->refCount++;
10031 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10033 double value2 = op2->__anon1.d;
10036 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
10039 exp->expType = op1->type;
10041 op1->type->refCount++;
10046 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10048 int value2 = op2->__anon1.i;
10051 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
10054 exp->expType = op1->type;
10056 op1->type->refCount++;
10061 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10063 unsigned int value2 = op2->__anon1.ui;
10066 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
10069 exp->expType = op1->type;
10071 op1->type->refCount++;
10076 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10078 long long value2 = op2->__anon1.i64;
10081 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
10084 exp->expType = op1->type;
10086 op1->type->refCount++;
10091 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10093 uint64 value2 = op2->__anon1.ui64;
10096 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
10099 exp->expType = op1->type;
10101 op1->type->refCount++;
10106 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10108 short value2 = op2->__anon1.s;
10111 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
10114 exp->expType = op1->type;
10116 op1->type->refCount++;
10121 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10123 unsigned short value2 = op2->__anon1.us;
10126 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
10129 exp->expType = op1->type;
10131 op1->type->refCount++;
10136 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10138 char value2 = op2->__anon1.c;
10141 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
10144 exp->expType = op1->type;
10146 op1->type->refCount++;
10151 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10153 unsigned char value2 = op2->__anon1.uc;
10156 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
10159 exp->expType = op1->type;
10161 op1->type->refCount++;
10166 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10168 float value2 = op2->__anon1.f;
10171 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
10174 exp->expType = op1->type;
10176 op1->type->refCount++;
10181 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10183 double value2 = op2->__anon1.d;
10186 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
10189 exp->expType = op1->type;
10191 op1->type->refCount++;
10196 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10198 int value2 = op2->__anon1.i;
10201 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
10204 exp->expType = op1->type;
10206 op1->type->refCount++;
10211 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10213 unsigned int value2 = op2->__anon1.ui;
10216 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
10219 exp->expType = op1->type;
10221 op1->type->refCount++;
10226 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10228 long long value2 = op2->__anon1.i64;
10231 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
10234 exp->expType = op1->type;
10236 op1->type->refCount++;
10241 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10243 uint64 value2 = op2->__anon1.ui64;
10246 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
10249 exp->expType = op1->type;
10251 op1->type->refCount++;
10256 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10258 short value2 = op2->__anon1.s;
10261 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
10264 exp->expType = op1->type;
10266 op1->type->refCount++;
10271 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10273 unsigned short value2 = op2->__anon1.us;
10276 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
10279 exp->expType = op1->type;
10281 op1->type->refCount++;
10286 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10288 char value2 = op2->__anon1.c;
10291 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
10294 exp->expType = op1->type;
10296 op1->type->refCount++;
10301 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10303 unsigned char value2 = op2->__anon1.uc;
10306 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
10309 exp->expType = op1->type;
10311 op1->type->refCount++;
10316 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10318 float value2 = op2->__anon1.f;
10321 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
10324 exp->expType = op1->type;
10326 op1->type->refCount++;
10331 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10333 double value2 = op2->__anon1.d;
10336 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
10339 exp->expType = op1->type;
10341 op1->type->refCount++;
10346 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10348 int value2 = op2->__anon1.i;
10351 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
10354 exp->expType = op1->type;
10356 op1->type->refCount++;
10361 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10363 unsigned int value2 = op2->__anon1.ui;
10366 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
10369 exp->expType = op1->type;
10371 op1->type->refCount++;
10376 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10378 long long value2 = op2->__anon1.i64;
10381 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
10384 exp->expType = op1->type;
10386 op1->type->refCount++;
10391 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10393 uint64 value2 = op2->__anon1.ui64;
10396 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
10399 exp->expType = op1->type;
10401 op1->type->refCount++;
10406 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10408 short value2 = op2->__anon1.s;
10411 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
10414 exp->expType = op1->type;
10416 op1->type->refCount++;
10421 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10423 unsigned short value2 = op2->__anon1.us;
10426 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
10429 exp->expType = op1->type;
10431 op1->type->refCount++;
10436 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10438 char value2 = op2->__anon1.c;
10441 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
10444 exp->expType = op1->type;
10446 op1->type->refCount++;
10451 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10453 unsigned char value2 = op2->__anon1.uc;
10456 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
10459 exp->expType = op1->type;
10461 op1->type->refCount++;
10466 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10468 float value2 = op2->__anon1.f;
10471 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
10474 exp->expType = op1->type;
10476 op1->type->refCount++;
10481 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10483 double value2 = op2->__anon1.d;
10486 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
10489 exp->expType = op1->type;
10491 op1->type->refCount++;
10496 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10498 int value2 = op2->__anon1.i;
10501 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
10504 exp->expType = op1->type;
10506 op1->type->refCount++;
10511 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10513 unsigned int value2 = op2->__anon1.ui;
10516 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
10519 exp->expType = op1->type;
10521 op1->type->refCount++;
10526 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10528 long long value2 = op2->__anon1.i64;
10531 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
10534 exp->expType = op1->type;
10536 op1->type->refCount++;
10541 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10543 uint64 value2 = op2->__anon1.ui64;
10546 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
10549 exp->expType = op1->type;
10551 op1->type->refCount++;
10556 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10558 short value2 = op2->__anon1.s;
10561 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
10564 exp->expType = op1->type;
10566 op1->type->refCount++;
10571 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10573 unsigned short value2 = op2->__anon1.us;
10576 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
10579 exp->expType = op1->type;
10581 op1->type->refCount++;
10586 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10588 char value2 = op2->__anon1.c;
10591 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
10594 exp->expType = op1->type;
10596 op1->type->refCount++;
10601 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10603 unsigned char value2 = op2->__anon1.uc;
10606 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
10609 exp->expType = op1->type;
10611 op1->type->refCount++;
10616 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10618 float value2 = op2->__anon1.f;
10621 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
10624 exp->expType = op1->type;
10626 op1->type->refCount++;
10631 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10633 double value2 = op2->__anon1.d;
10636 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
10639 exp->expType = op1->type;
10641 op1->type->refCount++;
10646 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10649 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
10652 exp->expType = op1->type;
10654 op1->type->refCount++;
10659 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10662 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
10665 exp->expType = op1->type;
10667 op1->type->refCount++;
10672 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10675 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
10678 exp->expType = op1->type;
10680 op1->type->refCount++;
10685 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10688 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
10691 exp->expType = op1->type;
10693 op1->type->refCount++;
10698 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10701 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
10704 exp->expType = op1->type;
10706 op1->type->refCount++;
10711 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10714 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
10717 exp->expType = op1->type;
10719 op1->type->refCount++;
10724 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10727 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
10730 exp->expType = op1->type;
10732 op1->type->refCount++;
10737 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10740 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
10743 exp->expType = op1->type;
10745 op1->type->refCount++;
10750 struct OpTable intOps =
10752 (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)
10755 struct OpTable uintOps =
10757 (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)
10760 struct OpTable int64Ops =
10762 (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)
10765 struct OpTable uint64Ops =
10767 (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)
10770 struct OpTable shortOps =
10772 (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)
10775 struct OpTable ushortOps =
10777 (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)
10780 struct OpTable floatOps =
10782 (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)
10785 struct OpTable doubleOps =
10787 (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)
10790 struct OpTable charOps =
10792 (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)
10795 struct OpTable ucharOps =
10797 (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)
10800 void ReadString(char * output, char * string)
10802 int len = strlen(string);
10804 unsigned int quoted = 0, escaped = 0;
10806 for(c = 0; c < len; c++)
10808 char ch = string[c];
10866 int UnescapeString(char * d, char * s, int len)
10871 while(j < len && (ch = s[j]))
10876 switch((ch = s[++j]))
10922 char * OffsetEscapedString(char * s, int len, int offset)
10927 while(j < len && k < offset && (ch = s[j]))
10933 return (k == offset) ? s + j : (((void *)0));
10936 extern long long __ecereNameSpace__ecere__com___strtoi64(const char * string, const char * * endString, int base);
10938 extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char * string, const char * * endString, int base);
10940 extern double strtod(const char * , char * * );
10942 extern float (* __ecereMethod_float_inf)(void);
10944 extern float (* __ecereMethod_float_nan)(void);
10946 extern double (* __ecereMethod_double_inf)(void);
10948 extern double (* __ecereMethod_double_nan)(void);
10950 struct Operand GetOperand(struct Expression * exp)
10952 struct Operand op =
10959 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
10962 struct Type * type = exp->expType;
10966 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))
10968 if(!type->__anon1._class->__anon1.registered->dataType)
10969 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
10970 type = type->__anon1._class->__anon1.registered->dataType;
10972 if(exp->type == 3 && op.kind == 13)
10974 op.__anon1.ui64 = (uint64)(uintptr_t)exp->__anon1.__anon2.string;
10976 op.ops = uint64Ops;
10978 else if(exp->isConstant && exp->type == 2)
10980 op.kind = type->kind;
10987 if(exp->__anon1.__anon1.constant[0] == '\'')
10989 op.__anon1.c = exp->__anon1.__anon1.constant[1];
10992 else if(type->isSigned)
10994 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10999 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11007 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11012 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11013 op.ops = ushortOps;
11020 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11025 op.__anon1.ui = strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11033 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11038 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11039 op.ops = uint64Ops;
11046 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11051 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11052 op.ops = uint64Ops;
11059 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11064 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11065 op.ops = uint64Ops;
11070 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11071 op.__anon1.f = __ecereMethod_float_inf();
11072 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11073 op.__anon1.f = -__ecereMethod_float_inf();
11074 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11075 op.__anon1.f = __ecereMethod_float_nan();
11076 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11077 op.__anon1.f = -__ecereMethod_float_nan();
11079 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11083 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11084 op.__anon1.d = __ecereMethod_double_inf();
11085 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11086 op.__anon1.d = -__ecereMethod_double_inf();
11087 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11088 op.__anon1.d = __ecereMethod_double_nan();
11089 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11090 op.__anon1.d = -__ecereMethod_double_nan();
11092 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11093 op.ops = doubleOps;
11098 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11100 op.ops = uint64Ops;
11108 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
11112 switch(_class->typeSize)
11115 if(!strcmp(_class->dataTypeString, "uint64"))
11116 v = (long long)*(uint64 *)ptr;
11118 v = *(long long *)ptr;
11121 if(!strcmp(_class->dataTypeString, "uint"))
11122 v = (long long)*(unsigned int *)ptr;
11124 v = (long long)*(int *)ptr;
11127 if(!strcmp(_class->dataTypeString, "uint16"))
11128 v = (long long)*(unsigned short *)ptr;
11130 v = (long long)*(short *)ptr;
11133 if(!strcmp(_class->dataTypeString, "byte"))
11134 v = (long long)*(unsigned char *)ptr;
11136 v = (long long)*(char *)ptr;
11142 int __ecereVMethodID_class_OnGetString;
11144 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
11146 static __attribute__((unused)) void UnusedFunction()
11150 ((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);
11153 extern int __ecereVMethodID_class_OnGetString;
11155 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
11157 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11159 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
11161 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11162 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
11165 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11166 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11167 struct Type * type;
11168 void * ptr = inst->data + dataMember->offset + offset;
11169 char * result = (((void *)0));
11171 exp->loc = member->loc = inst->loc;
11172 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11173 if(!dataMember->dataType)
11174 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11175 type = dataMember->dataType;
11176 if(type->kind == 8)
11178 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11180 if(_class->type == 4)
11182 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11186 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11187 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11189 for(item = e->values.first; item; item = item->next)
11191 if(item->data == GetEnumValue(_class, ptr))
11193 result = item->name;
11199 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11201 exp->destType = MkClassType(_class->fullName);
11202 ProcessExpressionType(exp);
11206 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11208 if(!_class->dataType)
11209 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11210 type = _class->dataType;
11219 FreeExpContents(exp);
11220 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11226 FreeExpContents(exp);
11227 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11233 FreeExpContents(exp);
11234 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11240 FreeExpContents(exp);
11241 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11247 FreeExpContents(exp);
11248 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11254 FreeExpContents(exp);
11255 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11260 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11263 ListAdd(memberList, member);
11265 if(parentDataMember->type == 1)
11270 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
11272 void PopulateInstance(struct Instantiation * inst)
11274 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
11275 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
11276 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11277 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
11280 inst->members = MkListOne(MkMembersInitList(memberList));
11282 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
11283 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
11285 if(!dataMember->isProperty)
11287 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11288 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
11291 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11292 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11293 struct Type * type;
11294 void * ptr = inst->data + dataMember->offset;
11295 char * result = (((void *)0));
11297 exp->loc = member->loc = inst->loc;
11298 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11299 if(!dataMember->dataType)
11300 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11301 type = dataMember->dataType;
11302 if(type->kind == 8)
11304 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11306 if(_class->type == 4)
11308 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11312 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11313 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11315 for(item = e->values.first; item; item = item->next)
11317 if(item->data == GetEnumValue(_class, ptr))
11319 result = item->name;
11326 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11328 exp->destType = MkClassType(_class->fullName);
11329 ProcessExpressionType(exp);
11332 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11334 if(!_class->dataType)
11335 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11336 type = _class->dataType;
11345 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11351 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11357 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11363 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11369 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11374 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11377 ListAdd(memberList, member);
11383 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);
11385 extern void FreeInstance(struct Instantiation * inst);
11387 void ComputeInstantiation(struct Expression * exp)
11389 struct Instantiation * inst = exp->__anon1.instance;
11390 struct MembersInit * members;
11391 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11392 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11393 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11394 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11395 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11396 int subMemberStackPos = 0;
11399 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11403 if(_class->type == 0 || _class->type == 5)
11405 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11406 if(_class->type == 0)
11407 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11410 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11414 for(members = (*inst->members).first; members; members = members->next)
11416 switch(members->type)
11420 if(members->__anon1.dataMembers)
11422 struct MemberInit * member;
11424 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11426 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11427 unsigned int found = 0;
11428 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11429 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11430 unsigned int dataMemberOffset;
11434 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11437 if(curMember->isProperty)
11438 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11441 dataMember = curMember;
11442 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11443 if(_class->type == 0)
11444 dataMemberOffset += _class->base->structSize;
11451 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11455 if(prop->memberAccess == 1)
11457 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11458 curClass = prop->_class;
11463 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11464 int _subMemberStackPos = 0;
11466 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11470 if(dataMember->memberAccess == 1)
11472 curMember = dataMember;
11473 curClass = dataMember->_class;
11474 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11475 subMemberStackPos = _subMemberStackPos;
11480 if(found && member->initializer && member->initializer->type == 0)
11482 struct Expression * value = member->initializer->__anon1.exp;
11483 struct Type * type = (((void *)0));
11484 unsigned int deepMember = 0;
11488 type = prop->dataType;
11490 else if(dataMember)
11492 if(!dataMember->dataType)
11493 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11494 type = dataMember->dataType;
11496 if(ident && ident->next)
11499 for(ident = ident->next; ident && type; ident = ident->next)
11501 if(type->kind == 8)
11503 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11505 type = prop->dataType;
11508 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11510 type = dataMember->dataType;
11513 else if(type->kind == 9 || type->kind == 10)
11515 struct Type * memberType;
11517 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11519 if(!strcmp(memberType->name, ident->string))
11530 FreeType(value->destType);
11531 value->destType = type;
11534 ComputeExpression(value);
11536 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11538 if(type->kind == 8)
11540 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11542 if(_class->type == 2 || _class->type == 3 || _class->type == 4)
11544 if(!_class->dataType)
11545 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11546 type = _class->dataType;
11551 void * ptr = inst->data + dataMemberOffset;
11553 if(value->type == 2)
11559 GetInt(value, (int *)ptr);
11564 GetInt64(value, (long long *)ptr);
11569 GetIntPtr(value, (intptr_t *)ptr);
11574 GetIntSize(value, (ssize_t *)ptr);
11579 GetFloat(value, (float *)ptr);
11584 GetDouble(value, (double *)ptr);
11589 else if(value->type == 1)
11591 if(type->kind == 8)
11593 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11595 if(_class->type == 1)
11597 ComputeTypeSize(type);
11598 if(value->__anon1.instance->data)
11599 memcpy(ptr, value->__anon1.instance->data, type->size);
11604 else if(prop && prop->Set != (void *)(intptr_t)1)
11606 if(value->type == 1 && value->__anon1.instance->data)
11608 if(type->kind == 8)
11610 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11612 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)))
11614 void (* Set)(void *, void *) = (void *)prop->Set;
11616 Set(inst->data, value->__anon1.instance->data);
11617 PopulateInstance(inst);
11621 else if(value->type == 2)
11627 void (* Set)(void *, double) = (void *)prop->Set;
11629 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11634 void (* Set)(void *, float) = (void *)prop->Set;
11636 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11641 void (* Set)(void *, int) = (void *)prop->Set;
11643 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11648 void (* Set)(void *, long long) = (void *)prop->Set;
11650 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11655 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11657 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11662 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11664 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11669 else if(value->type == 3)
11673 ReadString(temp, value->__anon1.__anon2.string);
11674 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11678 else if(!deepMember && type && _class->type == 3)
11682 if(value->type == 2)
11684 if(type->kind == 8)
11686 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11688 if(_class->type == 3)
11690 if(!_class->dataType)
11691 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11692 type = _class->dataType;
11700 float (* Set)(float) = (void *)prop->Set;
11702 GetFloat(member->initializer->__anon1.exp, &fValue);
11703 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11710 double (* Set)(double) = (void *)prop->Set;
11712 GetDouble(member->initializer->__anon1.exp, &dValue);
11713 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11721 else if(!deepMember && type && _class->type == 2)
11725 if(value->type == 1 && value->__anon1.instance->data)
11727 unsigned int (* Set)(void *) = (void *)prop->Set;
11729 bits = Set(value->__anon1.instance->data);
11731 else if(value->type == 2)
11735 else if(dataMember)
11737 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11738 struct Type * type;
11741 bits = (bits & ~bitMember->mask);
11742 if(!bitMember->dataType)
11743 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11744 type = bitMember->dataType;
11745 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11747 if(!type->__anon1._class->__anon1.registered->dataType)
11748 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11749 type = type->__anon1._class->__anon1.registered->dataType;
11758 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11766 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11775 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11783 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11791 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11799 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11804 bits |= part << bitMember->pos;
11810 if(_class && _class->type == 3)
11812 ComputeExpression(member->initializer->__anon1.exp);
11813 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11815 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11825 if(_class && _class->type == 2)
11827 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11832 FreeInstance(inst);
11836 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
11838 unsigned int result = 0;
11843 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
11844 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
11848 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
11849 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11852 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)
11853 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11856 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)
11857 result = GetOpFloat(op, &op->__anon1.f);
11860 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)
11861 result = GetOpDouble(op, &op->__anon1.d);
11864 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)
11865 result = GetOpUInt64(op, &op->__anon1.ui64);
11868 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)
11869 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11872 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11873 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11876 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11877 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11883 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11885 if(exp->__anon1.op.op == SIZEOF)
11887 FreeExpContents(exp);
11889 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11893 if(!exp->__anon1.op.exp1)
11895 switch(exp->__anon1.op.op)
11899 struct Expression * exp2 = exp->__anon1.op.exp2;
11901 exp->__anon1.op.exp2 = (((void *)0));
11902 FreeExpContents(exp);
11903 FreeType(exp->expType);
11904 FreeType(exp->destType);
11906 ((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
11912 FreeExpContents(exp);
11913 op1->ops.Neg(exp, op1);
11917 if(op1->ops.BitNot)
11919 FreeExpContents(exp);
11920 op1->ops.BitNot(exp, op1);
11926 FreeExpContents(exp);
11927 op1->ops.Not(exp, op1);
11934 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11936 if(Promote(op2, op1->kind, op1->type->isSigned))
11937 op2->kind = op1->kind, op2->ops = op1->ops;
11938 else if(Promote(op1, op2->kind, op2->type->isSigned))
11939 op1->kind = op2->kind, op1->ops = op2->ops;
11941 switch(exp->__anon1.op.op)
11946 FreeExpContents(exp);
11947 op1->ops.Add(exp, op1, op2);
11953 FreeExpContents(exp);
11954 op1->ops.Sub(exp, op1, op2);
11960 FreeExpContents(exp);
11961 op1->ops.Mul(exp, op1, op2);
11967 FreeExpContents(exp);
11968 op1->ops.Div(exp, op1, op2);
11974 FreeExpContents(exp);
11975 op1->ops.Mod(exp, op1, op2);
11979 if(exp->__anon1.op.exp2)
11981 if(op1->ops.BitAnd)
11983 FreeExpContents(exp);
11984 op1->ops.BitAnd(exp, op1, op2);
11991 FreeExpContents(exp);
11992 op1->ops.BitOr(exp, op1, op2);
11996 if(op1->ops.BitXor)
11998 FreeExpContents(exp);
11999 op1->ops.BitXor(exp, op1, op2);
12003 if(op1->ops.LShift)
12005 FreeExpContents(exp);
12006 op1->ops.LShift(exp, op1, op2);
12010 if(op1->ops.RShift)
12012 FreeExpContents(exp);
12013 op1->ops.RShift(exp, op1, op2);
12019 FreeExpContents(exp);
12020 op1->ops.Equ(exp, op1, op2);
12026 FreeExpContents(exp);
12027 op1->ops.Nqu(exp, op1, op2);
12033 FreeExpContents(exp);
12034 op1->ops.And(exp, op1, op2);
12040 FreeExpContents(exp);
12041 op1->ops.Or(exp, op1, op2);
12047 FreeExpContents(exp);
12048 op1->ops.Grt(exp, op1, op2);
12054 FreeExpContents(exp);
12055 op1->ops.Sma(exp, op1, op2);
12059 if(op1->ops.GrtEqu)
12061 FreeExpContents(exp);
12062 op1->ops.GrtEqu(exp, op1, op2);
12066 if(op1->ops.SmaEqu)
12068 FreeExpContents(exp);
12069 op1->ops.SmaEqu(exp, op1, op2);
12077 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
12079 extern struct Expression * MkExpIdentifier(struct Identifier * id);
12081 void ComputeExpression(struct Expression * exp)
12087 ComputeInstantiation(exp);
12092 struct Expression * exp1, * exp2 = (((void *)0));
12093 struct Operand op1 =
12100 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
12103 struct Operand op2 =
12110 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
12114 if(exp->__anon1.op.exp2)
12116 struct Expression * e = exp->__anon1.op.exp2;
12118 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
12120 if(e->type == 5 || e->type == 32 || e->type == 23)
12123 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12125 e = (*e->__anon1.list).last;
12128 if(exp->__anon1.op.op == 261 && e && e->expType)
12130 if(e->type == 3 && e->__anon1.__anon2.string)
12132 char * string = e->__anon1.__anon2.string;
12133 int len = strlen(string);
12134 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
12136 len = UnescapeString(tmp, string + 1, len - 2);
12137 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
12138 FreeExpContents(exp);
12140 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
12144 struct Type * type = e->expType;
12147 FreeExpContents(exp);
12149 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12155 ComputeExpression(exp->__anon1.op.exp2);
12157 if(exp->__anon1.op.exp1)
12159 ComputeExpression(exp->__anon1.op.exp1);
12160 exp1 = exp->__anon1.op.exp1;
12161 exp2 = exp->__anon1.op.exp2;
12162 op1 = GetOperand(exp1);
12164 op1.type->refCount++;
12167 op2 = GetOperand(exp2);
12169 op2.type->refCount++;
12174 exp1 = exp->__anon1.op.exp2;
12175 op1 = GetOperand(exp1);
12177 op1.type->refCount++;
12179 CallOperator(exp, exp1, exp2, &op1, &op2);
12181 FreeType(op1.type);
12183 FreeType(op2.type);
12189 struct Expression * e, * n;
12191 for(e = (*exp->__anon1.list).first; e; e = n)
12196 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
12197 struct Expression * prev = exp->prev;
12198 struct Expression * next = exp->next;
12200 ComputeExpression(e);
12201 FreeType(exp->expType);
12202 FreeType(exp->destType);
12206 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
12207 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
12218 struct Expression * memberExp = exp->__anon1.member.exp;
12219 struct Identifier * memberID = exp->__anon1.member.member;
12220 struct Type * type;
12222 ComputeExpression(exp->__anon1.member.exp);
12223 type = exp->__anon1.member.exp->expType;
12226 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)));
12227 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
12228 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
12229 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
12231 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
12232 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
12236 struct Symbol * classSym;
12239 PrintTypeNoConst(type, string, 0, 1);
12240 classSym = FindClass(string);
12241 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12243 if(exp->__anon1.member.member)
12245 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
12247 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
12249 if(!prop && !member && _class && exp->__anon1.member.member)
12251 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
12253 convertTo = _class;
12254 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12255 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
12261 struct Type * type = prop->dataType;
12263 if(_class->type == 3)
12265 if(type->kind == 8)
12267 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12269 if(_class->type == 3)
12271 if(!_class->dataType)
12272 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12273 type = _class->dataType;
12281 float (* Get)(float) = (void *)prop->Get;
12283 GetFloat(exp->__anon1.member.exp, &value);
12284 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
12291 double (* Get)(double);
12293 GetDouble(exp->__anon1.member.exp, &value);
12295 Get = (void *)prop->Set;
12297 Get = (void *)prop->Get;
12298 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
12308 struct Expression * value = exp->__anon1.member.exp;
12309 struct Type * type;
12311 if(!prop->dataType)
12312 ProcessPropertyType(prop);
12313 type = prop->dataType;
12317 else if(_class->type == 1)
12323 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12325 if(propertyClass->type == 1 && value->type == 1)
12327 void (* Set)(void *, void *) = (void *)prop->Set;
12329 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12330 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12331 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12332 exp->__anon1.instance->loc = exp->loc;
12334 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
12335 PopulateInstance(exp->__anon1.instance);
12342 void (* Set)(void *, int) = (void *)prop->Set;
12344 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12345 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12346 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12347 exp->__anon1.instance->loc = exp->loc;
12349 GetInt(value, &intValue);
12350 Set(exp->__anon1.instance->data, intValue);
12351 PopulateInstance(exp->__anon1.instance);
12356 long long intValue;
12357 void (* Set)(void *, long long) = (void *)prop->Set;
12359 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12360 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12361 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12362 exp->__anon1.instance->loc = exp->loc;
12364 GetInt64(value, &intValue);
12365 Set(exp->__anon1.instance->data, intValue);
12366 PopulateInstance(exp->__anon1.instance);
12372 void (* Set)(void *, intptr_t) = (void *)prop->Set;
12374 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12375 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12376 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12377 exp->__anon1.instance->loc = exp->loc;
12379 GetIntPtr(value, &intValue);
12380 Set(exp->__anon1.instance->data, intValue);
12381 PopulateInstance(exp->__anon1.instance);
12387 void (* Set)(void *, ssize_t) = (void *)prop->Set;
12389 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12390 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12391 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12392 exp->__anon1.instance->loc = exp->loc;
12394 GetIntSize(value, &intValue);
12395 Set(exp->__anon1.instance->data, intValue);
12396 PopulateInstance(exp->__anon1.instance);
12402 void (* Set)(void *, float) = (void *)prop->Set;
12404 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12405 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12406 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12407 exp->__anon1.instance->loc = exp->loc;
12409 GetFloat(value, &floatValue);
12410 Set(exp->__anon1.instance->data, floatValue);
12411 PopulateInstance(exp->__anon1.instance);
12416 double doubleValue;
12417 void (* Set)(void *, double) = (void *)prop->Set;
12419 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12420 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12421 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12422 exp->__anon1.instance->loc = exp->loc;
12424 GetDouble(value, &doubleValue);
12425 Set(exp->__anon1.instance->data, doubleValue);
12426 PopulateInstance(exp->__anon1.instance);
12431 else if(_class->type == 2)
12437 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12439 if(propertyClass->type == 1 && value->__anon1.instance->data)
12441 unsigned int (* Set)(void *) = (void *)prop->Set;
12442 unsigned int bits = Set(value->__anon1.instance->data);
12444 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12448 else if(_class->type == 2)
12450 unsigned int value;
12451 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
12454 GetUInt(exp->__anon1.member.exp, &value);
12456 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12465 if(_class->type == 2)
12467 unsigned int value;
12469 GetUInt(exp->__anon1.member.exp, &value);
12474 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12476 if(_class->type == 1)
12478 void (* Get)(unsigned int, void *) = (void *)prop->Get;
12480 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12481 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12482 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12483 exp->__anon1.instance->loc = exp->loc;
12485 Get(value, exp->__anon1.instance->data);
12486 PopulateInstance(exp->__anon1.instance);
12488 else if(_class->type == 2)
12490 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
12491 uint64 bits = Get(value);
12493 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
12500 else if(_class->type == 1)
12502 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
12508 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12510 if(_class->type == 1 && value)
12512 void (* Get)(void *, void *) = (void *)prop->Get;
12514 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12515 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12516 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12517 exp->__anon1.instance->loc = exp->loc;
12519 Get(value, exp->__anon1.instance->data);
12520 PopulateInstance(exp->__anon1.instance);
12531 exp->isConstant = 0;
12540 FreeExpression(memberExp);
12541 FreeIdentifier(memberID);
12547 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
12549 FreeExpContents(exp);
12550 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12557 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
12559 if(classSym && classSym->__anon1.registered)
12561 if(classSym->__anon1.registered->fixed)
12563 FreeSpecifier(exp->__anon1._class);
12564 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
12569 char className[1024];
12571 strcpy(className, "__ecereClass_");
12572 FullClassNameCat(className, classSym->string, 1);
12573 DeclareClass(classSym, className);
12574 FreeExpContents(exp);
12576 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
12577 exp->__anon1.member.member = MkIdentifier("structSize");
12584 struct Type * type;
12585 struct Expression * e = exp;
12587 if(exp->type == 11)
12589 if(exp->__anon1.cast.exp)
12590 ComputeExpression(exp->__anon1.cast.exp);
12591 e = exp->__anon1.cast.exp;
12593 if(e && exp->expType)
12595 type = exp->expType;
12596 if(type->kind == 8)
12598 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12600 if(_class && (_class->type == 3 || _class->type == 2))
12602 if(!_class->dataType)
12603 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12604 type = _class->dataType;
12613 char value = (char)0;
12615 if(GetChar(e, &value))
12617 FreeExpContents(exp);
12618 exp->__anon1.__anon1.constant = PrintChar(value);
12624 unsigned char value = (unsigned char)0;
12626 if(GetUChar(e, &value))
12628 FreeExpContents(exp);
12629 exp->__anon1.__anon1.constant = PrintUChar(value);
12637 short value = (short)0;
12639 if(GetShort(e, &value))
12641 FreeExpContents(exp);
12642 exp->__anon1.__anon1.constant = PrintShort(value);
12648 unsigned short value = (unsigned short)0;
12650 if(GetUShort(e, &value))
12652 FreeExpContents(exp);
12653 exp->__anon1.__anon1.constant = PrintUShort(value);
12663 if(GetInt(e, &value))
12665 FreeExpContents(exp);
12666 exp->__anon1.__anon1.constant = PrintInt(value);
12672 unsigned int value = 0;
12674 if(GetUInt(e, &value))
12676 FreeExpContents(exp);
12677 exp->__anon1.__anon1.constant = PrintUInt(value);
12685 long long value = 0;
12687 if(GetInt64(e, &value))
12689 FreeExpContents(exp);
12690 exp->__anon1.__anon1.constant = PrintInt64(value);
12698 if(GetUInt64(e, &value))
12700 FreeExpContents(exp);
12701 exp->__anon1.__anon1.constant = PrintUInt64(value);
12709 intptr_t value = 0;
12711 if(GetIntPtr(e, &value))
12713 FreeExpContents(exp);
12714 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12720 uintptr_t value = 0;
12722 if(GetUIntPtr(e, &value))
12724 FreeExpContents(exp);
12725 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12735 if(GetIntSize(e, &value))
12737 FreeExpContents(exp);
12738 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12746 if(GetUIntSize(e, &value))
12748 FreeExpContents(exp);
12749 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12758 if(GetFloat(e, &value))
12760 FreeExpContents(exp);
12761 exp->__anon1.__anon1.constant = PrintFloat(value);
12770 if(GetDouble(e, &value))
12772 FreeExpContents(exp);
12773 exp->__anon1.__anon1.constant = PrintDouble(value);
12784 struct Operand op1 =
12791 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
12794 struct Operand op2 =
12801 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
12804 struct Operand op3 =
12811 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
12815 if(exp->__anon1.cond.exp)
12816 ComputeExpression((*exp->__anon1.cond.exp).last);
12817 if(exp->__anon1.cond.elseExp)
12818 ComputeExpression(exp->__anon1.cond.elseExp);
12819 if(exp->__anon1.cond.cond)
12820 ComputeExpression(exp->__anon1.cond.cond);
12821 op1 = GetOperand(exp->__anon1.cond.cond);
12823 op1.type->refCount++;
12824 op2 = GetOperand((*exp->__anon1.cond.exp).last);
12826 op2.type->refCount++;
12827 op3 = GetOperand(exp->__anon1.cond.elseExp);
12829 op3.type->refCount++;
12832 FreeExpContents(exp);
12833 op1.ops.Cond(exp, &op1, &op2, &op3);
12836 FreeType(op1.type);
12838 FreeType(op2.type);
12840 FreeType(op3.type);
12846 void ApplyAnyObjectLogic(struct Expression * e);
12848 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
12850 unsigned int result = 1;
12854 struct __ecereNameSpace__ecere__sys__OldList converts =
12858 struct Conversion * convert;
12860 if(destType->kind == 0)
12862 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
12866 for(convert = converts.first; convert; convert = convert->next)
12868 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
12872 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12873 int objectType = exp->expType ? exp->expType->classObjectType : 0;
12876 newExp->prev = (((void *)0));
12877 newExp->next = (((void *)0));
12878 newExp->destType = (((void *)0));
12882 exp->addedThis = 1;
12883 exp->__anon1.member.exp = newExp;
12884 FreeType(exp->__anon1.member.exp->expType);
12885 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
12886 exp->__anon1.member.exp->expType->classObjectType = objectType;
12887 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
12888 exp->__anon1.member.memberType = 1;
12889 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12892 exp->expType->refCount++;
12893 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12899 exp->addedThis = 1;
12900 exp->__anon1.member.exp = newExp;
12901 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)
12903 newExp->byReference = 1;
12905 FreeType(exp->__anon1.member.exp->expType);
12906 exp->__anon1.member.exp->expType = (((void *)0));
12907 if(convert->convert->dataType)
12909 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12910 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
12911 exp->__anon1.member.exp->expType->refCount = 1;
12912 exp->__anon1.member.exp->expType->classObjectType = objectType;
12913 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12915 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
12916 exp->__anon1.member.memberType = 4;
12917 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12919 if(convert->resultType)
12920 convert->resultType->refCount++;
12926 FreeType(exp->expType);
12929 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12930 if(exp->destType->casted)
12933 exp->expType->refCount++;
12937 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12938 if(exp->destType->casted)
12940 if(convert->resultType)
12941 convert->resultType->refCount++;
12945 if(exp->isConstant && inCompiler)
12946 ComputeExpression(exp);
12947 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
12949 if(!result && exp->expType && converts.count)
12951 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
12953 if(!result && exp->expType && exp->destType)
12955 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))
12962 extern struct Expression * GetNonBracketsExp(struct Expression * exp);
12964 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
12966 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
12968 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
12970 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
12972 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_isPointerType;
12974 void CheckTemplateTypes(struct Expression * exp)
12976 struct Expression * nbExp = GetNonBracketsExp(exp);
12978 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
12980 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12981 struct Context * context;
12982 int kind = exp->expType->kind;
12986 exp->destType->refCount++;
12988 exp->expType->refCount++;
12989 newExp->prev = (((void *)0));
12990 newExp->next = (((void *)0));
12991 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
12993 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
12995 if(c->type == 2 || c->type == 4 || c->type == 3)
12998 c->dataType = ProcessTypeString(c->dataTypeString, 0);
12999 kind = c->dataType->kind;
13005 if(exp->destType->classObjectType)
13008 exp->destType->refCount--;
13010 exp->expType->refCount--;
13011 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13015 struct __ecereNameSpace__ecere__sys__OldList * specs;
13016 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
13017 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
13019 context = PushContext();
13020 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
13021 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
13022 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
13024 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
13025 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
13026 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
13027 exp->__anon1.compound->__anon1.compound.context = context;
13028 PopContext(context);
13033 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
13034 if((exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1) || __ecereProp_Type_Get_isPointerType(exp->expType))
13035 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
13037 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13042 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
13044 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13045 struct Context * context;
13046 int kind = exp->expType->kind;
13050 exp->destType->refCount++;
13052 exp->expType->refCount++;
13053 newExp->prev = (((void *)0));
13054 newExp->next = (((void *)0));
13055 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered)
13057 struct __ecereNameSpace__ecere__com__Class * c = exp->expType->__anon1._class->__anon1.registered;
13059 if(c->type == 2 || c->type == 4 || c->type == 3)
13062 c->dataType = ProcessTypeString(c->dataTypeString, 0);
13063 kind = c->dataType->kind;
13069 if(exp->destType->classObjectType)
13072 exp->destType->refCount--;
13074 exp->expType->refCount--;
13075 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13079 struct __ecereNameSpace__ecere__sys__OldList * specs;
13080 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
13081 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
13083 context = PushContext();
13084 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
13085 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
13086 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
13088 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
13089 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
13090 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
13091 exp->__anon1.compound->__anon1.compound.context = context;
13092 PopContext(context);
13097 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
13100 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
13101 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)));
13102 ProcessExpressionType((*exp->__anon1.list).first);
13108 if(__ecereProp_Type_Get_isPointerType(exp->expType))
13110 exp->needTemplateCast = 2;
13111 newExp->needCast = 1;
13112 newExp->needTemplateCast = 2;
13113 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
13115 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
13116 exp->needTemplateCast = 2;
13117 newExp->needCast = 1;
13118 newExp->needTemplateCast = 2;
13119 ProcessExpressionType((*exp->__anon1.list).first);
13125 if(exp->expType->kind == 20)
13127 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
13131 FreeType(exp->destType);
13132 FreeType(exp->expType);
13133 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13137 if(newExp->type == 8 && newExp->__anon1.member.memberType == 3)
13140 exp->__anon1.op.op = '*';
13141 exp->__anon1.op.exp1 = (((void *)0));
13142 exp->__anon1.op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '&', newExp))));
13146 char typeString[1024];
13147 struct Declarator * decl;
13148 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13150 typeString[0] = '\0';
13151 PrintType(exp->expType, typeString, 0, 0);
13152 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13154 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
13155 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13156 exp->__anon1.cast.exp->needCast = 1;
13164 extern int strncmp(const char * , const char * , size_t n);
13166 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
13168 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
13170 int nsLen = strlen(nameSpace);
13171 struct Symbol * symbol;
13173 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)))
13175 char * s = symbol->string;
13177 if(!strncmp(s, nameSpace, nsLen))
13182 for(c = strlen(s) - 1; c >= 0; c--)
13185 namePart = s + c + 1;
13186 if(!strcmp(namePart, name))
13194 return (((void *)0));
13197 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
13200 char nameSpace[1024];
13201 const char * namePart;
13202 unsigned int gotColon = 0;
13204 nameSpace[0] = '\0';
13205 for(c = strlen(name) - 1; c >= 0; c--)
13211 namePart = name + c + 1;
13212 while(c >= 0 && name[c] == ':')
13216 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
13220 memcpy(nameSpace, name, c + 1);
13221 nameSpace[c + 1] = (char)0;
13222 return ScanWithNameSpace(tree, nameSpace, namePart);
13226 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13232 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13236 return ScanWithNameSpace(tree, "", namePart);
13238 return (((void *)0));
13241 static void ProcessDeclaration(struct Declaration * decl);
13243 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
13245 struct Context * ctx;
13246 struct Symbol * symbol = (((void *)0));
13248 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
13250 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
13252 symbol = (((void *)0));
13255 char curName[1024];
13257 strcpy(curName, thisNameSpace);
13258 strcat(curName, "::");
13259 strcat(curName, name);
13260 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
13263 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
13266 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
13267 if(symbol || ctx == endContext)
13270 if(inCompiler && curExternal && symbol && ctx == globalContext && curExternal->symbol && symbol->id > curExternal->symbol->idCode && symbol->__anon2.__anon1.pointerExternal)
13272 if(symbol->__anon2.__anon1.pointerExternal->type == 0)
13274 struct FunctionDefinition * function = symbol->__anon2.__anon1.pointerExternal->__anon1.function;
13275 struct Context * tmpContext = curContext;
13277 curContext = (((void *)0));
13278 symbol->__anon2.__anon1.pointerExternal = MkExternalDeclaration(MkDeclaration(CopyList(function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(function->declarator), (((void *)0))))));
13279 curContext = tmpContext;
13280 symbol->__anon2.__anon1.pointerExternal->symbol = symbol;
13281 DeclareType(symbol->type, 1, 1);
13282 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, symbol->__anon2.__anon1.pointerExternal);
13283 symbol->id = curExternal->symbol->idCode;
13285 else if(symbol->__anon2.__anon1.pointerExternal->type == 1 && curExternal->symbol->idCode < symbol->__anon2.__anon1.pointerExternal->symbol->id)
13287 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
13288 symbol->id = curExternal->symbol->idCode;
13294 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
13296 if(!type->isSigned && type->kind != 22 && type->kind != 23)
13297 ListAdd(specs, MkSpecifier(UNSIGNED));
13302 if(type->__anon1._class->__anon1.registered)
13304 if(!type->__anon1._class->__anon1.registered->dataType)
13305 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
13306 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
13311 ListAdd(specs, MkSpecifier(DOUBLE));
13314 ListAdd(specs, MkSpecifier(FLOAT));
13317 ListAdd(specs, MkSpecifier(CHAR));
13320 ListAdd(specs, MkSpecifier(_BOOL));
13323 ListAdd(specs, MkSpecifier(SHORT));
13326 ListAdd(specs, MkSpecifier(INT64));
13329 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
13332 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
13336 ListAdd(specs, MkSpecifier(INT));
13341 static void PrintArraySize(struct Type * arrayType, char * string)
13347 if(arrayType->__anon1.__anon4.enumClass)
13348 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
13349 else if(arrayType->__anon1.__anon4.arraySizeExp)
13350 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
13352 strcat(string, size);
13355 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
13359 if(printConst && type->constant)
13360 strcat(string, "const ");
13365 struct Symbol * c = type->__anon1._class;
13366 unsigned int isObjectBaseClass = !c || !c->string || !strcmp(c->string, "class");
13368 if(type->classObjectType == 2 && isObjectBaseClass)
13369 strcat(string, "typed_object");
13370 else if(type->classObjectType == 3 && isObjectBaseClass)
13371 strcat(string, "any_object");
13375 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
13377 if(type->byReference)
13378 strcat(string, " &");
13382 strcat(string, "void");
13385 strcat(string, type->isSigned ? "int" : "uint");
13388 strcat(string, type->isSigned ? "int64" : "uint64");
13391 strcat(string, type->isSigned ? "intptr" : "uintptr");
13394 strcat(string, type->isSigned ? "intsize" : "uintsize");
13397 strcat(string, type->isSigned ? "char" : "byte");
13400 strcat(string, "_Bool");
13403 strcat(string, type->isSigned ? "short" : "uint16");
13406 strcat(string, "float");
13409 strcat(string, "double");
13412 if(type->__anon1.__anon1.enumName)
13414 strcat(string, "struct ");
13415 strcat(string, type->__anon1.__anon1.enumName);
13417 else if(type->typeName)
13418 strcat(string, type->typeName);
13421 struct Type * member;
13423 strcat(string, "struct { ");
13424 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
13426 PrintType(member, string, 1, fullName);
13427 strcat(string, "; ");
13429 strcat(string, "}");
13433 if(type->__anon1.__anon1.enumName)
13435 strcat(string, "union ");
13436 strcat(string, type->__anon1.__anon1.enumName);
13438 else if(type->typeName)
13439 strcat(string, type->typeName);
13442 strcat(string, "union ");
13443 strcat(string, "(unnamed)");
13447 if(type->__anon1.__anon1.enumName)
13449 strcat(string, "enum ");
13450 strcat(string, type->__anon1.__anon1.enumName);
13452 else if(type->typeName)
13453 strcat(string, type->typeName);
13455 strcat(string, "int");
13458 strcat(string, "...");
13461 strcat(string, "subclass(");
13462 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
13463 strcat(string, ")");
13466 strcat(string, type->__anon1.templateParameter->identifier->string);
13469 strcat(string, "thisclass");
13472 strcat(string, "__builtin_va_list");
13478 extern char * __ecereNameSpace__ecere__sys__RSearchString(const char * buffer, const char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
13480 static void PrintName(struct Type * type, char * string, unsigned int fullName)
13482 if(type->name && type->name[0])
13485 strcat(string, type->name);
13488 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
13494 strcat(string, name);
13499 static void PrintAttribs(struct Type * type, char * string)
13503 if(type->dllExport)
13504 strcat(string, "dllexport ");
13505 if(type->attrStdcall)
13506 strcat(string, "stdcall ");
13510 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
13512 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13514 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
13515 PrintAttribs(type, string);
13516 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
13517 strcat(string, " const");
13518 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
13519 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13520 strcat(string, " (");
13521 if(type->kind == 13)
13523 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
13524 PrintAttribs(type->__anon1.type, string);
13526 if(type->kind == 13)
13528 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
13529 strcat(string, "*");
13531 strcat(string, " *");
13533 if(printConst && type->constant && type->kind == 13)
13534 strcat(string, " const");
13537 PrintTypeSpecs(type, string, fullName, printConst);
13540 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
13542 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13543 strcat(string, ")");
13544 if(type->kind == 12)
13545 PrintArraySize(type, string);
13546 else if(type->kind == 11)
13548 struct Type * param;
13550 strcat(string, "(");
13551 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
13553 PrintType(param, string, 1, fullName);
13555 strcat(string, ", ");
13557 strcat(string, ")");
13559 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13560 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
13563 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
13565 PrePrintType(type, string, fullName, (((void *)0)), printConst);
13566 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
13567 strcat(string, " ");
13568 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
13570 struct Symbol * _class = type->__anon1.__anon2.thisClass;
13572 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
13574 if(type->classObjectType == 1)
13575 strcat(string, "class");
13577 strcat(string, type->byReference ? "typed_object&" : "typed_object");
13579 else if(_class && _class->string)
13581 char * s = _class->string;
13587 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
13593 strcat(string, name);
13596 strcat(string, "::");
13598 if(printName && type->name)
13599 PrintName(type, string, fullName);
13600 PostPrintType(type, string, fullName);
13601 if(type->bitFieldCount)
13605 sprintf(count, ":%d", type->bitFieldCount);
13606 strcat(string, count);
13610 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13612 _PrintType(type, string, printName, fullName, 1);
13615 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13617 _PrintType(type, string, printName, fullName, 0);
13620 static struct Type * FindMember(struct Type * type, char * string)
13622 struct Type * memberType;
13624 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13626 if(!memberType->name)
13628 struct Type * subType = FindMember(memberType, string);
13633 else if(!strcmp(memberType->name, string))
13636 return (((void *)0));
13639 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
13641 struct Type * memberType;
13643 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13645 if(!memberType->name)
13647 struct Type * subType = FindMember(memberType, string);
13651 *offset += memberType->offset;
13655 else if(!strcmp(memberType->name, string))
13657 *offset += memberType->offset;
13661 return (((void *)0));
13664 extern unsigned int parseError;
13666 unsigned int GetParseError()
13671 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
13673 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
13675 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
13677 struct Expression * ParseExpressionString(char * expression)
13680 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
13681 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
13682 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13684 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13685 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
13686 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
13687 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13689 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13690 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
13692 parsedExpression = (((void *)0));
13694 expression_yyparse();
13695 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
13696 return parsedExpression;
13699 extern char * QMkString(const char * source);
13701 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
13703 struct Identifier * id = exp->__anon1.__anon1.identifier;
13704 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
13705 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13706 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13707 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
13709 if(_class && _class->type == 4)
13711 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
13712 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13716 struct __ecereNameSpace__ecere__com__Class * baseClass;
13718 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
13720 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13722 for(value = e->values.first; value; value = value->next)
13724 if(!strcmp(value->name, id->string))
13729 exp->isConstant = 1;
13730 if(inCompiler || inPreCompiler || inDebugger)
13732 char constant[256];
13734 FreeExpContents(exp);
13736 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
13737 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13739 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
13740 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13742 exp->expType = MkClassType(baseClass->fullName);
13750 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
13752 ProcessMethodType(method);
13753 exp->expType = __extension__ ({
13754 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13756 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
13760 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
13762 if(!prop->dataType)
13763 ProcessPropertyType(prop);
13764 exp->expType = prop->dataType;
13766 prop->dataType->refCount++;
13769 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
13771 if(!member->dataType)
13772 member->dataType = ProcessTypeString(member->dataTypeString, 0);
13773 exp->expType = member->dataType;
13774 if(member->dataType)
13775 member->dataType->refCount++;
13778 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
13780 if(!classProp->dataType)
13781 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
13782 if(classProp->constant)
13784 FreeExpContents(exp);
13785 exp->isConstant = 1;
13786 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
13789 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
13793 char constant[256];
13796 sprintf(constant, "%d", (int)classProp->Get(_class));
13797 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13803 exp->expType = classProp->dataType;
13804 if(classProp->dataType)
13805 classProp->dataType->refCount++;
13811 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
13813 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
13814 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
13815 struct __ecereNameSpace__ecere__com__NameSpace * child;
13819 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)))
13821 data = ScanGlobalData(child, name);
13829 extern struct __ecereNameSpace__ecere__com__NameSpace * globalData;
13831 extern char * strncpy(char * , const char * , size_t n);
13833 static struct GlobalData * FindGlobalData(char * name)
13836 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
13838 nameSpace = globalData;
13839 for(c = 0; name[c]; c++)
13841 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
13843 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
13844 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
13846 strncpy(spaceName, name + start, c - start);
13847 spaceName[c - start] = '\0';
13848 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
13849 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
13851 return (((void *)0));
13852 nameSpace = newSpace;
13860 return ScanGlobalData(nameSpace, name + start);
13862 return (((void *)0));
13865 static int definedExpStackPos;
13867 static void * definedExpStack[512];
13869 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
13871 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
13873 FreeExpContents(checkedExp);
13874 FreeType(checkedExp->expType);
13875 FreeType(checkedExp->destType);
13876 *checkedExp = *newExp;
13877 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13878 checkedExp->prev = prev;
13879 checkedExp->next = next;
13882 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
13884 extern int printf(const char * , ...);
13886 void __ecereMethod_Expression_Clear();
13888 void ApplyAnyObjectLogic(struct Expression * e)
13890 struct Type * destType = e->destType;
13892 if(destType && (destType->classObjectType == 3))
13894 if(e && e->expType)
13896 struct Type * type = e->expType;
13897 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
13899 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
13901 _class = type->__anon1._class->__anon1.registered;
13903 else if(type->kind == 19)
13905 _class = FindClass("ecere::com::Class")->__anon1.registered;
13909 char string[1024] = "";
13910 struct Symbol * classSym;
13912 PrintTypeNoConst(type, string, 0, 1);
13913 classSym = FindClass(string);
13915 _class = classSym->__anon1.registered;
13917 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)))
13919 if(!_class || strcmp(_class->fullName, "char *"))
13921 struct Expression * checkedExp = e, * newExp;
13923 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
13925 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
13927 if(checkedExp->type == 23)
13929 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13932 checkedExp = (*checkedExp->__anon1.list).last;
13934 else if(checkedExp->type == 11)
13935 checkedExp = checkedExp->__anon1.cast.exp;
13937 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
13939 newExp = checkedExp->__anon1.op.exp2;
13940 checkedExp->__anon1.op.exp2 = (((void *)0));
13941 FreeExpContents(checkedExp);
13942 if(e->expType && e->expType->passAsTemplate)
13946 ComputeTypeSize(e->expType);
13947 sprintf(size, "%d", e->expType->size);
13948 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))))));
13950 ReplaceExpContents(checkedExp, newExp);
13951 e->byReference = 1;
13953 else if(!e->byReference || (_class && _class->type == 5))
13955 struct Expression * checkedExp;
13958 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;
13960 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
13962 struct Context * context = PushContext();
13963 struct Declarator * decl;
13964 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13965 char typeString[1024];
13966 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13968 typeString[0] = '\0';
13970 newExp->prev = (((void *)0));
13971 newExp->next = (((void *)0));
13972 newExp->expType = (((void *)0));
13973 PrintTypeNoConst(e->expType, typeString, 0, 1);
13974 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13975 newExp->destType = ProcessType(specs, decl);
13976 curContext = context;
13980 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
13983 sprintf(name, "__internalValue%03X", internalValueCounter++);
13984 if(!curCompound->__anon1.compound.declarations)
13985 curCompound->__anon1.compound.declarations = MkList();
13986 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
13987 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
13988 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
13989 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
13992 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
13994 struct Type * type = e->destType;
13996 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13997 CopyTypeInto(e->destType, type);
13998 e->destType->refCount = 1;
13999 e->destType->classObjectType = 0;
14002 e->__anon1.compound->__anon1.compound.context = context;
14003 PopContext(context);
14004 curContext = context->parent;
14008 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
14010 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
14012 if(checkedExp->type == 23)
14014 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
14017 checkedExp = (*checkedExp->__anon1.list).last;
14019 else if(checkedExp->type == 11)
14020 checkedExp = checkedExp->__anon1.cast.exp;
14023 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14025 *operand = *checkedExp;
14026 __ecereMethod_Expression_Clear(checkedExp);
14027 checkedExp->destType = ProcessTypeString("void *", 0);
14028 checkedExp->expType = checkedExp->destType;
14029 checkedExp->destType->refCount++;
14030 checkedExp->type = 4;
14031 checkedExp->__anon1.op.op = '&';
14032 checkedExp->__anon1.op.exp1 = (((void *)0));
14033 checkedExp->__anon1.op.exp2 = operand;
14042 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))))
14044 if(e->expType->classObjectType && destType && destType->classObjectType)
14050 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14053 thisExp->prev = (((void *)0));
14054 thisExp->next = (((void *)0));
14055 __ecereMethod_Expression_Clear(e);
14057 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
14058 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
14059 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
14061 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14062 CopyTypeInto(e->expType, thisExp->expType);
14063 e->expType->byReference = 0;
14064 e->expType->refCount = 1;
14065 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))
14067 e->expType->classObjectType = 0;
14072 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
14074 if(destType->kind == 14)
14076 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
14078 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))
14080 unsigned int byReference = e->expType->byReference;
14081 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14082 struct Declarator * decl;
14083 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14084 char typeString[1024];
14085 struct Type * type;
14086 int backupClassObjectType;
14087 unsigned int backupByReference;
14089 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
14093 backupClassObjectType = type->classObjectType;
14094 backupByReference = type->byReference;
14095 type->classObjectType = 0;
14096 type->byReference = 0;
14097 typeString[0] = '\0';
14098 PrintType(type, typeString, 0, 1);
14099 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
14100 type->classObjectType = backupClassObjectType;
14101 type->byReference = backupByReference;
14103 thisExp->prev = (((void *)0));
14104 thisExp->next = (((void *)0));
14105 __ecereMethod_Expression_Clear(e);
14106 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)))
14108 unsigned int passAsTemplate = thisExp->destType->passAsTemplate;
14111 destType->refCount++;
14113 e->__anon1.op.op = '*';
14114 e->__anon1.op.exp1 = (((void *)0));
14115 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
14116 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14117 CopyTypeInto(t, thisExp->destType);
14118 t->passAsTemplate = 0;
14119 FreeType(thisExp->destType);
14120 thisExp->destType = t;
14121 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14122 CopyTypeInto(t, destType);
14123 t->passAsTemplate = passAsTemplate;
14124 FreeType(destType);
14126 destType->refCount = 0;
14127 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14128 CopyTypeInto(e->expType, type);
14129 if(type->passAsTemplate)
14131 e->expType->classObjectType = 0;
14132 e->expType->passAsTemplate = 0;
14134 e->expType->byReference = 0;
14135 e->expType->refCount = 1;
14140 e->__anon1.cast.typeName = MkTypeName(specs, decl);
14141 e->__anon1.cast.exp = thisExp;
14142 e->byReference = 1;
14147 FreeType(e->destType);
14148 e->destType = destType;
14149 destType->refCount++;
14154 void ApplyLocation(struct Expression * exp, struct Location * loc)
14160 if(exp->__anon1.op.exp1)
14161 ApplyLocation(exp->__anon1.op.exp1, loc);
14162 if(exp->__anon1.op.exp2)
14163 ApplyLocation(exp->__anon1.op.exp2, loc);
14166 if(exp->__anon1.list)
14168 struct Expression * e;
14170 for(e = (*exp->__anon1.list).first; e; e = e->next)
14171 ApplyLocation(e, loc);
14175 if(exp->__anon1.index.index)
14177 struct Expression * e;
14179 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
14180 ApplyLocation(e, loc);
14182 if(exp->__anon1.index.exp)
14183 ApplyLocation(exp->__anon1.index.exp, loc);
14186 if(exp->__anon1.call.arguments)
14188 struct Expression * arg;
14190 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
14191 ApplyLocation(arg, loc);
14193 if(exp->__anon1.call.exp)
14194 ApplyLocation(exp->__anon1.call.exp, loc);
14198 if(exp->__anon1.member.exp)
14199 ApplyLocation(exp->__anon1.member.exp, loc);
14202 if(exp->__anon1.cast.exp)
14203 ApplyLocation(exp->__anon1.cast.exp, loc);
14206 if(exp->__anon1.cond.exp)
14208 struct Expression * e;
14210 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
14211 ApplyLocation(e, loc);
14213 if(exp->__anon1.cond.cond)
14214 ApplyLocation(exp->__anon1.cond.cond, loc);
14215 if(exp->__anon1.cond.elseExp)
14216 ApplyLocation(exp->__anon1.cond.elseExp, loc);
14219 if(exp->__anon1.vaArg.exp)
14220 ApplyLocation(exp->__anon1.vaArg.exp, loc);
14227 extern char * strstr(const char * , const char * );
14229 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
14231 struct __ecereNameSpace__ecere__com__DefinedExpression
14233 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
14234 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
14236 const char * value;
14237 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
14238 } __attribute__ ((gcc_struct));
14240 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14242 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14244 extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char * string, int * numBytes);
14246 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
14248 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
14250 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * decl);
14252 static void ProcessStatement(struct Statement * stmt);
14254 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
14256 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
14258 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
14260 extern const char * sourceFile;
14262 extern unsigned int IsVoidPtrCast(struct TypeName * typeName);
14264 extern struct Expression * MoveExpContents(struct Expression * exp);
14266 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
14268 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
14270 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
14272 void ProcessExpressionType(struct Expression * exp)
14274 unsigned int unresolved = 0;
14275 struct Location oldyylloc = yylloc;
14276 unsigned int notByReference = 0;
14278 if(!exp || exp->expType)
14285 struct Identifier * id = exp->__anon1.__anon1.identifier;
14287 if(!id || !topContext)
14289 if(id->_class && id->_class->__anon1.__anon1.name)
14291 id->classSym = id->_class->__anon1.__anon1.symbol;
14293 if(!strcmp(id->string, "__runtimePlatform"))
14295 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
14298 else if(strstr(id->string, "__ecereClass") == id->string)
14300 exp->expType = ProcessTypeString("ecere::com::Class", 1);
14303 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
14305 ReplaceClassMembers(exp, thisClass);
14308 ProcessExpressionType(exp);
14311 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
14316 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14320 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
14326 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
14329 ProcessExpressionType(exp);
14333 else if(currentClass && !id->_class)
14335 if(ResolveIdWithClass(exp, currentClass, 1))
14338 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14343 struct Type * type = symbol->type;
14344 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
14346 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
14348 struct Context * context = SetupTemplatesContext(_class);
14350 type = ReplaceThisClassType(_class);
14351 FinishTemplatesContext(context);
14353 type->refCount = 0;
14355 FreeSpecifier(id->_class);
14356 id->_class = (((void *)0));
14357 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14358 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
14359 id->classSym = (((void *)0));
14360 exp->expType = type;
14363 if(type && (type->kind == 15))
14364 exp->isConstant = 1;
14365 if(symbol->isParam || !strcmp(id->string, "this"))
14367 if(_class && _class->type == 1 && !type->declaredWithStruct)
14368 exp->byReference = 1;
14370 if(symbol->isIterator)
14372 if(symbol->isIterator == 3)
14375 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
14376 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
14377 exp->expType = (((void *)0));
14378 ProcessExpressionType(exp);
14380 else if(symbol->isIterator != 4)
14383 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
14384 exp->__anon1.member.exp->expType = exp->expType;
14385 exp->__anon1.member.member = MkIdentifier("data");
14386 exp->expType = (((void *)0));
14387 ProcessExpressionType(exp);
14394 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
14396 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14400 strcpy(name, thisNameSpace);
14401 strcat(name, "::");
14402 strcat(name, id->string);
14403 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
14406 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
14411 for(c = 0; c < definedExpStackPos; c++)
14412 if(definedExpStack[c] == definedExp)
14414 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
14416 struct Location backupYylloc = yylloc;
14417 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
14419 definedExpStack[definedExpStackPos++] = definedExp;
14420 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
14421 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
14422 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14424 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14425 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
14426 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
14427 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14429 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14430 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
14432 parsedExpression = (((void *)0));
14434 expression_yyparse();
14435 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
14437 fileInput = backInput;
14438 yylloc = backupYylloc;
14439 if(parsedExpression)
14441 FreeIdentifier(id);
14443 exp->__anon1.list = MkListOne(parsedExpression);
14444 ApplyLocation(parsedExpression, &yylloc);
14445 ProcessExpressionType(exp);
14446 definedExpStackPos--;
14449 definedExpStackPos--;
14455 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
14461 struct GlobalData * data = (((void *)0));
14463 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14467 strcpy(name, thisNameSpace);
14468 strcat(name, "::");
14469 strcat(name, id->string);
14470 data = FindGlobalData(name);
14473 data = FindGlobalData(id->string);
14476 DeclareGlobalData(data);
14477 exp->expType = data->dataType;
14479 data->dataType->refCount++;
14480 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14481 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
14482 FreeSpecifier(id->_class);
14483 id->_class = (((void *)0));
14488 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
14490 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14494 strcpy(name, thisNameSpace);
14495 strcat(name, "::");
14496 strcat(name, id->string);
14497 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
14500 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
14505 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14506 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
14508 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
14509 strcpy(name, "__ecereFunction_");
14510 FullClassNameCat(name, id->string, 0);
14511 if(DeclareFunction(function, name))
14513 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14514 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
14516 exp->expType = function->dataType;
14517 if(function->dataType)
14518 function->dataType->refCount++;
14519 FreeSpecifier(id->_class);
14520 id->_class = (((void *)0));
14532 if(!exp->__anon1.instance->_class)
14534 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
14536 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
14539 ProcessInstantiationType(exp->__anon1.instance);
14540 exp->isConstant = exp->__anon1.instance->isConstant;
14541 if(exp->__anon1.instance->_class)
14543 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
14551 char * constant = exp->__anon1.__anon1.constant;
14552 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
14554 exp->expType = type;
14555 if(constant[0] == '\'')
14557 if((int)((unsigned char *)constant)[1] > 127)
14560 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
14564 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
14565 exp->__anon1.__anon1.constant = PrintUInt(ch);
14567 type->__anon1._class = FindClass("unichar");
14568 type->isSigned = 0;
14573 type->isSigned = 1;
14578 char * dot = strchr(constant, '.');
14579 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
14584 exponent = strchr(constant, 'p');
14586 exponent = strchr(constant, 'P');
14590 exponent = strchr(constant, 'e');
14592 exponent = strchr(constant, 'E');
14594 if(dot || exponent)
14596 if(strchr(constant, 'f') || strchr(constant, 'F'))
14600 type->isSigned = 1;
14604 unsigned int isSigned = constant[0] == '-';
14605 char * endP = (((void *)0));
14606 long long i64 = strtoll(constant, &endP, 0);
14607 uint64 ui64 = strtoull(constant, &endP, 0);
14608 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll"));
14612 if(i64 < (((int)0x80000000)))
14617 if(ui64 > (((int)0x7fffffff)))
14619 if(ui64 > (0xffffffff))
14622 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
14626 else if(constant[0] != '0' || !constant[1])
14629 type->kind = is64Bit ? 4 : 3;
14630 type->isSigned = isSigned;
14633 exp->isConstant = 1;
14634 if(exp->destType && exp->destType->kind == 7)
14636 else if(exp->destType && exp->destType->kind == 6)
14638 else if(exp->destType && exp->destType->kind == 4)
14645 exp->isConstant = 1;
14646 exp->expType = __extension__ ({
14647 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14649 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
14650 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14652 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
14653 }), __ecereInstance2;
14659 ProcessExpressionType(exp->__anon1._new.size);
14660 exp->expType = __extension__ ({
14661 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14663 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
14665 DeclareType(exp->expType->__anon1.type, 0, 0);
14669 ProcessExpressionType(exp->__anon1._renew.size);
14670 ProcessExpressionType(exp->__anon1._renew.exp);
14671 exp->expType = __extension__ ({
14672 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14674 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
14676 DeclareType(exp->expType->__anon1.type, 0, 0);
14680 unsigned int assign = 0, boolResult = 0, boolOps = 0;
14681 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
14682 unsigned int useDestType = 0, useSideType = 0;
14683 struct Location oldyylloc = yylloc;
14684 unsigned int useSideUnit = 0;
14685 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
14686 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
14688 switch(exp->__anon1.op.op)
14742 if(exp->__anon1.op.exp1)
14749 if(exp->__anon1.op.op == '&')
14751 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
14753 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
14754 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14756 if(symbol && symbol->isIterator == 2)
14759 exp->__anon1.member.exp = exp->__anon1.op.exp2;
14760 exp->__anon1.member.member = MkIdentifier("key");
14761 exp->expType = (((void *)0));
14762 exp->__anon1.op.exp2->expType = symbol->type;
14763 symbol->type->refCount++;
14764 ProcessExpressionType(exp);
14770 if(exp->__anon1.op.exp1)
14772 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
14774 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
14776 if(exp->__anon1.op.exp1->destType)
14777 FreeType(exp->__anon1.op.exp1->destType);
14778 exp->__anon1.op.exp1->destType = exp->destType;
14779 exp->__anon1.op.exp1->opDestType = 1;
14781 exp->destType->refCount++;
14785 if(exp->__anon1.op.exp1->destType)
14786 FreeType(exp->__anon1.op.exp1->destType);
14787 exp->__anon1.op.exp1->destType = dummy;
14790 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14791 exp->__anon1.op.exp1->destType->count++;
14792 ProcessExpressionType(exp->__anon1.op.exp1);
14793 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14794 exp->__anon1.op.exp1->destType->count--;
14795 exp->__anon1.op.exp1->opDestType = 0;
14796 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)
14798 exp->__anon1.op.exp2 = MkExpConstant("1");
14799 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
14802 if(exp->__anon1.op.exp1->destType == dummy)
14805 exp->__anon1.op.exp1->destType = (((void *)0));
14807 type1 = exp->__anon1.op.exp1->expType;
14809 if(exp->__anon1.op.exp2)
14811 char expString[10240];
14813 expString[0] = '\0';
14814 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
14816 if(exp->__anon1.op.exp1)
14818 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
14819 if(exp->__anon1.op.exp1->expType)
14820 exp->__anon1.op.exp1->expType->refCount++;
14824 exp->__anon1.op.exp2->destType = exp->destType;
14825 if(!exp->__anon1.op.exp1 || exp->__anon1.op.op != '&')
14826 exp->__anon1.op.exp2->opDestType = 1;
14828 exp->destType->refCount++;
14832 exp->expType = type1;
14837 PrintExpression(exp->__anon1.op.exp2, expString);
14838 if(type1 && type1->kind == 13)
14840 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)
14841 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
14842 else if(exp->__anon1.op.op == '=')
14844 if(exp->__anon1.op.exp2->destType)
14845 FreeType(exp->__anon1.op.exp2->destType);
14846 exp->__anon1.op.exp2->destType = type1;
14853 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)
14857 if(exp->__anon1.op.exp2->destType)
14858 FreeType(exp->__anon1.op.exp2->destType);
14859 exp->__anon1.op.exp2->destType = type1;
14866 exp->expType = type1;
14868 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
14870 if(exp->__anon1.op.exp2->destType)
14871 FreeType(exp->__anon1.op.exp2->destType);
14872 exp->__anon1.op.exp2->destType = exp->destType;
14873 if(exp->__anon1.op.op != '&')
14874 exp->__anon1.op.exp2->opDestType = 1;
14876 exp->destType->refCount++;
14880 if(exp->__anon1.op.exp2->destType)
14881 FreeType(exp->__anon1.op.exp2->destType);
14882 exp->__anon1.op.exp2->destType = dummy;
14885 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))
14887 FreeType(exp->__anon1.op.exp2->destType);
14888 exp->__anon1.op.exp2->destType = type1;
14891 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14892 exp->__anon1.op.exp2->destType->count++;
14893 if(exp->__anon1.op.op == SIZEOF)
14895 struct Expression * e = exp->__anon1.op.exp2;
14897 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
14899 if(e->type == 5 || e->type == 32 || e->type == 23)
14902 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
14904 e = (*e->__anon1.list).last;
14907 if(e->type == 11 && e->__anon1.cast.exp)
14908 e->__anon1.cast.exp->needCast = 1;
14910 ProcessExpressionType(exp->__anon1.op.exp2);
14911 exp->__anon1.op.exp2->opDestType = 0;
14912 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14913 exp->__anon1.op.exp2->destType->count--;
14914 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
14916 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)
14918 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
14919 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
14921 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)))
14923 if(exp->__anon1.op.op == ADD_ASSIGN)
14924 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14926 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))
14928 if(exp->__anon1.op.op == ADD_ASSIGN)
14929 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14931 else if(inCompiler)
14933 char type1String[1024];
14934 char type2String[1024];
14936 type1String[0] = '\0';
14937 type2String[0] = '\0';
14938 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
14939 PrintType(type1, type2String, 0, 1);
14940 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
14941 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
14944 if(exp->__anon1.op.exp2->destType == dummy)
14947 exp->__anon1.op.exp2->destType = (((void *)0));
14949 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
14951 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14952 type2->refCount = 1;
14953 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
14954 type2->isSigned = 1;
14956 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))
14958 type2 = __extension__ ({
14959 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14961 __ecereInstance1->kind = 3, __ecereInstance1;
14963 type2->refCount = 1;
14964 type2->isSigned = 1;
14968 type2 = exp->__anon1.op.exp2->expType;
14974 if(exp->__anon1.op.op == SIZEOF)
14976 exp->expType = __extension__ ({
14977 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14979 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
14981 exp->isConstant = 1;
14983 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
14985 exp->expType = Dereference(type2);
14986 if(type2 && type2->kind == 8)
14987 notByReference = 1;
14989 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
14990 exp->expType = Reference(type2);
14995 if(exp->__anon1.op.exp1)
14997 if(exp->__anon1.op.exp1->destType)
14998 FreeType(exp->__anon1.op.exp1->destType);
14999 exp->__anon1.op.exp1->destType = MkClassType("bool");
15000 exp->__anon1.op.exp1->destType->truth = 1;
15001 if(!exp->__anon1.op.exp1->expType)
15002 ProcessExpressionType(exp->__anon1.op.exp1);
15004 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15005 FreeType(exp->__anon1.op.exp1->expType);
15006 exp->__anon1.op.exp1->expType = MkClassType("bool");
15007 exp->__anon1.op.exp1->expType->truth = 1;
15009 if(exp->__anon1.op.exp2)
15011 if(exp->__anon1.op.exp2->destType)
15012 FreeType(exp->__anon1.op.exp2->destType);
15013 exp->__anon1.op.exp2->destType = MkClassType("bool");
15014 exp->__anon1.op.exp2->destType->truth = 1;
15015 if(!exp->__anon1.op.exp2->expType)
15016 ProcessExpressionType(exp->__anon1.op.exp2);
15018 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15019 FreeType(exp->__anon1.op.exp2->expType);
15020 exp->__anon1.op.exp2->expType = MkClassType("bool");
15021 exp->__anon1.op.exp2->expType->truth = 1;
15024 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")))))
15026 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"))))
15028 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)))
15030 struct Type * intType;
15032 if(!type1->__anon1._class->__anon1.registered->dataType)
15033 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
15034 if(!type2->__anon1._class->__anon1.registered->dataType)
15035 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
15036 intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
15037 if(exp->__anon1.op.exp1->destType)
15038 FreeType(exp->__anon1.op.exp1->destType);
15039 if(exp->__anon1.op.exp2->destType)
15040 FreeType(exp->__anon1.op.exp2->destType);
15041 exp->__anon1.op.exp1->destType = intType;
15042 exp->__anon1.op.exp2->destType = intType;
15043 intType->refCount++;
15047 if(exp->__anon1.op.exp2->destType)
15048 FreeType(exp->__anon1.op.exp2->destType);
15049 exp->__anon1.op.exp2->destType = type1;
15051 if(exp->__anon1.op.exp1->destType)
15052 FreeType(exp->__anon1.op.exp1->destType);
15053 exp->__anon1.op.exp1->destType = type2;
15056 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)
15057 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);
15058 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
15060 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
15064 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
15066 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
15067 ProcessExpressionType(exp->__anon1.op.exp1);
15068 if(type2->kind != 13)
15070 ProcessExpressionType(classExp);
15071 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
15072 if(!exp->__anon1.op.exp2->expType)
15076 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
15079 ProcessExpressionType(exp->__anon1.op.exp2);
15083 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)))
15085 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
15086 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15087 exp->expType = type1;
15091 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)))
15093 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
15094 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15095 exp->expType = type2;
15099 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))
15101 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
15105 unsigned int success = 0;
15107 if(type1->kind == 13 && type2->kind == 13)
15109 if(exp->__anon1.op.op == '+')
15110 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
15111 else if(exp->__anon1.op.op == '-')
15113 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
15115 exp->expType = __extension__ ({
15116 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15118 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
15121 if(type1->__anon1.type->kind == 20)
15123 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
15127 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
15129 ProcessExpressionType(classExp);
15131 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"))));
15132 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
15140 if(!success && exp->__anon1.op.exp1->type == 2)
15142 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15145 FreeType(exp->expType);
15146 exp->expType = exp->__anon1.op.exp1->destType;
15147 if(exp->__anon1.op.exp1->destType)
15148 exp->__anon1.op.exp1->destType->refCount++;
15151 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15154 FreeType(exp->expType);
15155 exp->expType = exp->__anon1.op.exp2->destType;
15156 if(exp->__anon1.op.exp2->destType)
15157 exp->__anon1.op.exp2->destType->refCount++;
15163 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15166 FreeType(exp->expType);
15167 exp->expType = exp->__anon1.op.exp2->destType;
15168 if(exp->__anon1.op.exp2->destType)
15169 exp->__anon1.op.exp2->destType->refCount++;
15172 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15175 FreeType(exp->expType);
15176 exp->expType = exp->__anon1.op.exp1->destType;
15177 if(exp->__anon1.op.exp1->destType)
15178 exp->__anon1.op.exp1->destType->refCount++;
15184 char expString1[10240];
15185 char expString2[10240];
15189 expString1[0] = '\0';
15190 expString2[0] = '\0';
15195 PrintExpression(exp->__anon1.op.exp1, expString1);
15196 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15197 PrintExpression(exp->__anon1.op.exp2, expString2);
15198 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15199 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
15200 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
15202 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
15206 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)
15208 if(exp->__anon1.op.exp1->destType)
15209 FreeType(exp->__anon1.op.exp1->destType);
15210 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15211 if(type2->__anon1._class->__anon1.registered->dataType)
15212 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15213 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15214 exp->expType = type2;
15218 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)
15220 if(exp->__anon1.op.exp2->destType)
15221 FreeType(exp->__anon1.op.exp2->destType);
15222 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15223 if(type1->__anon1._class->__anon1.registered->dataType)
15224 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15225 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15226 exp->expType = type1;
15232 unsigned int valid = 0;
15234 if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
15236 if(exp->__anon1.op.exp2->destType)
15237 FreeType(exp->__anon1.op.exp2->destType);
15238 if(!type1->__anon1._class->__anon1.registered->dataType)
15239 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
15240 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15241 exp->__anon1.op.exp2->destType->refCount++;
15242 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15245 type2 = exp->__anon1.op.exp2->destType;
15248 exp->expType = type2;
15251 if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
15253 if(exp->__anon1.op.exp1->destType)
15254 FreeType(exp->__anon1.op.exp1->destType);
15255 if(!type2->__anon1._class->__anon1.registered->dataType)
15256 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
15257 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15258 exp->__anon1.op.exp1->destType->refCount++;
15259 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15260 type1 = exp->__anon1.op.exp1->destType;
15261 exp->expType = type1;
15264 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
15266 unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
15267 unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
15269 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
15271 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15273 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15276 FreeType(exp->expType);
15277 exp->expType = exp->__anon1.op.exp2->expType;
15278 if(exp->__anon1.op.exp2->expType)
15279 exp->__anon1.op.exp2->expType->refCount++;
15283 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15285 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15288 FreeType(exp->expType);
15289 exp->expType = exp->__anon1.op.exp1->expType;
15290 if(exp->__anon1.op.exp1->expType)
15291 exp->__anon1.op.exp1->expType->refCount++;
15298 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15300 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15303 FreeType(exp->expType);
15304 exp->expType = exp->__anon1.op.exp1->expType;
15305 if(exp->__anon1.op.exp1->expType)
15306 exp->__anon1.op.exp1->expType->refCount++;
15310 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15312 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15315 FreeType(exp->expType);
15316 exp->expType = exp->__anon1.op.exp2->expType;
15317 if(exp->__anon1.op.exp2->expType)
15318 exp->__anon1.op.exp2->expType->refCount++;
15326 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))
15328 if(exp->__anon1.op.exp1->destType)
15329 FreeType(exp->__anon1.op.exp1->destType);
15330 exp->__anon1.op.exp1->destType = type2;
15332 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15335 FreeType(exp->expType);
15336 exp->expType = exp->__anon1.op.exp1->destType;
15337 if(exp->__anon1.op.exp1->destType)
15338 exp->__anon1.op.exp1->destType->refCount++;
15343 if(exp->__anon1.op.exp2->destType)
15344 FreeType(exp->__anon1.op.exp2->destType);
15345 exp->__anon1.op.exp2->destType = type1;
15347 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15350 FreeType(exp->expType);
15351 exp->expType = exp->__anon1.op.exp2->destType;
15352 if(exp->__anon1.op.exp2->destType)
15353 exp->__anon1.op.exp2->destType->refCount++;
15355 else if(type1 && type2)
15357 char expString1[10240];
15358 char expString2[10240];
15359 char type1String[1024];
15360 char type2String[1024];
15362 expString1[0] = '\0';
15363 expString2[0] = '\0';
15364 type1String[0] = '\0';
15365 type2String[0] = '\0';
15368 PrintExpression(exp->__anon1.op.exp1, expString1);
15369 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15370 PrintExpression(exp->__anon1.op.exp2, expString2);
15371 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15372 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
15373 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
15375 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
15376 if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
15378 exp->expType = exp->__anon1.op.exp1->expType;
15379 if(exp->__anon1.op.exp1->expType)
15380 exp->__anon1.op.exp1->expType->refCount++;
15382 else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15384 exp->expType = exp->__anon1.op.exp2->expType;
15385 if(exp->__anon1.op.exp2->expType)
15386 exp->__anon1.op.exp2->expType->refCount++;
15394 if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15396 struct Type * oldType = exp->__anon1.op.exp1->expType;
15398 exp->__anon1.op.exp1->expType = (((void *)0));
15399 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15402 exp->__anon1.op.exp1->expType = oldType;
15404 if(exp->__anon1.op.exp1->destType)
15405 FreeType(exp->__anon1.op.exp1->destType);
15406 exp->__anon1.op.exp1->destType = type2;
15408 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15411 FreeType(exp->expType);
15412 exp->expType = exp->__anon1.op.exp1->destType;
15413 if(exp->__anon1.op.exp1->destType)
15414 exp->__anon1.op.exp1->destType->refCount++;
15418 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
15420 if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
15422 if(exp->__anon1.op.exp1->destType)
15423 FreeType(exp->__anon1.op.exp1->destType);
15424 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15425 if(type2->__anon1._class->__anon1.registered->dataType)
15426 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15427 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15429 if(exp->__anon1.op.op == '!')
15431 exp->expType = MkClassType("bool");
15432 exp->expType->truth = 1;
15436 exp->expType = type2;
15441 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
15443 if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
15445 if(exp->__anon1.op.exp2->destType)
15446 FreeType(exp->__anon1.op.exp2->destType);
15447 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15448 if(type1->__anon1._class->__anon1.registered->dataType)
15449 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15450 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15452 exp->expType = type1;
15458 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
15460 char expString[10000];
15462 expString[0] = '\0';
15465 PrintExpression(exp->__anon1.op.exp1, expString);
15466 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15469 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15471 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
15473 char expString[10240];
15475 expString[0] = '\0';
15478 PrintExpression(exp->__anon1.op.exp2, expString);
15479 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15482 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15486 FreeType(exp->expType);
15487 exp->expType = MkClassType("bool");
15488 exp->expType->truth = 1;
15490 if(exp->__anon1.op.op != SIZEOF)
15491 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
15492 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
15494 DeclareType(exp->__anon1.op.exp2->expType, 0, 0);
15496 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
15497 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
15498 yylloc = oldyylloc;
15507 struct Expression * e;
15509 exp->isConstant = 1;
15510 for(e = (*exp->__anon1.list).first; e; e = e->next)
15514 FreeType(e->destType);
15515 e->opDestType = exp->opDestType;
15516 e->destType = exp->destType;
15519 exp->destType->refCount++;
15522 ProcessExpressionType(e);
15523 if(!exp->expType && !e->next)
15525 exp->expType = e->expType;
15527 e->expType->refCount++;
15530 exp->isConstant = 0;
15532 e = (*exp->__anon1.list).first;
15533 if(!e->next && e->type == 8)
15535 struct Expression * next = exp->next, * prev = exp->prev;
15537 FreeType(exp->expType);
15538 FreeType(exp->destType);
15539 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
15543 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
15544 ProcessExpressionType(exp);
15550 struct Expression * e;
15552 exp->isConstant = 1;
15553 ProcessExpressionType(exp->__anon1.index.exp);
15554 if(!exp->__anon1.index.exp->isConstant)
15555 exp->isConstant = 0;
15556 if(exp->__anon1.index.exp->expType)
15558 struct Type * source = exp->__anon1.index.exp->expType;
15560 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
15562 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
15563 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
15565 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
15567 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
15568 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
15570 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
15572 if(type->kind == 8)
15573 type->constant = 1;
15574 else if(type->kind == 13)
15576 struct Type * t = type;
15578 while(t->kind == 13)
15579 t = t->__anon1.type;
15582 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
15587 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
15589 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
15592 FreeType(e->destType);
15593 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
15595 ProcessExpressionType(e);
15600 exp->isConstant = 0;
15603 exp->expType = Dereference(exp->__anon1.index.exp->expType);
15605 DeclareType(exp->expType, 0, 0);
15610 struct Expression * e;
15611 struct Type * functionType;
15612 struct Type * methodType = (((void *)0));
15618 PrintExpression(exp->__anon1.call.exp, name);
15619 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
15621 PrintExpression(exp->__anon1.call.exp, name);
15624 if(exp->__anon1.call.exp->type == 0)
15626 struct Expression * idExp = exp->__anon1.call.exp;
15627 struct Identifier * id = idExp->__anon1.__anon1.identifier;
15629 if(!strcmp(id->string, "__builtin_frame_address"))
15631 exp->expType = ProcessTypeString("void *", 1);
15632 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15633 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15636 else if(!strcmp(id->string, "__ENDIAN_PAD"))
15638 exp->expType = ProcessTypeString("int", 1);
15639 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15640 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15643 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
15645 struct Expression * a = (((void *)0));
15646 struct Expression * b = (((void *)0));
15647 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
15649 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
15651 a = (*exp->__anon1.call.arguments).first;
15652 b = (*exp->__anon1.call.arguments).last;
15656 else if((*exp->__anon1.call.arguments).count == 1)
15658 a = (*exp->__anon1.call.arguments).first;
15663 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
15664 idExp->__anon1.__anon1.identifier = (((void *)0));
15665 FreeExpContents(exp);
15666 ProcessExpressionType(a);
15668 ProcessExpressionType(b);
15670 exp->__anon1.list = MkList();
15671 if(a->expType && (!b || b->expType))
15673 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
15677 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15678 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
15679 struct Declaration * decl;
15680 char temp1[1024], temp2[1024];
15682 GetTypeSpecs(a->expType, specs);
15683 if(a && !a->isConstant && a->type != 0)
15685 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
15686 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
15687 tempExp1 = QMkExpId(temp1);
15688 tempExp1->expType = a->expType;
15690 a->expType->refCount++;
15691 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
15693 if(b && !b->isConstant && b->type != 0)
15695 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
15696 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
15697 tempExp2 = QMkExpId(temp2);
15698 tempExp2->expType = b->expType;
15700 b->expType->refCount++;
15701 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
15703 decl = MkDeclaration(specs, decls);
15704 if(!curCompound->__anon1.compound.declarations)
15705 curCompound->__anon1.compound.declarations = MkList();
15706 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
15710 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
15712 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
15714 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
15715 exp->expType = a->expType;
15717 a->expType->refCount++;
15719 else if(!strcmp(id->string, "Abs"))
15721 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
15722 exp->expType = a->expType;
15724 a->expType->refCount++;
15726 else if(!strcmp(id->string, "Sgn"))
15728 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"))))));
15729 exp->expType = ProcessTypeString("int", 0);
15731 FreeExpression(tempExp1);
15733 FreeExpression(tempExp2);
15734 FreeIdentifier(id);
15740 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
15742 if(!exp->__anon1.call.exp->destType)
15744 exp->__anon1.call.exp->destType = dummy;
15747 ProcessExpressionType(exp->__anon1.call.exp);
15748 if(exp->__anon1.call.exp->destType == dummy)
15751 exp->__anon1.call.exp->destType = (((void *)0));
15755 functionType = exp->__anon1.call.exp->expType;
15756 if(functionType && functionType->kind == 16)
15758 methodType = functionType;
15759 functionType = methodType->__anon1.__anon3.method->dataType;
15760 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
15762 char typeString[1024];
15764 typeString[0] = '\0';
15766 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
15768 functionType->__anon1.__anon2.thisClass = (((void *)0));
15769 PrintType(functionType, typeString, 1, 1);
15770 functionType->__anon1.__anon2.thisClass = back;
15772 if(strstr(typeString, "thisclass"))
15774 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15775 struct Declarator * decl;
15778 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15780 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
15781 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))
15782 thisClassParams = 0;
15783 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15785 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
15787 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
15788 ProcessDeclarator(decl);
15789 thisClass = backupThisClass;
15791 thisClassParams = 1;
15792 functionType = ProcessType(specs, decl);
15793 functionType->refCount = 0;
15794 FinishTemplatesContext(context);
15796 FreeList(specs, (void *)(FreeSpecifier));
15797 FreeDeclarator(decl);
15801 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
15803 struct Type * type = functionType->__anon1.type;
15805 if(!functionType->refCount)
15807 functionType->__anon1.type = (((void *)0));
15808 FreeType(functionType);
15810 functionType = type;
15812 if(functionType && functionType->kind != 11)
15814 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
15816 else if(functionType)
15818 unsigned int emptyParams = 0, noParams = 0;
15819 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
15820 struct Type * type = functionType->__anon1.__anon2.params.first;
15821 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
15823 struct Location oldyylloc = yylloc;
15827 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
15829 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
15832 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
15834 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)
15836 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
15839 e->destType = type;
15841 type = functionType->__anon1.__anon2.params.first;
15844 type->refCount = 0;
15846 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
15848 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
15849 type->byReference = functionType->byReference;
15850 type->typedByReference = functionType->typedByReference;
15853 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
15855 e->destType = type;
15857 type = functionType->__anon1.__anon2.params.first;
15860 type->refCount = 0;
15863 if(type && type->kind == 0)
15866 if(!type->refCount)
15868 type = (((void *)0));
15870 for(; e; e = e->next)
15872 if(!type && !emptyParams)
15875 if(methodType && methodType->__anon1.__anon3.methodClass)
15876 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);
15878 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);
15881 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
15883 struct Type * templatedType = (((void *)0));
15884 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
15885 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
15888 if(_class && _class->templateArgs)
15890 struct __ecereNameSpace__ecere__com__Class * sClass;
15892 for(sClass = _class; sClass; sClass = sClass->base)
15894 if(sClass->templateClass)
15895 sClass = sClass->templateClass;
15897 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
15899 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
15901 struct __ecereNameSpace__ecere__com__Class * nextClass;
15903 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
15905 if(nextClass->templateClass)
15906 nextClass = nextClass->templateClass;
15907 id += nextClass->templateParams.count;
15917 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
15919 unsigned int constant = type->constant;
15920 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
15923 struct Context * context = SetupTemplatesContext(_class);
15925 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
15926 FinishTemplatesContext(context);
15928 if(templatedType->kind == 8 && constant)
15929 templatedType->constant = 1;
15930 else if(templatedType->kind == 13)
15932 struct Type * t = templatedType->__anon1.type;
15934 while(t->kind == 13)
15935 t = t->__anon1.type;
15937 t->constant = constant;
15939 e->destType = templatedType;
15942 templatedType->passAsTemplate = 1;
15947 e->destType = type;
15954 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
15956 e->destType = type->prev;
15957 e->destType->refCount++;
15961 e->destType = type;
15966 if(type && type->kind != 14)
15968 struct Type * next = type->next;
15970 if(!type->refCount)
15975 if(type && type->kind != 14)
15977 if(methodType && methodType->__anon1.__anon3.methodClass)
15978 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);
15980 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);
15982 yylloc = oldyylloc;
15983 if(type && !type->refCount)
15988 functionType = __extension__ ({
15989 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15991 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
15993 if(exp->__anon1.call.exp->type == 0)
15995 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
15999 struct Symbol * symbol;
16000 struct Location oldyylloc = yylloc;
16002 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
16003 if(strstr(string, "__builtin_") == string)
16007 functionType->__anon1.__anon2.returnType = exp->destType;
16008 exp->destType->refCount++;
16012 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
16013 symbol = __extension__ ({
16014 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
16016 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
16018 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
16019 if(strstr(symbol->string, "::"))
16020 globalContext->hasNameSpace = 1;
16021 yylloc = oldyylloc;
16024 else if(exp->__anon1.call.exp->type == 8)
16028 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
16029 if(!functionType->__anon1.__anon2.returnType)
16031 functionType->__anon1.__anon2.returnType = __extension__ ({
16032 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16034 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
16038 if(functionType && functionType->kind == 11)
16040 exp->expType = functionType->__anon1.__anon2.returnType;
16041 if(functionType->__anon1.__anon2.returnType)
16042 functionType->__anon1.__anon2.returnType->refCount++;
16043 if(!functionType->refCount)
16044 FreeType(functionType);
16046 if(exp->__anon1.call.arguments)
16048 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
16049 ProcessExpressionType(e);
16055 struct Type * type;
16056 struct Location oldyylloc = yylloc;
16057 unsigned int thisPtr;
16058 struct Expression * checkExp = exp->__anon1.member.exp;
16062 if(checkExp->type == 11)
16063 checkExp = checkExp->__anon1.cast.exp;
16064 else if(checkExp->type == 5)
16065 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
16069 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
16070 exp->thisPtr = thisPtr;
16071 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
16073 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
16075 ProcessExpressionType(exp->__anon1.member.exp);
16076 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)
16078 exp->isConstant = 0;
16081 exp->isConstant = exp->__anon1.member.exp->isConstant;
16082 type = exp->__anon1.member.exp->expType;
16084 if(type && (type->kind == 20))
16086 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
16087 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
16091 for(param = _class->templateParams.first; param; param = param->next)
16093 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
16097 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
16099 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
16103 struct Expression * expMember = exp->__anon1.member.exp;
16104 struct Declarator * decl;
16105 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16106 char thisClassTypeString[1024];
16108 FreeIdentifier(exp->__anon1.member.member);
16109 ProcessExpressionType(argExp);
16111 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
16115 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
16116 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
16119 strcpy(thisClassTypeString, _class->fullName);
16121 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
16122 exp->expType = ProcessType(specs, decl);
16123 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
16125 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16126 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16127 int paramCount = 0;
16128 int lastParam = -1;
16129 char templateString[1024];
16130 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16132 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16133 for(cClass = expClass; cClass; cClass = cClass->base)
16137 for(param = cClass->templateParams.first; param; param = param->next)
16140 struct __ecereNameSpace__ecere__com__Class * sClass;
16141 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16143 for(sClass = cClass->base; sClass; sClass = sClass->base)
16144 id += sClass->templateParams.count;
16145 arg = expClass->templateArgs[id];
16146 for(sClass = _class; sClass; sClass = sClass->base)
16148 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
16150 struct __ecereNameSpace__ecere__com__Class * nextClass;
16152 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
16153 p += nextClass->templateParams.count;
16154 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
16156 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
16158 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16160 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
16161 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
16168 char argument[256];
16170 argument[0] = '\0';
16171 switch(param->type)
16175 char expString[1024];
16176 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16177 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16178 struct Expression * exp;
16179 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16181 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16182 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16183 ProcessExpressionType(exp);
16184 ComputeExpression(exp);
16185 expString[0] = '\0';
16186 PrintExpression(exp, expString);
16187 strcat(argument, expString);
16188 FreeExpression(exp);
16193 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16198 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16200 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
16201 strcat(argument, thisClassTypeString);
16203 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16211 strcat(templateString, ", ");
16212 if(lastParam != p - 1)
16214 strcat(templateString, param->name);
16215 strcat(templateString, " = ");
16217 strcat(templateString, argument);
16226 int len = strlen(templateString);
16228 if(templateString[len - 1] == '>')
16229 templateString[len++] = ' ';
16230 templateString[len++] = '>';
16231 templateString[len++] = '\0';
16234 struct Context * context = SetupTemplatesContext(_class);
16236 FreeType(exp->expType);
16237 exp->expType = ProcessTypeString(templateString, 0);
16238 FinishTemplatesContext(context);
16241 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
16242 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
16244 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")))))))));
16247 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
16249 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
16252 if(type && (type->kind == 20))
16254 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)))
16256 struct Identifier * id = exp->__anon1.member.member;
16257 int typeKind = type->kind;
16258 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));
16260 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
16262 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
16267 if(typeKind == 3 || typeKind == 15)
16268 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
16271 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
16273 _class = type->__anon1._class->__anon1.registered;
16275 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
16277 _class = FindClass("char *")->__anon1.registered;
16279 else if(type->kind == 13)
16281 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
16282 FreeType(exp->expType);
16283 exp->expType = ProcessTypeString("uintptr", 0);
16284 exp->byReference = 1;
16288 char string[1024] = "";
16289 struct Symbol * classSym;
16291 PrintTypeNoConst(type, string, 0, 1);
16292 classSym = FindClass(string);
16294 _class = classSym->__anon1.registered;
16300 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
16301 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
16302 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
16303 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
16304 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
16306 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
16307 exp->__anon1.member.memberType = 1;
16308 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
16309 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
16312 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
16314 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16315 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
16317 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16319 member = (((void *)0));
16321 if(!member && !prop)
16322 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16323 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
16324 exp->__anon1.member.thisPtr = 1;
16328 unsigned int useMemberForNonConst = 0;
16332 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
16333 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);
16334 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16335 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
16337 if((!prop || useMemberForNonConst) && !member)
16339 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
16342 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16343 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);
16344 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16345 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16350 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
16351 prop = (((void *)0));
16353 member = (((void *)0));
16357 if(!prop && !member && !method)
16358 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
16359 if(!prop && !member && !method)
16363 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
16366 exp->__anon1.member.memberType = 5;
16367 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
16371 char structName[1024];
16372 struct Identifier * id = exp->__anon1.member.member;
16373 struct Expression * classExp = exp->__anon1.member.exp;
16376 FreeType(classExp->expType);
16377 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
16378 strcpy(structName, "__ecereClassData_");
16379 FullClassNameCat(structName, type->__anon1._class->string, 0);
16381 exp->__anon1.member.member = id;
16382 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"))))))));
16384 ProcessExpressionType(exp);
16390 struct Symbol * classSym = FindClass(id->string);
16394 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
16397 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
16401 if(exp->__anon1.member.exp->destType)
16402 FreeType(exp->__anon1.member.exp->destType);
16404 if(method && !method->_class->symbol)
16405 method->_class->symbol = FindClass(method->_class->fullName);
16406 if(prop && !prop->_class->symbol)
16407 prop->_class->symbol = FindClass(prop->_class->fullName);
16408 exp->__anon1.member.exp->destType = __extension__ ({
16409 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16411 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1;
16416 exp->__anon1.member.memberType = 1;
16417 if(!prop->dataType)
16418 ProcessPropertyType(prop);
16419 exp->expType = prop->dataType;
16420 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
16422 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16424 CopyTypeInto(type, exp->expType);
16425 type->refCount = 1;
16426 type->constant = 1;
16427 exp->expType = type;
16429 else if(prop->dataType)
16430 prop->dataType->refCount++;
16434 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16436 FreeExpContents(exp);
16438 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16439 ProcessExpressionType(exp);
16442 exp->__anon1.member.memberType = 3;
16443 DeclareStruct(_class->fullName, 0);
16444 if(!member->dataType)
16446 struct Context * context = SetupTemplatesContext(_class);
16448 member->dataType = ProcessTypeString(member->dataTypeString, 0);
16449 FinishTemplatesContext(context);
16451 exp->expType = member->dataType;
16452 if(member->dataType)
16453 member->dataType->refCount++;
16455 else if(revConvert)
16457 exp->__anon1.member.memberType = 4;
16458 exp->expType = MkClassType(revConvert->_class->fullName);
16463 exp->__anon1.member.memberType = 2;
16465 if(!method->dataType)
16466 ProcessMethodType(method);
16467 exp->expType = __extension__ ({
16468 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16470 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
16472 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
16473 exp->expType->__anon1.__anon3.usedClass = _class;
16475 else if(!classProp)
16477 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16479 FreeExpContents(exp);
16481 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16482 FreeType(exp->expType);
16483 exp->expType = MkClassType("ecere::com::Class");
16486 yylloc = exp->__anon1.member.member->loc;
16487 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
16489 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
16491 if(_class && exp->expType)
16493 struct __ecereNameSpace__ecere__com__Class * tClass;
16495 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
16496 while(tClass && !tClass->templateClass)
16497 tClass = tClass->base;
16498 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
16501 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16502 struct __ecereNameSpace__ecere__com__Class * sClass;
16504 for(sClass = tClass; sClass; sClass = sClass->base)
16507 if(sClass->templateClass)
16508 sClass = sClass->templateClass;
16509 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16511 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
16513 for(sClass = sClass->base; sClass; sClass = sClass->base)
16514 id += sClass->templateParams.count;
16522 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
16524 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16525 struct Context * context = SetupTemplatesContext(tClass);
16526 unsigned int constant = exp->expType->constant;
16528 FreeType(exp->expType);
16529 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16530 if(exp->expType->kind == 8 && constant)
16531 exp->expType->constant = 1;
16532 else if(exp->expType->kind == 13)
16534 struct Type * t = exp->expType->__anon1.type;
16536 while(t->kind == 13)
16537 t = t->__anon1.type;
16539 t->constant = constant;
16543 if(exp->expType->kind == 21)
16545 FreeType(exp->expType);
16546 exp->expType = ReplaceThisClassType(_class);
16548 if(tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType))))
16549 exp->expType->passAsTemplate = 1;
16552 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16553 if(exp->destType->kind == 8 && constant)
16554 exp->destType->constant = 1;
16555 else if(exp->destType->kind == 13)
16557 struct Type * t = exp->destType->__anon1.type;
16559 while(t->kind == 13)
16560 t = t->__anon1.type;
16562 t->constant = constant;
16564 if(exp->destType->kind == 21)
16566 FreeType(exp->destType);
16567 exp->destType = ReplaceThisClassType(_class);
16571 FinishTemplatesContext(context);
16574 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)
16577 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16578 struct __ecereNameSpace__ecere__com__Class * sClass;
16580 for(sClass = tClass; sClass; sClass = sClass->base)
16583 if(sClass->templateClass)
16584 sClass = sClass->templateClass;
16585 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16587 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
16589 for(sClass = sClass->base; sClass; sClass = sClass->base)
16590 id += sClass->templateParams.count;
16600 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16601 struct Context * context = SetupTemplatesContext(tClass);
16602 struct Type * basicType;
16604 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16607 if(basicType->kind == 21)
16609 FreeType(basicType);
16610 basicType = ReplaceThisClassType(_class);
16612 FreeType(exp->expType);
16613 exp->expType = __extension__ ({
16614 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16616 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
16620 exp->destType = exp->expType;
16621 exp->destType->refCount++;
16624 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
16625 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16626 struct Declarator * decl;
16628 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
16631 exp->destType->refCount++;
16633 exp->expType->refCount++;
16635 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
16636 exp->__anon1.cast.exp = newExp;
16639 FinishTemplatesContext(context);
16642 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
16644 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16648 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16650 int paramCount = 0;
16651 int lastParam = -1;
16652 char templateString[1024];
16653 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16655 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16656 while(cClass != expClass)
16658 struct __ecereNameSpace__ecere__com__Class * sClass;
16660 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
16663 for(param = cClass->templateParams.first; param; param = param->next)
16665 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
16667 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
16668 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16670 while(cClassCur != tClass && !paramCur)
16672 struct __ecereNameSpace__ecere__com__Class * sClassCur;
16674 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
16676 cClassCur = sClassCur;
16677 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
16679 if(!strcmp(paramCur->name, param->name))
16686 if(paramCur && paramCur->type == 0)
16687 arg = tClass->templateArgs[cp];
16689 arg = expClass->templateArgs[p];
16691 char argument[256];
16693 argument[0] = '\0';
16694 switch(param->type)
16698 char expString[1024];
16699 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16700 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16701 struct Expression * exp;
16702 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16704 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16705 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16706 ProcessExpressionType(exp);
16707 ComputeExpression(exp);
16708 expString[0] = '\0';
16709 PrintExpression(exp, expString);
16710 strcat(argument, expString);
16711 FreeExpression(exp);
16716 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16721 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16722 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16729 strcat(templateString, ", ");
16730 if(lastParam != p - 1)
16732 strcat(templateString, param->name);
16733 strcat(templateString, " = ");
16735 strcat(templateString, argument);
16744 int len = strlen(templateString);
16746 if(templateString[len - 1] == '>')
16747 templateString[len++] = ' ';
16748 templateString[len++] = '>';
16749 templateString[len++] = '\0';
16751 FreeType(exp->expType);
16753 struct Context * context = SetupTemplatesContext(tClass);
16755 exp->expType = ProcessTypeString(templateString, 0);
16756 FinishTemplatesContext(context);
16763 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)");
16765 else if(type && (type->kind == 9 || type->kind == 10))
16767 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
16771 exp->expType = memberType;
16773 memberType->refCount++;
16778 char expString[10240];
16780 expString[0] = '\0';
16783 PrintExpression(exp, expString);
16784 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16786 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
16788 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
16790 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
16792 struct Identifier * id = exp->__anon1.member.member;
16793 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));
16797 FreeType(exp->expType);
16798 exp->expType = ReplaceThisClassType(_class);
16802 yylloc = oldyylloc;
16807 struct Type * destType = exp->destType;
16809 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
16811 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
16813 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
16817 ProcessExpressionType(exp);
16824 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
16826 if(classSym && classSym->__anon1.registered)
16828 if(classSym->__anon1.registered->type == 5)
16833 DeclareStruct(classSym->string, 0);
16834 FreeSpecifier(exp->__anon1._class);
16836 FullClassNameCat(name, classSym->string, 0);
16837 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
16841 if(classSym->__anon1.registered->fixed)
16843 FreeSpecifier(exp->__anon1._class);
16844 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
16849 char className[1024];
16851 strcpy(className, "__ecereClass_");
16852 FullClassNameCat(className, classSym->string, 1);
16853 DeclareClass(classSym, className);
16854 FreeExpContents(exp);
16856 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
16857 exp->__anon1.member.member = MkIdentifier("structSize");
16861 exp->expType = __extension__ ({
16862 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16864 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16870 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
16872 exp->expType = __extension__ ({
16873 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16875 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16877 exp->isConstant = 1;
16878 DeclareType(type, 0, 0);
16884 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
16887 FreeType(exp->__anon1.cast.exp->destType);
16888 exp->__anon1.cast.exp->destType = type;
16891 ProcessExpressionType(exp->__anon1.cast.exp);
16894 exp->expType = type;
16895 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
16897 void * prev = exp->prev, * next = exp->next;
16898 struct Type * expType = exp->__anon1.cast.exp->destType;
16899 struct Expression * castExp = exp->__anon1.cast.exp;
16900 struct Type * destType = exp->destType;
16903 expType->refCount++;
16904 FreeType(exp->expType);
16905 FreeTypeName(exp->__anon1.cast.typeName);
16907 FreeType(exp->expType);
16908 FreeType(exp->destType);
16909 exp->expType = expType;
16910 exp->destType = destType;
16911 ((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
16917 exp->isConstant = exp->__anon1.cast.exp->isConstant;
16923 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
16925 exp->expType = type;
16930 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
16932 ProcessExpressionType(exp->__anon1.vaArg.exp);
16933 exp->expType = type;
16938 struct Expression * e;
16939 struct Type * t = exp->destType;
16941 if(t && !exp->destType->casted)
16943 t = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16944 CopyTypeInto(t, exp->destType);
16949 exp->isConstant = 1;
16950 FreeType(exp->__anon1.cond.cond->destType);
16951 exp->__anon1.cond.cond->destType = MkClassType("bool");
16952 exp->__anon1.cond.cond->destType->truth = 1;
16953 ProcessExpressionType(exp->__anon1.cond.cond);
16954 if(!exp->__anon1.cond.cond->isConstant)
16955 exp->isConstant = 0;
16956 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
16960 FreeType(e->destType);
16963 e->destType->refCount++;
16965 ProcessExpressionType(e);
16968 exp->expType = e->expType;
16970 e->expType->refCount++;
16973 exp->isConstant = 0;
16975 FreeType(exp->__anon1.cond.elseExp->destType);
16976 exp->__anon1.cond.elseExp->destType = t ? t : exp->expType;
16977 if(exp->__anon1.cond.elseExp->destType)
16978 exp->__anon1.cond.elseExp->destType->refCount++;
16979 ProcessExpressionType(exp->__anon1.cond.elseExp);
16980 if(!exp->__anon1.cond.elseExp->isConstant)
16981 exp->isConstant = 0;
16987 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
16989 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
16991 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
16993 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
16995 exp->destType->refCount++;
16997 ProcessStatement(exp->__anon1.compound);
16998 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
17000 exp->expType->refCount++;
17006 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
17008 if(spec && spec->type == 1)
17010 exp->expType = MkClassType(spec->__anon1.__anon1.name);
17011 exp->expType->kind = 19;
17012 exp->byReference = 1;
17016 exp->expType = MkClassType("ecere::com::Class");
17017 exp->byReference = 1;
17023 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
17027 struct Identifier * id = exp->__anon1.classData.id;
17028 char structName[1024];
17029 struct Expression * classExp;
17031 strcpy(structName, "__ecereClassData_");
17032 FullClassNameCat(structName, _class->fullName, 0);
17034 exp->__anon1.member.member = id;
17035 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
17036 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
17038 classExp = MkExpIdentifier(MkIdentifier("class"));
17039 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"))))))));
17040 ProcessExpressionType(exp);
17047 struct Type * type = (((void *)0));
17048 const char * typeString = (((void *)0));
17049 char typeStringBuf[1024];
17051 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))
17053 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
17055 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
17057 else if(exp->__anon1.list)
17059 struct Expression * e;
17061 for(e = (*exp->__anon1.list).first; e; e = e->next)
17063 ProcessExpressionType(e);
17073 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17077 e->expType = (((void *)0));
17078 e = (*exp->__anon1.list).first;
17079 ProcessExpressionType(e);
17082 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17084 FreeType(e->expType);
17085 e->expType = (((void *)0));
17087 type = (((void *)0));
17095 FreeType(e->expType);
17096 e->expType = (((void *)0));
17102 typeStringBuf[0] = '\0';
17103 PrintTypeNoConst(type, typeStringBuf, 0, 1);
17104 typeString = typeStringBuf;
17106 type = (((void *)0));
17111 char templateString[1024];
17112 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
17113 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
17114 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17115 struct Expression * expExt;
17116 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17118 sprintf(templateString, "Container<%s>", typeString);
17119 if(exp->__anon1.list)
17121 struct Expression * e;
17123 type = ProcessTypeString(typeString, 0);
17124 while((e = (*exp->__anon1.list).first))
17126 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
17127 e->destType = type;
17129 ProcessExpressionType(e);
17130 ListAdd(initializers, MkInitializerAssignment(e));
17133 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17135 DeclareStruct("ecere::com::BuiltInContainer", 0);
17136 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
17137 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17138 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
17139 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17140 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
17141 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17142 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
17143 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17144 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
17145 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
17147 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
17149 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17150 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
17151 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17152 exp->expType = ProcessTypeString(templateString, 0);
17154 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
17155 ProcessExpressionType(expExt);
17159 exp->expType = ProcessTypeString("Container", 0);
17160 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
17165 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
17167 FreeType(exp->expType);
17168 exp->expType = ReplaceThisClassType(thisClass);
17170 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)
17172 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
17176 if(exp->expType->kind != 15)
17178 struct Type * member;
17179 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
17181 FreeType(exp->expType);
17182 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17183 exp->expType->kind = symbol->type->kind;
17184 exp->expType->refCount++;
17185 exp->expType->__anon1.__anon1.enumName = enumName;
17186 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
17187 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17188 member->refCount++;
17192 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
17194 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17196 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink64), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
17198 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
17204 if(exp->destType && (exp->destType->kind == 18))
17206 else if(exp->destType && !exp->destType->keepCast)
17208 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
17209 exp->needTemplateCast = 1;
17210 if(exp->destType->kind == 0)
17212 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
17214 unsigned int invalidCast = 0;
17216 if(inCompiler && exp->destType->count && exp->expType)
17218 struct __ecereNameSpace__ecere__com__Class * c1 = (exp->expType->kind == 8 && exp->expType->__anon1._class) ? exp->expType->__anon1._class->__anon1.registered : (((void *)0));
17219 struct __ecereNameSpace__ecere__com__Class * c2 = (exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
17221 if(c1 && c1->type != 1)
17222 c1 = (((void *)0));
17223 if(c2 && c2->type != 1)
17224 c2 = (((void *)0));
17225 if((c1 && !exp->expType->byReference && !c2 && !__ecereProp_Type_Get_isPointerType(exp->destType)) || (c2 && !exp->destType->byReference && !c1 && !__ecereProp_Type_Get_isPointerType(exp->expType)))
17228 if(!exp->destType->count || unresolved || invalidCast)
17233 if(exp->destType->kind != 14)
17240 char expString[10240];
17242 expString[0] = '\0';
17243 PrintType(exp->destType, type2, 0, 1);
17246 PrintExpression(exp, expString);
17247 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17250 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
17251 else if(exp->type != 16)
17252 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
17257 char expString[10240];
17259 expString[0] = '\0';
17262 PrintExpression(exp, expString);
17263 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17266 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
17267 else if(exp->type != 16)
17268 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17280 PrintType(exp->expType, type1, 0, 1);
17281 PrintType(exp->destType, type2, 0, 1);
17283 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)))
17287 char expString[10240];
17289 expString[0] = '\0';
17292 PrintExpression(exp, expString);
17293 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17295 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")))
17298 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
17300 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
17304 FreeType(exp->expType);
17305 exp->destType->refCount++;
17306 exp->expType = exp->destType;
17312 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))
17314 struct Expression * nbExp = GetNonBracketsExp(exp);
17316 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
17318 struct Expression * e = MoveExpContents(exp);
17320 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
17322 exp->__anon1.cast.exp->destType = exp->destType;
17324 exp->destType->refCount++;
17325 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
17329 else if(unresolved)
17331 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
17332 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);
17333 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
17334 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
17336 else if(!exp->expType && exp->type != 16)
17338 char expString[10240];
17340 expString[0] = '\0';
17343 PrintExpression(exp, expString);
17344 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17346 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17349 ApplyAnyObjectLogic(exp);
17350 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)))
17352 exp->byReference = 1;
17354 yylloc = oldyylloc;
17357 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)
17361 *curMember = (*curMember)->next;
17362 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
17364 *curMember = subMemberStack[--(*subMemberStackPos)];
17365 *curMember = (*curMember)->next;
17367 while((*curMember) && (*curMember)->isProperty)
17368 *curMember = (*curMember)->next;
17369 if(subMemberStackPos)
17371 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17373 subMemberStack[(*subMemberStackPos)++] = *curMember;
17374 *curMember = (*curMember)->members.first;
17375 while(*curMember && (*curMember)->isProperty)
17376 *curMember = (*curMember)->next;
17384 if(subMemberStackPos && *subMemberStackPos)
17386 *curMember = subMemberStack[--(*subMemberStackPos)];
17387 *curMember = (*curMember)->next;
17391 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
17393 if(*curClass == _class)
17395 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
17397 *curMember = (*curClass)->membersAndProperties.first;
17399 while((*curMember) && (*curMember)->isProperty)
17400 *curMember = (*curMember)->next;
17401 if(subMemberStackPos)
17403 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17405 subMemberStack[(*subMemberStackPos)++] = *curMember;
17406 *curMember = (*curMember)->members.first;
17407 while(*curMember && (*curMember)->isProperty)
17408 *curMember = (*curMember)->next;
17415 static void ProcessInitializer(struct Initializer * init, struct Type * type)
17420 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
17422 if(init->__anon1.exp && !init->__anon1.exp->destType)
17424 FreeType(init->__anon1.exp->destType);
17425 init->__anon1.exp->destType = type;
17429 if(init->__anon1.exp)
17431 ProcessExpressionType(init->__anon1.exp);
17432 init->isConstant = init->__anon1.exp->isConstant;
17438 struct Expression * exp = init->__anon1.exp;
17439 struct Instantiation * inst = exp->__anon1.instance;
17440 struct MembersInit * members;
17443 init->__anon1.list = MkList();
17446 for(members = (*inst->members).first; members; members = members->next)
17448 if(members->type == 0)
17450 struct MemberInit * member;
17452 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
17454 ListAdd(init->__anon1.list, member->initializer);
17455 member->initializer = (((void *)0));
17460 FreeExpression(exp);
17464 struct Initializer * i;
17465 struct Type * initializerType = (((void *)0));
17466 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
17467 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
17468 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
17469 int subMemberStackPos = 0;
17471 if(type && type->kind == 12)
17472 initializerType = Dereference(type);
17473 else if(type && (type->kind == 9 || type->kind == 10))
17474 initializerType = type->__anon1.__anon1.members.first;
17475 for(i = (*init->__anon1.list).first; i; i = i->next)
17477 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17479 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
17482 if(!curMember->dataType)
17483 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
17484 initializerType = curMember->dataType;
17487 ProcessInitializer(i, initializerType);
17488 if(initializerType && type && (type->kind == 9 || type->kind == 10))
17489 initializerType = initializerType->next;
17491 init->isConstant = 0;
17493 if(type && type->kind == 12)
17494 FreeType(initializerType);
17495 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))
17497 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
17504 extern struct Symbol * FindType(struct Context * ctx, const char * name);
17506 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
17508 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct)
17514 if(spec->__anon1.specifier == THISCLASS)
17519 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17520 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17521 ProcessSpecifier(spec, declareStruct);
17528 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
17531 DeclareType(symbol->type, 1, 1);
17532 else if((symbol = spec->__anon1.__anon1.symbol) && symbol->__anon1.registered && symbol->__anon1.registered->type == 1 && declareStruct)
17533 DeclareStruct(spec->__anon1.__anon1.name, 0);
17538 struct Enumerator * e;
17540 if(spec->__anon1.__anon2.list)
17542 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
17545 ProcessExpressionType(e->exp);
17554 if(spec->__anon1.__anon2.definitions)
17556 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
17558 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
17565 static void ProcessDeclarator(struct Declarator * decl)
17570 if(decl->__anon1.identifier->classSym)
17572 FreeSpecifier(decl->__anon1.identifier->_class);
17573 decl->__anon1.identifier->_class = (((void *)0));
17577 if(decl->__anon1.array.exp)
17578 ProcessExpressionType(decl->__anon1.array.exp);
17585 if(decl->declarator)
17586 ProcessDeclarator(decl->declarator);
17587 if(decl->type == 4)
17589 struct Identifier * id = GetDeclId(decl);
17591 if(id && id->_class)
17593 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(id->_class), param->declarator = (((void *)0)), param);
17595 if(!decl->__anon1.function.parameters)
17596 decl->__anon1.function.parameters = MkList();
17597 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
17598 id->_class = (((void *)0));
17600 if(decl->__anon1.function.parameters)
17602 struct TypeName * param;
17604 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
17606 if(param->qualifiers && (*param->qualifiers).first)
17608 struct Specifier * spec = (*param->qualifiers).first;
17610 if(spec && spec->__anon1.specifier == TYPED_OBJECT)
17612 struct Declarator * d = param->declarator;
17613 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);
17616 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
17617 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17618 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
17619 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
17620 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
17623 else if(spec && spec->__anon1.specifier == ANY_OBJECT)
17625 struct Declarator * d = param->declarator;
17627 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17628 param->qualifiers = MkListOne(MkSpecifier(VOID));
17630 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
17631 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
17633 else if(spec->__anon1.specifier == THISCLASS)
17638 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17639 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17640 ProcessSpecifier(spec, 0);
17644 if(param->declarator)
17645 ProcessDeclarator(param->declarator);
17653 extern struct Identifier * CopyIdentifier(struct Identifier * id);
17655 extern void FreeInitDeclarator(struct InitDeclarator * decl);
17657 static void ProcessDeclaration(struct Declaration * decl)
17659 yylloc = decl->loc;
17664 unsigned int declareStruct = 0;
17666 if(decl->__anon1.__anon1.declarators)
17668 struct InitDeclarator * d;
17670 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17672 struct Type * type, * subType;
17674 ProcessDeclarator(d->declarator);
17675 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17678 ProcessInitializer(d->initializer, type);
17679 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
17681 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
17683 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
17685 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
17686 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
17687 if(decl->__anon1.__anon1.specifiers)
17688 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
17689 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
17692 decl->__anon1.inst = inst;
17696 for(subType = type; subType; )
17698 if(subType->kind == 8)
17703 else if(subType->kind == 13)
17705 else if(subType->kind == 12)
17706 subType = subType->__anon1.__anon4.arrayType;
17715 if(decl->__anon1.__anon1.specifiers)
17717 struct Specifier * s;
17719 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
17721 ProcessSpecifier(s, declareStruct);
17728 ProcessInstantiationType(decl->__anon1.inst);
17733 struct Specifier * spec;
17734 struct Declarator * d;
17735 unsigned int declareStruct = 0;
17737 if(decl->__anon1.__anon1.declarators)
17739 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17741 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17742 struct Type * subType;
17744 ProcessDeclarator(d);
17745 for(subType = type; subType; )
17747 if(subType->kind == 8)
17752 else if(subType->kind == 13)
17754 else if(subType->kind == 12)
17755 subType = subType->__anon1.__anon4.arrayType;
17762 if(decl->__anon1.__anon1.specifiers)
17764 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
17765 ProcessSpecifier(spec, declareStruct);
17772 static struct FunctionDefinition * curFunction;
17774 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
17776 char propName[1024], propNameM[1024];
17777 char getName[1024], setName[1024];
17778 struct __ecereNameSpace__ecere__sys__OldList * args;
17780 DeclareProperty(prop, setName, getName);
17781 strcpy(propName, "__ecereProp_");
17782 FullClassNameCat(propName, prop->_class->fullName, 0);
17783 strcat(propName, "_");
17784 FullClassNameCat(propName, prop->name, 1);
17785 strcpy(propNameM, "__ecerePropM_");
17786 FullClassNameCat(propNameM, prop->_class->fullName, 0);
17787 strcat(propNameM, "_");
17788 FullClassNameCat(propNameM, prop->name, 1);
17789 if(prop->isWatchable)
17792 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17793 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17794 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17796 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17797 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17798 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17802 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17803 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17804 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17806 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17807 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17808 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17810 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
17811 curFunction->propSet->fireWatchersDone = 1;
17814 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
17816 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
17818 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
17820 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
17822 extern struct Statement * MkWhileStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement);
17824 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
17826 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
17828 extern void FreePropertyWatch(struct PropertyWatch * watcher);
17830 static void ProcessStatement(struct Statement * stmt)
17832 yylloc = stmt->loc;
17836 ProcessStatement(stmt->__anon1.labeled.stmt);
17839 if(stmt->__anon1.caseStmt.exp)
17841 FreeType(stmt->__anon1.caseStmt.exp->destType);
17842 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
17844 curSwitchType->refCount++;
17845 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
17846 ComputeExpression(stmt->__anon1.caseStmt.exp);
17848 if(stmt->__anon1.caseStmt.stmt)
17849 ProcessStatement(stmt->__anon1.caseStmt.stmt);
17853 if(stmt->__anon1.compound.context)
17855 struct Declaration * decl;
17856 struct Statement * s;
17857 struct Statement * prevCompound = curCompound;
17858 struct Context * prevContext = curContext;
17860 if(!stmt->__anon1.compound.isSwitch)
17861 curCompound = stmt;
17862 curContext = stmt->__anon1.compound.context;
17863 if(stmt->__anon1.compound.declarations)
17865 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
17866 ProcessDeclaration(decl);
17868 if(stmt->__anon1.compound.statements)
17870 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
17871 ProcessStatement(s);
17873 curContext = prevContext;
17874 curCompound = prevCompound;
17880 struct Expression * exp;
17882 if(stmt->__anon1.expressions)
17884 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
17885 ProcessExpressionType(exp);
17891 struct Expression * exp;
17893 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
17894 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
17895 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
17896 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
17898 ProcessExpressionType(exp);
17900 if(stmt->__anon1.ifStmt.stmt)
17901 ProcessStatement(stmt->__anon1.ifStmt.stmt);
17902 if(stmt->__anon1.ifStmt.elseStmt)
17903 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
17908 struct Type * oldSwitchType = curSwitchType;
17910 if(stmt->__anon1.switchStmt.exp)
17912 struct Expression * exp;
17914 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
17918 ProcessExpressionType(exp);
17921 curSwitchType = exp->expType;
17924 ProcessStatement(stmt->__anon1.switchStmt.stmt);
17925 curSwitchType = oldSwitchType;
17930 if(stmt->__anon1.whileStmt.exp)
17932 struct Expression * exp;
17934 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
17935 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
17936 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
17937 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
17939 ProcessExpressionType(exp);
17942 if(stmt->__anon1.whileStmt.stmt)
17943 ProcessStatement(stmt->__anon1.whileStmt.stmt);
17948 if(stmt->__anon1.doWhile.exp)
17950 struct Expression * exp;
17952 if((*stmt->__anon1.doWhile.exp).last)
17954 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
17955 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
17956 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
17958 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
17960 ProcessExpressionType(exp);
17963 if(stmt->__anon1.doWhile.stmt)
17964 ProcessStatement(stmt->__anon1.doWhile.stmt);
17969 struct Expression * exp;
17971 if(stmt->__anon1.forStmt.init)
17972 ProcessStatement(stmt->__anon1.forStmt.init);
17973 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
17975 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
17976 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
17977 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
17979 if(stmt->__anon1.forStmt.check)
17980 ProcessStatement(stmt->__anon1.forStmt.check);
17981 if(stmt->__anon1.forStmt.increment)
17983 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
17984 ProcessExpressionType(exp);
17986 if(stmt->__anon1.forStmt.stmt)
17987 ProcessStatement(stmt->__anon1.forStmt.stmt);
17992 struct Identifier * id = stmt->__anon1.forEachStmt.id;
17993 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
17994 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
17995 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
17996 char iteratorType[1024];
17997 struct Type * source;
17998 struct Expression * e;
17999 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));
18000 struct Expression * arrayExp;
18001 const char * typeString = (((void *)0));
18002 int builtinCount = 0;
18004 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
18008 FreeType(e->destType);
18009 e->destType = ProcessTypeString("Container", 0);
18011 if(!isBuiltin || e->next)
18012 ProcessExpressionType(e);
18014 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
18015 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)))
18017 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
18018 struct Symbol * symbol;
18019 struct Expression * expIt = (((void *)0));
18020 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
18021 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
18022 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
18023 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
18028 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
18029 stmt->__anon1.compound.context->parent = curContext;
18030 curContext = stmt->__anon1.compound.context;
18032 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
18034 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
18036 isCustomAVLTree = 1;
18037 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
18040 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
18042 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
18044 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
18047 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
18049 if(inCompiler && isArray)
18051 struct Declarator * decl;
18052 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18054 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
18055 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
18056 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
18060 struct Type * type = (((void *)0));
18061 char typeStringBuf[1024];
18063 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
18064 if(((struct Expression *)(*exp).last)->type == 11)
18066 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
18069 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
18071 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)
18073 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
18075 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
18077 else if(arrayExp->__anon1.list)
18079 struct Expression * e;
18081 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
18083 ProcessExpressionType(e);
18093 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18097 e->expType = (((void *)0));
18098 e = (*arrayExp->__anon1.list).first;
18099 ProcessExpressionType(e);
18102 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18104 FreeType(e->expType);
18105 e->expType = (((void *)0));
18107 type = (((void *)0));
18115 FreeType(e->expType);
18116 e->expType = (((void *)0));
18122 typeStringBuf[0] = '\0';
18123 PrintType(type, typeStringBuf, 0, 1);
18124 typeString = typeStringBuf;
18132 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18133 struct Declarator * decl;
18134 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18136 if(arrayExp->__anon1.list)
18138 struct Expression * e;
18140 builtinCount = (*arrayExp->__anon1.list).count;
18141 type = ProcessTypeString(typeString, 0);
18142 while((e = (*arrayExp->__anon1.list).first))
18144 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
18145 e->destType = type;
18147 ProcessExpressionType(e);
18149 ListAdd(initializers, MkInitializerAssignment(e));
18152 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
18154 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
18155 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
18156 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
18157 FreeList(exp, (void *)(FreeExpression));
18159 else if(arrayExp->__anon1.list)
18161 struct Expression * e;
18163 type = ProcessTypeString(typeString, 0);
18164 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
18166 e->destType = type;
18168 ProcessExpressionType(e);
18175 arrayExp->expType = ProcessTypeString("Container", 0);
18176 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18179 else if(inCompiler && isLinkList && !isList)
18181 struct Declarator * decl;
18182 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18184 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
18185 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
18186 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
18188 else if(inCompiler && _class->templateArgs)
18191 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
18193 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
18194 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)))))))));
18198 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
18201 switch(block->type)
18204 if(block->__anon1.compound.context)
18205 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18208 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
18209 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18210 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
18211 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18214 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
18215 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18218 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
18219 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18222 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
18223 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18226 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
18227 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18230 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
18231 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18237 block = MkIfStmt(filter, block, (((void *)0)));
18241 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));
18242 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18243 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18244 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18250 sprintf(count, "%d", builtinCount);
18251 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));
18252 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18253 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18254 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18256 else if(isLinkList && !isList)
18258 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
18259 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
18261 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
18263 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));
18267 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18268 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18270 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));
18272 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18273 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18274 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18278 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
18280 ProcessExpressionType(expIt);
18281 if((*stmt->__anon1.compound.declarations).first)
18282 ProcessDeclaration((*stmt->__anon1.compound.declarations).first);
18284 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
18285 ProcessStatement(stmt);
18288 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
18290 curContext = stmt->__anon1.compound.context->parent;
18295 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
18307 struct Expression * exp;
18309 if(stmt->__anon1.expressions)
18311 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
18315 if(curFunction && !curFunction->type)
18316 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
18317 FreeType(exp->destType);
18318 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
18320 exp->destType->refCount++;
18322 ProcessExpressionType(exp);
18329 ProcessDeclaration(stmt->__anon1.decl);
18334 struct AsmField * field;
18336 if(stmt->__anon1.asmStmt.inputFields)
18338 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
18339 if(field->expression)
18340 ProcessExpressionType(field->expression);
18342 if(stmt->__anon1.asmStmt.outputFields)
18344 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
18345 if(field->expression)
18346 ProcessExpressionType(field->expression);
18348 if(stmt->__anon1.asmStmt.clobberedFields)
18350 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
18352 if(field->expression)
18353 ProcessExpressionType(field->expression);
18360 struct PropertyWatch * propWatch;
18361 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18362 struct Expression * object = stmt->__anon1._watch.object;
18363 struct Expression * watcher = stmt->__anon1._watch.watcher;
18366 ProcessExpressionType(watcher);
18368 ProcessExpressionType(object);
18371 if(watcher || thisClass)
18373 struct External * external = curExternal;
18374 struct Context * context = curContext;
18377 stmt->__anon1.expressions = MkList();
18378 curExternal = external->prev;
18379 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18381 struct ClassFunction * func;
18382 char watcherName[1024];
18383 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;
18384 struct External * createdExternal;
18385 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
18387 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
18388 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
18389 if(propWatch->deleteWatch)
18390 strcat(watcherName, "_delete");
18393 struct Identifier * propID;
18395 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18397 strcat(watcherName, "_");
18398 strcat(watcherName, propID->string);
18401 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
18403 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)));
18404 ProcessClassFunctionBody(func, propWatch->compound);
18405 propWatch->compound = (((void *)0));
18406 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
18407 createdExternal->symbol->idCode = external->symbol->idCode;
18408 curExternal = createdExternal;
18409 ProcessFunction(createdExternal->__anon1.function);
18411 struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(createdExternal->__anon1.function->declarator), (((void *)0)))));
18413 externalDecl->__anon1.declaration = decl;
18414 if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
18415 decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
18417 if(propWatch->deleteWatch)
18419 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18421 ListAdd(args, CopyExpression(object));
18422 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18423 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
18424 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
18428 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
18429 struct Identifier * propID;
18431 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18433 char propName[1024];
18434 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18438 char getName[1024], setName[1024];
18439 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18441 DeclareProperty(prop, setName, getName);
18442 strcpy(propName, "__ecereProp_");
18443 FullClassNameCat(propName, prop->_class->fullName, 0);
18444 strcat(propName, "_");
18445 FullClassNameCat(propName, prop->name, 1);
18446 ListAdd(args, CopyExpression(object));
18447 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18448 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18449 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
18450 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
18453 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18458 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
18460 curExternal = external;
18461 curContext = context;
18463 FreeExpression(watcher);
18465 FreeExpression(object);
18466 FreeList(watches, (void *)(FreePropertyWatch));
18469 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a _class\n", (((void *)0))));
18473 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18475 ProcessStatement(propWatch->compound);
18482 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18483 struct Expression * object = stmt->__anon1._watch.object;
18484 struct __ecereNameSpace__ecere__com__Class * _class;
18487 ProcessExpressionType(object);
18490 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
18493 struct Identifier * propID;
18496 stmt->__anon1.expressions = MkList();
18497 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
18499 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
18506 for(propID = (*watches).first; propID; propID = propID->next)
18508 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18512 CreateFireWatcher(prop, object, stmt);
18515 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18520 struct __ecereNameSpace__ecere__com__Property * prop;
18521 struct __ecereNameSpace__ecere__com__Class * base;
18523 for(base = _class; base; base = base->base)
18525 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
18527 if(prop->isProperty && prop->isWatchable)
18529 CreateFireWatcher(prop, object, stmt);
18535 FreeExpression(object);
18536 FreeList(watches, (void *)(FreeIdentifier));
18539 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18545 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18546 struct Expression * object = stmt->__anon1._watch.object;
18547 struct Expression * watcher = stmt->__anon1._watch.watcher;
18548 struct __ecereNameSpace__ecere__com__Class * _class;
18551 ProcessExpressionType(object);
18553 ProcessExpressionType(watcher);
18556 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
18557 if(watcher || thisClass)
18561 struct Identifier * propID;
18564 stmt->__anon1.expressions = MkList();
18567 struct __ecereNameSpace__ecere__sys__OldList * args;
18570 ListAdd(args, CopyExpression(object));
18571 ListAdd(args, MkExpConstant("0"));
18572 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18573 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18577 for(propID = (*watches).first; propID; propID = propID->next)
18579 char propName[1024];
18580 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18584 char getName[1024], setName[1024];
18585 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18587 DeclareProperty(prop, setName, getName);
18588 strcpy(propName, "__ecereProp_");
18589 FullClassNameCat(propName, prop->_class->fullName, 0);
18590 strcat(propName, "_");
18591 FullClassNameCat(propName, prop->name, 1);
18592 ListAdd(args, CopyExpression(object));
18593 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18594 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18595 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18598 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18602 FreeExpression(object);
18604 FreeExpression(watcher);
18605 FreeList(watches, (void *)(FreeIdentifier));
18608 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18611 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
18618 extern struct Expression * QBrackets(struct Expression * exp);
18620 extern struct TypeName * QMkType(const char * spec, struct Declarator * decl);
18622 extern struct Declarator * QMkPtrDecl(const char * id);
18624 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
18626 extern struct Expression * QMkExpCond(struct Expression * cond, struct Expression * exp, struct Expression * elseExp);
18628 extern struct Statement * MkFireWatchersStmt(struct Expression * object, struct __ecereNameSpace__ecere__sys__OldList * watches);
18630 static void ProcessFunction(struct FunctionDefinition * function)
18632 struct Identifier * id = GetDeclId(function->declarator);
18633 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
18634 struct Type * type = symbol ? symbol->type : (((void *)0));
18635 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
18636 struct Context * oldTopContext = topContext;
18638 yylloc = function->loc;
18639 if(type && type->__anon1.__anon2.thisClass)
18641 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
18642 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
18643 char className[1024];
18644 char structName[1024];
18645 struct Declarator * funcDecl;
18646 struct Symbol * thisSymbol;
18647 unsigned int typedObject = 0;
18649 if(_class && !_class->base)
18651 _class = currentClass;
18652 if(_class && !_class->symbol)
18653 _class->symbol = FindClass(_class->fullName);
18654 classSym = _class ? _class->symbol : (((void *)0));
18657 thisClass = _class;
18658 if(inCompiler && _class)
18660 if(type->kind == 11)
18662 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
18664 struct Type * param = symbol->type->__anon1.__anon2.params.first;
18666 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
18669 if(type->classObjectType != 1)
18671 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
18672 symbol->type->__anon1.__anon2.staticMethod = 1;
18673 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
18674 symbol->type->extraParam = 0;
18677 strcpy(className, "__ecereClass_");
18678 FullClassNameCat(className, _class->fullName, 1);
18679 structName[0] = (char)0;
18680 FullClassNameCat(structName, _class->fullName, 0);
18681 funcDecl = GetFuncDecl(function->declarator);
18684 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18686 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18688 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18690 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18691 FreeTypeName(param);
18694 if(!function->propertyNoThis)
18696 struct TypeName * thisParam = (((void *)0));
18698 if(type->classObjectType != 1)
18700 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18701 if(!funcDecl->__anon1.function.parameters)
18702 funcDecl->__anon1.function.parameters = MkList();
18703 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18707 if(type->classObjectType != 1)
18709 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
18710 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
18712 thisParam = __extension__ ({
18713 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
18715 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
18717 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18721 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18723 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18725 funcDecl = GetFuncDecl(initDecl->declarator);
18728 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18730 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18732 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18734 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18735 FreeTypeName(param);
18738 if(type->classObjectType != 1)
18740 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
18742 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18744 if(!funcDecl->__anon1.function.parameters)
18745 funcDecl->__anon1.function.parameters = MkList();
18746 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18754 if(type->classObjectType != 1)
18756 thisSymbol = __extension__ ({
18757 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
18759 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
18761 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18762 if(typedObject && thisSymbol->type)
18764 thisSymbol->type->classObjectType = 2;
18765 thisSymbol->type->byReference = type->byReference;
18766 thisSymbol->type->typedByReference = type->byReference;
18770 if(inCompiler && _class && (_class->type == 0) && type->classObjectType != 1)
18772 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
18775 struct __ecereNameSpace__ecere__com__Class * base;
18777 for(base = _class; base && base->type != 1000; base = base->next)
18779 for(member = base->membersAndProperties.first; member; member = member->next)
18780 if(!member->isProperty)
18786 for(member = _class->membersAndProperties.first; member; member = member->next)
18787 if(!member->isProperty)
18791 char pointerName[1024];
18792 struct Declaration * decl;
18793 struct Initializer * initializer;
18794 struct Expression * exp, * bytePtr;
18796 strcpy(pointerName, "__ecerePointer_");
18797 FullClassNameCat(pointerName, _class->fullName, 0);
18799 char className[1024];
18801 strcpy(className, "__ecereClass_");
18802 FullClassNameCat(className, classSym->string, 1);
18803 DeclareClass(classSym, className);
18805 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
18810 sprintf(string, "%d", _class->offset);
18811 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpConstant(string)));
18815 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
18817 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
18818 exp->expType = __extension__ ({
18819 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18821 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
18822 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18824 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
18825 }), __ecereInstance2;
18829 yylloc = function->body->loc;
18830 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
18832 struct Context * prevContext = curContext;
18833 struct __ecereNameSpace__ecere__sys__OldList * list;
18835 curContext = function->body->__anon1.compound.context;
18836 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
18837 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
18838 curContext = prevContext;
18840 decl->symbol = (((void *)0));
18841 if(!function->body->__anon1.compound.declarations)
18842 function->body->__anon1.compound.declarations = MkList();
18843 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
18849 thisClass = (((void *)0));
18852 FreeSpecifier(id->_class);
18853 id->_class = (((void *)0));
18854 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18856 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18858 id = GetDeclId(initDecl->declarator);
18859 FreeSpecifier(id->_class);
18860 id->_class = (((void *)0));
18864 topContext = function->body->__anon1.compound.context;
18866 struct FunctionDefinition * oldFunction = curFunction;
18868 curFunction = function;
18870 ProcessStatement(function->body);
18871 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
18873 struct Statement * prevCompound = curCompound;
18874 struct Context * prevContext = curContext;
18875 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
18877 if(!function->body->__anon1.compound.statements)
18878 function->body->__anon1.compound.statements = MkList();
18879 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
18880 curCompound = function->body;
18881 curContext = function->body->__anon1.compound.context;
18882 ProcessStatement(fireWatchers);
18883 curContext = prevContext;
18884 curCompound = prevCompound;
18886 curFunction = oldFunction;
18888 if(function->declarator)
18890 ProcessDeclarator(function->declarator);
18892 topContext = oldTopContext;
18893 thisClass = oldThisClass;
18896 extern void FreeSymbol(struct Symbol * symbol);
18898 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
18900 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
18902 struct ClassDef * def;
18903 struct External * external = curExternal;
18904 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
18906 for(def = definitions->first; def; def = def->next)
18910 if(def->__anon1.function->declarator)
18911 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
18913 curExternal = external;
18914 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
18916 else if(def->type == 2)
18918 if(def->__anon1.decl->type == 2)
18920 thisClass = regClass;
18921 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
18922 thisClass = (((void *)0));
18926 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
18929 thisClass = regClass;
18930 ProcessDeclaration(def->__anon1.decl);
18931 thisClass = backThisClass;
18934 else if(def->type == 1 && def->__anon1.defProperties)
18936 struct MemberInit * defProperty;
18937 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);
18939 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18940 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
18942 thisClass = regClass;
18943 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
18944 thisClass = (((void *)0));
18946 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18947 FreeSymbol(thisSymbol);
18949 else if(def->type == 3 && def->__anon1.propertyDef)
18951 struct PropertyDef * prop = def->__anon1.propertyDef;
18953 thisClass = regClass;
18958 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18960 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18962 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
18963 ProcessStatement(prop->setStmt);
18969 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18971 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18973 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
18974 ProcessStatement(prop->getStmt);
18976 if(prop->issetStmt)
18980 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18982 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18984 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
18985 ProcessStatement(prop->issetStmt);
18987 thisClass = (((void *)0));
18989 else if(def->type == 4 && def->__anon1.propertyWatch)
18991 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
18993 thisClass = regClass;
18994 if(propertyWatch->compound)
18996 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);
18998 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18999 curExternal = (((void *)0));
19000 ProcessStatement(propertyWatch->compound);
19002 thisClass = (((void *)0));
19007 void DeclareFunctionUtil(const char * s)
19009 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
19016 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
19017 strcpy(name, "__ecereFunction_");
19018 FullClassNameCat(name, s, 0);
19019 DeclareFunction(function, name);
19023 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
19025 extern unsigned int memoryGuard;
19027 void ComputeDataTypes()
19029 struct External * external;
19030 struct External * temp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_External);
19031 struct External * after = (((void *)0));
19033 currentClass = (((void *)0));
19034 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
19035 for(external = (*ast).first; external; external = external->next)
19037 if(external->type == 1)
19039 struct Declaration * decl = external->__anon1.declaration;
19043 struct __ecereNameSpace__ecere__sys__OldList * decls = decl->__anon1.__anon1.declarators;
19047 struct InitDeclarator * initDecl = (*decls).first;
19051 struct Declarator * declarator = initDecl->declarator;
19053 if(declarator && declarator->type == 1)
19055 struct Identifier * id = declarator->__anon1.identifier;
19057 if(id && id->string)
19059 if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t") || !strcmp(id->string, "size_t") || !strcmp(id->string, "ssize_t"))
19061 external->symbol->id = -1001, external->symbol->idCode = -1001;
19072 struct External * e = MkExternalDeclaration(MkDeclaration(MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Instance"), (((void *)0)))), (((void *)0))));
19074 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, e);
19077 temp->symbol = __extension__ ({
19078 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
19080 __ecereInstance1->id = -1000, __ecereInstance1->idCode = -1000, __ecereInstance1;
19082 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, temp);
19083 curExternal = temp;
19084 DeclareFunctionUtil("eSystem_New");
19085 DeclareFunctionUtil("eSystem_New0");
19086 DeclareFunctionUtil("eSystem_Renew");
19087 DeclareFunctionUtil("eSystem_Renew0");
19088 DeclareFunctionUtil("eSystem_Delete");
19089 DeclareFunctionUtil("eClass_GetProperty");
19090 DeclareFunctionUtil("eClass_SetProperty");
19091 DeclareFunctionUtil("eInstance_FireSelfWatchers");
19092 DeclareFunctionUtil("eInstance_SetMethod");
19093 DeclareFunctionUtil("eInstance_IncRef");
19094 DeclareFunctionUtil("eInstance_StopWatching");
19095 DeclareFunctionUtil("eInstance_Watch");
19096 DeclareFunctionUtil("eInstance_FireWatchers");
19099 DeclareFunctionUtil("MemoryGuard_PushLoc");
19100 DeclareFunctionUtil("MemoryGuard_PopLoc");
19102 DeclareStruct("ecere::com::Class", 0);
19103 DeclareStruct("ecere::com::Instance", 0);
19104 DeclareStruct("ecere::com::Property", 0);
19105 DeclareStruct("ecere::com::DataMember", 0);
19106 DeclareStruct("ecere::com::Method", 0);
19107 DeclareStruct("ecere::com::SerialBuffer", 0);
19108 DeclareStruct("ecere::com::ClassTemplateArgument", 0);
19109 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), temp);
19110 for(external = (*ast).first; external; external = external->next)
19112 afterExternal = curExternal = external;
19113 if(external->type == 0)
19115 currentClass = external->__anon1.function->_class;
19116 ProcessFunction(external->__anon1.function);
19118 else if(external->type == 1)
19120 currentClass = (((void *)0));
19121 if(external->__anon1.declaration)
19122 ProcessDeclaration(external->__anon1.declaration);
19124 else if(external->type == 2)
19126 struct ClassDefinition * _class = external->__anon1._class;
19128 currentClass = external->symbol->__anon1.registered;
19129 if(_class->definitions)
19131 ProcessClass(_class->definitions, _class->symbol);
19135 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
19136 ((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
19139 else if(external->type == 4)
19141 thisNameSpace = external->__anon1.id->string;
19144 currentClass = (((void *)0));
19145 thisNameSpace = (((void *)0));
19146 curExternal = (((void *)0));
19147 ((temp->symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)temp->symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp->symbol)) : 0), temp->symbol = 0);
19148 ((temp ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)temp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp)) : 0), temp = 0);
19151 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);
19153 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);
19155 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
19157 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19159 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19161 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19162 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19163 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19164 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19165 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19166 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19167 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19168 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19169 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19170 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19171 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19172 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19173 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19174 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19175 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19176 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19177 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19178 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19179 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19180 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19181 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19182 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19183 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19184 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19185 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19186 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19187 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19188 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19189 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19190 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19191 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19192 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19193 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19194 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19195 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19196 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19197 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19198 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19199 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19200 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19201 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19202 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19203 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19204 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19205 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19206 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19207 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19208 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19209 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19210 __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);
19211 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "void DeclareStruct(const char * name, bool skipNoHead)", DeclareStruct, module, 2);
19212 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19213 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19214 __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);
19215 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19216 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19217 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19218 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19219 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19220 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19221 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19222 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19223 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19224 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19225 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19226 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(GlobalData data)", DeclareGlobalData, module, 2);
19227 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19228 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
19229 __ecereClass_Conversion = class;
19230 __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);
19231 __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);
19232 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19233 __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);
19234 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19235 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19236 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19237 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19238 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19239 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19240 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19241 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19242 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19243 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19244 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19245 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19246 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19247 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19248 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19249 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19250 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19251 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19252 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19253 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19254 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(const String s)", DeclareFunctionUtil, module, 1);
19255 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
19258 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)