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 sourceExp->expType = dest;
5696 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5699 if(_class && _class->type == 2 && source->kind != 8)
5701 if(!dest->__anon1._class->__anon1.registered->dataType)
5702 dest->__anon1._class->__anon1.registered->dataType = ProcessTypeString(dest->__anon1._class->__anon1.registered->dataTypeString, 0);
5703 if(MatchTypes(source, dest->__anon1._class->__anon1.registered->dataType, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5706 FreeType(sourceExp->expType);
5707 source = sourceExp->expType = MkClassType(dest->__anon1._class->string);
5711 if(_class && !strcmp(_class->fullName, "ecere::com::Class") && source->kind == 13 && source->__anon1.type && source->__anon1.type->kind == 1 && sourceExp->type == 3)
5713 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
5714 struct Declarator * decl;
5717 ReadString(string, sourceExp->__anon1.__anon2.string);
5718 decl = SpecDeclFromString(string, specs, (((void *)0)));
5719 FreeExpContents(sourceExp);
5720 FreeType(sourceExp->expType);
5721 sourceExp->type = 24;
5722 sourceExp->__anon1._classExp.specifiers = specs;
5723 sourceExp->__anon1._classExp.decl = decl;
5724 sourceExp->expType = dest;
5728 if(backupSourceExpType)
5729 FreeType(backupSourceExpType);
5733 else if(source->kind == 8)
5735 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class ? source->__anon1._class->__anon1.registered : (((void *)0));
5737 if(_class && (_class->type == 3 || _class->type == 2))
5741 struct Type * tempType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
5742 struct Type * tempDest, * tempSource;
5744 if(!source->__anon1._class->__anon1.registered->dataType)
5745 source->__anon1._class->__anon1.registered->dataType = ProcessTypeString(source->__anon1._class->__anon1.registered->dataTypeString, 0);
5746 for(; _class->base->type != 1000; _class = _class->base)
5749 tempSource = tempType;
5751 tempType->__anon1._class = FindClass(_class->fullName);
5752 tempType->truth = source->truth;
5753 tempType->classObjectType = source->classObjectType;
5754 if(tempType->__anon1._class)
5755 MatchTypes(tempSource, tempDest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
5756 if(conversions && conversions->last)
5758 ((struct Conversion *)conversions->last)->resultType = dest;
5761 FreeType(sourceExp->expType);
5762 sourceExp->expType = MkClassType(_class->fullName);
5763 sourceExp->expType->truth = source->truth;
5764 sourceExp->expType->classObjectType = source->classObjectType;
5765 if(!sourceExp->destType)
5767 FreeType(sourceExp->destType);
5768 sourceExp->destType = sourceExp->expType;
5769 if(sourceExp->expType)
5770 sourceExp->expType->refCount++;
5772 if(!_class->dataType)
5773 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5775 dest = MkClassType(source->__anon1._class->string);
5776 dest->truth = source->truth;
5777 dest->classObjectType = source->classObjectType;
5779 source = _class->dataType;
5781 ((tempType ? (__ecereClass_Type->Destructor ? __ecereClass_Type->Destructor((void *)tempType) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(tempType)) : 0), tempType = 0);
5787 if(MatchTypes(source, dest, conversions, (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst))
5796 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class ? dest->__anon1._class->__anon1.registered : (((void *)0));
5797 unsigned int fittingValue = 0;
5799 if(_class && _class->type == 4)
5801 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
5802 struct __ecereNameSpace__ecere__com__EnumClassData * c = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
5804 if(c && value >= 0 && value <= c->largest)
5807 if(_class && !dest->truth && (_class->type == 3 || fittingValue || (_class->type != 1 && !value && source->kind == 3) || _class->type == 2))
5809 if(_class->type == 0 || _class->type == 5)
5811 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5813 *newExp = *sourceExp;
5814 if(sourceExp->destType)
5815 sourceExp->destType->refCount++;
5816 if(sourceExp->expType)
5817 sourceExp->expType->refCount++;
5818 sourceExp->type = 11;
5819 sourceExp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
5820 sourceExp->__anon1.cast.exp = newExp;
5821 FreeType(sourceExp->expType);
5822 sourceExp->expType = (((void *)0));
5823 ProcessExpressionType(sourceExp);
5826 FreeType(sourceExp->expType);
5827 sourceExp->expType = dest;
5832 if(backupSourceExpType)
5833 FreeType(backupSourceExpType);
5836 if(!_class->dataType)
5837 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
5839 dest = _class->dataType;
5842 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))
5844 specs = MkListOne(MkSpecifier(DOUBLE));
5846 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))
5848 specs = MkListOne(MkSpecifier(FLOAT));
5850 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))
5854 ListAdd(specs, MkSpecifier(UNSIGNED));
5855 ListAdd(specs, MkSpecifier(INT64));
5857 else if(dest->kind == 3 && (source->kind == 3 || source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 6 || source->kind == 7))
5861 ListAdd(specs, MkSpecifier(UNSIGNED));
5862 ListAdd(specs, MkSpecifier(INT));
5864 else if(dest->kind == 2 && (source->kind == 2 || source->kind == 1 || source->kind == 24 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5868 ListAdd(specs, MkSpecifier(UNSIGNED));
5869 ListAdd(specs, MkSpecifier(SHORT));
5871 else if(dest->kind == 1 && (source->kind == 1 || source->kind == 24 || source->kind == 2 || source->kind == 3 || source->kind == 6 || source->kind == 7))
5875 ListAdd(specs, MkSpecifier(UNSIGNED));
5876 ListAdd(specs, MkSpecifier(CHAR));
5882 if(backupSourceExpType)
5884 if(sourceExp->expType)
5885 FreeType(sourceExp->expType);
5886 sourceExp->expType = backupSourceExpType;
5891 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))
5893 specs = MkListOne(MkSpecifier(DOUBLE));
5895 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))
5897 specs = MkListOne(MkSpecifier(FLOAT));
5899 else if(dest->kind == 24 && (source->kind == 24 || source->kind == 1 || source->kind == 15 || source->kind == 2 || source->kind == 3) && (value == 1 || value == 0))
5902 ListAdd(specs, MkSpecifier(BOOL));
5904 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)))
5908 ListAdd(specs, MkSpecifier(UNSIGNED));
5909 ListAdd(specs, MkSpecifier(CHAR));
5911 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)))))
5915 ListAdd(specs, MkSpecifier(UNSIGNED));
5916 ListAdd(specs, MkSpecifier(SHORT));
5918 else if(dest->kind == 3 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3))
5922 ListAdd(specs, MkSpecifier(UNSIGNED));
5923 ListAdd(specs, MkSpecifier(INT));
5925 else if(dest->kind == 4 && (source->kind == 15 || source->kind == 2 || source->kind == 24 || source->kind == 1 || source->kind == 3 || source->kind == 4))
5929 ListAdd(specs, MkSpecifier(UNSIGNED));
5930 ListAdd(specs, MkSpecifier(INT64));
5932 else if(dest->kind == 15 && (source->kind == 4 || source->kind == 3 || source->kind == 2 || source->kind == 24 || source->kind == 1))
5934 specs = MkListOne(MkEnum(MkIdentifier(dest->__anon1.__anon1.enumName), (((void *)0))));
5940 if(backupSourceExpType)
5942 if(sourceExp->expType)
5943 FreeType(sourceExp->expType);
5944 sourceExp->expType = backupSourceExpType;
5948 if(!flag && !sourceExp->opDestType)
5950 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
5952 *newExp = *sourceExp;
5953 newExp->prev = (((void *)0));
5954 newExp->next = (((void *)0));
5955 if(sourceExp->destType)
5956 sourceExp->destType->refCount++;
5957 if(sourceExp->expType)
5958 sourceExp->expType->refCount++;
5959 sourceExp->type = 11;
5960 if(realDest->kind == 8)
5962 sourceExp->__anon1.cast.typeName = QMkClass(realDest->__anon1._class->string, (((void *)0)));
5963 FreeList(specs, (void *)(FreeSpecifier));
5966 sourceExp->__anon1.cast.typeName = MkTypeName(specs, (((void *)0)));
5967 if(newExp->type == 4)
5969 sourceExp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
5972 sourceExp->__anon1.cast.exp = newExp;
5973 FreeType(sourceExp->expType);
5974 sourceExp->expType = (((void *)0));
5975 ProcessExpressionType(sourceExp);
5978 FreeList(specs, (void *)(FreeSpecifier));
5981 if(backupSourceExpType)
5982 FreeType(backupSourceExpType);
5987 if(computedExp != sourceExp)
5989 FreeExpression(computedExp);
5990 computedExp = sourceExp;
5992 while((sourceExp->type == 5 || sourceExp->type == 32) && sourceExp->__anon1.list)
5993 sourceExp = (*sourceExp->__anon1.list).last;
5994 if(sourceExp->type == 0)
5996 struct Identifier * id = sourceExp->__anon1.__anon1.identifier;
6000 if(dest->__anon1._class && dest->__anon1._class->__anon1.registered && dest->__anon1._class->__anon1.registered->type == 4)
6002 struct __ecereNameSpace__ecere__com__Class * _class = dest->__anon1._class->__anon1.registered;
6003 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
6007 for(; _class && _class->type == 4; _class = _class->base)
6009 struct __ecereNameSpace__ecere__sys__NamedLink64 * value;
6010 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
6012 for(value = e->values.first; value; value = value->next)
6014 if(!strcmp(value->name, id->string))
6019 FreeType(sourceExp->expType);
6020 sourceExp->isConstant = 1;
6021 sourceExp->expType = MkClassType(_class->fullName);
6022 if(inCompiler || inPreCompiler || inDebugger)
6024 FreeExpContents(sourceExp);
6025 sourceExp->type = 2;
6026 if(_class->dataTypeString && (!strcmp(_class->dataTypeString, "int") || !strcmp(_class->dataTypeString, "int64") || !strcmp(_class->dataTypeString, "short") || !strcmp(_class->dataTypeString, "char")))
6027 sourceExp->__anon1.__anon1.constant = PrintInt64(value->data);
6029 sourceExp->__anon1.__anon1.constant = PrintUInt64(value->data);
6038 if(dest->classObjectType != 2 && dest->kind == 8 && MatchWithEnums_Module(privateModule, sourceExp, dest, id->string, conversions))
6049 static unsigned int IntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6051 int value2 = op2->__anon1.i;
6054 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i + value2));
6057 exp->expType = op1->type;
6059 op1->type->refCount++;
6064 static unsigned int UIntAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6066 unsigned int value2 = op2->__anon1.ui;
6069 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui + value2));
6072 exp->expType = op1->type;
6074 op1->type->refCount++;
6079 static unsigned int Int64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6081 long long value2 = op2->__anon1.i64;
6084 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 + value2));
6087 exp->expType = op1->type;
6089 op1->type->refCount++;
6094 static unsigned int UInt64Add(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6096 uint64 value2 = op2->__anon1.ui64;
6099 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 + value2));
6102 exp->expType = op1->type;
6104 op1->type->refCount++;
6109 static unsigned int ShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6111 short value2 = op2->__anon1.s;
6114 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s + value2));
6117 exp->expType = op1->type;
6119 op1->type->refCount++;
6124 static unsigned int UShortAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6126 unsigned short value2 = op2->__anon1.us;
6129 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us + value2));
6132 exp->expType = op1->type;
6134 op1->type->refCount++;
6139 static unsigned int CharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6141 char value2 = op2->__anon1.c;
6144 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c + value2));
6147 exp->expType = op1->type;
6149 op1->type->refCount++;
6154 static unsigned int UCharAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6156 unsigned char value2 = op2->__anon1.uc;
6159 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc + value2));
6162 exp->expType = op1->type;
6164 op1->type->refCount++;
6169 static unsigned int FloatAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6171 float value2 = op2->__anon1.f;
6174 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f + value2));
6177 exp->expType = op1->type;
6179 op1->type->refCount++;
6184 static unsigned int DoubleAdd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6186 double value2 = op2->__anon1.d;
6189 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d + value2));
6192 exp->expType = op1->type;
6194 op1->type->refCount++;
6199 static unsigned int IntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6201 int value2 = op2->__anon1.i;
6204 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i - value2));
6207 exp->expType = op1->type;
6209 op1->type->refCount++;
6214 static unsigned int UIntSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6216 unsigned int value2 = op2->__anon1.ui;
6219 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui - value2));
6222 exp->expType = op1->type;
6224 op1->type->refCount++;
6229 static unsigned int Int64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6231 long long value2 = op2->__anon1.i64;
6234 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 - value2));
6237 exp->expType = op1->type;
6239 op1->type->refCount++;
6244 static unsigned int UInt64Sub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6246 uint64 value2 = op2->__anon1.ui64;
6249 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 - value2));
6252 exp->expType = op1->type;
6254 op1->type->refCount++;
6259 static unsigned int ShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6261 short value2 = op2->__anon1.s;
6264 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s - value2));
6267 exp->expType = op1->type;
6269 op1->type->refCount++;
6274 static unsigned int UShortSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6276 unsigned short value2 = op2->__anon1.us;
6279 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us - value2));
6282 exp->expType = op1->type;
6284 op1->type->refCount++;
6289 static unsigned int CharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6291 char value2 = op2->__anon1.c;
6294 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c - value2));
6297 exp->expType = op1->type;
6299 op1->type->refCount++;
6304 static unsigned int UCharSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6306 unsigned char value2 = op2->__anon1.uc;
6309 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc - value2));
6312 exp->expType = op1->type;
6314 op1->type->refCount++;
6319 static unsigned int FloatSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6321 float value2 = op2->__anon1.f;
6324 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f - value2));
6327 exp->expType = op1->type;
6329 op1->type->refCount++;
6334 static unsigned int DoubleSub(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6336 double value2 = op2->__anon1.d;
6339 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d - value2));
6342 exp->expType = op1->type;
6344 op1->type->refCount++;
6349 static unsigned int IntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6351 int value2 = op2->__anon1.i;
6354 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i * value2));
6357 exp->expType = op1->type;
6359 op1->type->refCount++;
6364 static unsigned int UIntMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6366 unsigned int value2 = op2->__anon1.ui;
6369 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui * value2));
6372 exp->expType = op1->type;
6374 op1->type->refCount++;
6379 static unsigned int Int64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6381 long long value2 = op2->__anon1.i64;
6384 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 * value2));
6387 exp->expType = op1->type;
6389 op1->type->refCount++;
6394 static unsigned int UInt64Mul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6396 uint64 value2 = op2->__anon1.ui64;
6399 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 * value2));
6402 exp->expType = op1->type;
6404 op1->type->refCount++;
6409 static unsigned int ShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6411 short value2 = op2->__anon1.s;
6414 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s * value2));
6417 exp->expType = op1->type;
6419 op1->type->refCount++;
6424 static unsigned int UShortMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6426 unsigned short value2 = op2->__anon1.us;
6429 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us * value2));
6432 exp->expType = op1->type;
6434 op1->type->refCount++;
6439 static unsigned int CharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6441 char value2 = op2->__anon1.c;
6444 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c * value2));
6447 exp->expType = op1->type;
6449 op1->type->refCount++;
6454 static unsigned int UCharMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6456 unsigned char value2 = op2->__anon1.uc;
6459 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc * value2));
6462 exp->expType = op1->type;
6464 op1->type->refCount++;
6469 static unsigned int FloatMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6471 float value2 = op2->__anon1.f;
6474 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f * value2));
6477 exp->expType = op1->type;
6479 op1->type->refCount++;
6484 static unsigned int DoubleMul(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6486 double value2 = op2->__anon1.d;
6489 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d * value2));
6492 exp->expType = op1->type;
6494 op1->type->refCount++;
6499 static unsigned int IntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6501 int value2 = op2->__anon1.i;
6504 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i / value2) : 0);
6507 exp->expType = op1->type;
6509 op1->type->refCount++;
6514 static unsigned int UIntDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6516 unsigned int value2 = op2->__anon1.ui;
6519 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui / value2) : 0);
6522 exp->expType = op1->type;
6524 op1->type->refCount++;
6529 static unsigned int Int64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6531 long long value2 = op2->__anon1.i64;
6534 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 / value2) : 0);
6537 exp->expType = op1->type;
6539 op1->type->refCount++;
6544 static unsigned int UInt64Div(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6546 uint64 value2 = op2->__anon1.ui64;
6549 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 / value2) : 0);
6552 exp->expType = op1->type;
6554 op1->type->refCount++;
6559 static unsigned int ShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6561 short value2 = op2->__anon1.s;
6564 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s / value2) : (short)0);
6567 exp->expType = op1->type;
6569 op1->type->refCount++;
6574 static unsigned int UShortDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6576 unsigned short value2 = op2->__anon1.us;
6579 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us / value2) : (unsigned short)0);
6582 exp->expType = op1->type;
6584 op1->type->refCount++;
6589 static unsigned int CharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6591 char value2 = op2->__anon1.c;
6594 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c / value2) : (char)0);
6597 exp->expType = op1->type;
6599 op1->type->refCount++;
6604 static unsigned int UCharDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6606 unsigned char value2 = op2->__anon1.uc;
6609 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc / value2) : (unsigned char)0);
6612 exp->expType = op1->type;
6614 op1->type->refCount++;
6619 static unsigned int FloatDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6621 float value2 = op2->__anon1.f;
6624 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f / value2);
6627 exp->expType = op1->type;
6629 op1->type->refCount++;
6634 static unsigned int DoubleDiv(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6636 double value2 = op2->__anon1.d;
6639 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d / value2);
6642 exp->expType = op1->type;
6644 op1->type->refCount++;
6649 static unsigned int IntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6651 int value2 = op2->__anon1.i;
6654 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i % value2) : 0);
6657 exp->expType = op1->type;
6659 op1->type->refCount++;
6664 static unsigned int UIntMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6666 unsigned int value2 = op2->__anon1.ui;
6669 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui % value2) : 0);
6672 exp->expType = op1->type;
6674 op1->type->refCount++;
6679 static unsigned int Int64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6681 long long value2 = op2->__anon1.i64;
6684 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 % value2) : 0);
6687 exp->expType = op1->type;
6689 op1->type->refCount++;
6694 static unsigned int UInt64Mod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6696 uint64 value2 = op2->__anon1.ui64;
6699 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 % value2) : 0);
6702 exp->expType = op1->type;
6704 op1->type->refCount++;
6709 static unsigned int ShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6711 short value2 = op2->__anon1.s;
6714 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s % value2) : (short)0);
6717 exp->expType = op1->type;
6719 op1->type->refCount++;
6724 static unsigned int UShortMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6726 unsigned short value2 = op2->__anon1.us;
6729 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us % value2) : (unsigned short)0);
6732 exp->expType = op1->type;
6734 op1->type->refCount++;
6739 static unsigned int CharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6741 char value2 = op2->__anon1.c;
6744 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c % value2) : (char)0);
6747 exp->expType = op1->type;
6749 op1->type->refCount++;
6754 static unsigned int UCharMod(struct Expression * exp, struct Operand * op1, struct Operand * op2)
6756 unsigned char value2 = op2->__anon1.uc;
6759 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc % value2) : (unsigned char)0);
6762 exp->expType = op1->type;
6764 op1->type->refCount++;
6769 static unsigned int IntNeg(struct Expression * exp, struct Operand * op1)
6772 exp->__anon1.__anon2.string = PrintInt((-op1->__anon1.i));
6775 exp->expType = op1->type;
6777 op1->type->refCount++;
6782 static unsigned int UIntNeg(struct Expression * exp, struct Operand * op1)
6785 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(-op1->__anon1.ui));
6788 exp->expType = op1->type;
6790 op1->type->refCount++;
6795 static unsigned int Int64Neg(struct Expression * exp, struct Operand * op1)
6798 exp->__anon1.__anon2.string = PrintInt64((-op1->__anon1.i64));
6801 exp->expType = op1->type;
6803 op1->type->refCount++;
6808 static unsigned int UInt64Neg(struct Expression * exp, struct Operand * op1)
6811 exp->__anon1.__anon2.string = PrintUInt64((uint64)(-op1->__anon1.ui64));
6814 exp->expType = op1->type;
6816 op1->type->refCount++;
6821 static unsigned int ShortNeg(struct Expression * exp, struct Operand * op1)
6824 exp->__anon1.__anon2.string = PrintShort((-op1->__anon1.s));
6827 exp->expType = op1->type;
6829 op1->type->refCount++;
6834 static unsigned int UShortNeg(struct Expression * exp, struct Operand * op1)
6837 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(-op1->__anon1.us));
6840 exp->expType = op1->type;
6842 op1->type->refCount++;
6847 static unsigned int CharNeg(struct Expression * exp, struct Operand * op1)
6850 exp->__anon1.__anon2.string = PrintChar((-op1->__anon1.c));
6853 exp->expType = op1->type;
6855 op1->type->refCount++;
6860 static unsigned int UCharNeg(struct Expression * exp, struct Operand * op1)
6863 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(-op1->__anon1.uc));
6866 exp->expType = op1->type;
6868 op1->type->refCount++;
6873 static unsigned int FloatNeg(struct Expression * exp, struct Operand * op1)
6876 exp->__anon1.__anon2.string = PrintFloat((float)(-op1->__anon1.f));
6879 exp->expType = op1->type;
6881 op1->type->refCount++;
6886 static unsigned int DoubleNeg(struct Expression * exp, struct Operand * op1)
6889 exp->__anon1.__anon2.string = PrintDouble((double)(-op1->__anon1.d));
6892 exp->expType = op1->type;
6894 op1->type->refCount++;
6899 static unsigned int IntInc(struct Expression * exp, struct Operand * op1)
6902 exp->__anon1.__anon2.string = PrintInt((++op1->__anon1.i));
6905 exp->expType = op1->type;
6907 op1->type->refCount++;
6912 static unsigned int UIntInc(struct Expression * exp, struct Operand * op1)
6915 exp->__anon1.__anon2.string = PrintUInt((++op1->__anon1.ui));
6918 exp->expType = op1->type;
6920 op1->type->refCount++;
6925 static unsigned int Int64Inc(struct Expression * exp, struct Operand * op1)
6928 exp->__anon1.__anon2.string = PrintInt64((++op1->__anon1.i64));
6931 exp->expType = op1->type;
6933 op1->type->refCount++;
6938 static unsigned int UInt64Inc(struct Expression * exp, struct Operand * op1)
6941 exp->__anon1.__anon2.string = PrintUInt64((++op1->__anon1.ui64));
6944 exp->expType = op1->type;
6946 op1->type->refCount++;
6951 static unsigned int ShortInc(struct Expression * exp, struct Operand * op1)
6954 exp->__anon1.__anon2.string = PrintShort((++op1->__anon1.s));
6957 exp->expType = op1->type;
6959 op1->type->refCount++;
6964 static unsigned int UShortInc(struct Expression * exp, struct Operand * op1)
6967 exp->__anon1.__anon2.string = PrintUShort((++op1->__anon1.us));
6970 exp->expType = op1->type;
6972 op1->type->refCount++;
6977 static unsigned int CharInc(struct Expression * exp, struct Operand * op1)
6980 exp->__anon1.__anon2.string = PrintChar((++op1->__anon1.c));
6983 exp->expType = op1->type;
6985 op1->type->refCount++;
6990 static unsigned int UCharInc(struct Expression * exp, struct Operand * op1)
6993 exp->__anon1.__anon2.string = PrintUChar((++op1->__anon1.uc));
6996 exp->expType = op1->type;
6998 op1->type->refCount++;
7003 static unsigned int FloatInc(struct Expression * exp, struct Operand * op1)
7006 exp->__anon1.__anon2.string = PrintFloat((float)(++op1->__anon1.f));
7009 exp->expType = op1->type;
7011 op1->type->refCount++;
7016 static unsigned int DoubleInc(struct Expression * exp, struct Operand * op1)
7019 exp->__anon1.__anon2.string = PrintDouble((double)(++op1->__anon1.d));
7022 exp->expType = op1->type;
7024 op1->type->refCount++;
7029 static unsigned int IntDec(struct Expression * exp, struct Operand * op1)
7032 exp->__anon1.__anon2.string = PrintInt((--op1->__anon1.i));
7035 exp->expType = op1->type;
7037 op1->type->refCount++;
7042 static unsigned int UIntDec(struct Expression * exp, struct Operand * op1)
7045 exp->__anon1.__anon2.string = PrintUInt((--op1->__anon1.ui));
7048 exp->expType = op1->type;
7050 op1->type->refCount++;
7055 static unsigned int Int64Dec(struct Expression * exp, struct Operand * op1)
7058 exp->__anon1.__anon2.string = PrintInt64((--op1->__anon1.i64));
7061 exp->expType = op1->type;
7063 op1->type->refCount++;
7068 static unsigned int UInt64Dec(struct Expression * exp, struct Operand * op1)
7071 exp->__anon1.__anon2.string = PrintUInt64((--op1->__anon1.ui64));
7074 exp->expType = op1->type;
7076 op1->type->refCount++;
7081 static unsigned int ShortDec(struct Expression * exp, struct Operand * op1)
7084 exp->__anon1.__anon2.string = PrintShort((--op1->__anon1.s));
7087 exp->expType = op1->type;
7089 op1->type->refCount++;
7094 static unsigned int UShortDec(struct Expression * exp, struct Operand * op1)
7097 exp->__anon1.__anon2.string = PrintUShort((--op1->__anon1.us));
7100 exp->expType = op1->type;
7102 op1->type->refCount++;
7107 static unsigned int CharDec(struct Expression * exp, struct Operand * op1)
7110 exp->__anon1.__anon2.string = PrintChar((--op1->__anon1.c));
7113 exp->expType = op1->type;
7115 op1->type->refCount++;
7120 static unsigned int UCharDec(struct Expression * exp, struct Operand * op1)
7123 exp->__anon1.__anon2.string = PrintUChar((--op1->__anon1.uc));
7126 exp->expType = op1->type;
7128 op1->type->refCount++;
7133 static unsigned int FloatDec(struct Expression * exp, struct Operand * op1)
7136 exp->__anon1.__anon2.string = PrintFloat((float)(--op1->__anon1.f));
7139 exp->expType = op1->type;
7141 op1->type->refCount++;
7146 static unsigned int DoubleDec(struct Expression * exp, struct Operand * op1)
7149 exp->__anon1.__anon2.string = PrintDouble((double)(--op1->__anon1.d));
7152 exp->expType = op1->type;
7154 op1->type->refCount++;
7159 static unsigned int IntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7161 int value2 = op2->__anon1.i;
7164 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i = value2));
7167 exp->expType = op1->type;
7169 op1->type->refCount++;
7174 static unsigned int UIntAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7176 unsigned int value2 = op2->__anon1.ui;
7179 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui = value2));
7182 exp->expType = op1->type;
7184 op1->type->refCount++;
7189 static unsigned int Int64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7191 long long value2 = op2->__anon1.i64;
7194 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 = value2));
7197 exp->expType = op1->type;
7199 op1->type->refCount++;
7204 static unsigned int UInt64Asign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7206 uint64 value2 = op2->__anon1.ui64;
7209 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 = value2));
7212 exp->expType = op1->type;
7214 op1->type->refCount++;
7219 static unsigned int ShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7221 short value2 = op2->__anon1.s;
7224 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s = value2));
7227 exp->expType = op1->type;
7229 op1->type->refCount++;
7234 static unsigned int UShortAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7236 unsigned short value2 = op2->__anon1.us;
7239 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us = value2));
7242 exp->expType = op1->type;
7244 op1->type->refCount++;
7249 static unsigned int CharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7251 char value2 = op2->__anon1.c;
7254 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c = value2));
7257 exp->expType = op1->type;
7259 op1->type->refCount++;
7264 static unsigned int UCharAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7266 unsigned char value2 = op2->__anon1.uc;
7269 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc = value2));
7272 exp->expType = op1->type;
7274 op1->type->refCount++;
7279 static unsigned int FloatAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7281 float value2 = op2->__anon1.f;
7284 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f = value2));
7287 exp->expType = op1->type;
7289 op1->type->refCount++;
7294 static unsigned int DoubleAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7296 double value2 = op2->__anon1.d;
7299 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d = value2));
7302 exp->expType = op1->type;
7304 op1->type->refCount++;
7309 static unsigned int IntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7311 int value2 = op2->__anon1.i;
7314 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i += value2));
7317 exp->expType = op1->type;
7319 op1->type->refCount++;
7324 static unsigned int UIntAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7326 unsigned int value2 = op2->__anon1.ui;
7329 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui += value2));
7332 exp->expType = op1->type;
7334 op1->type->refCount++;
7339 static unsigned int Int64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7341 long long value2 = op2->__anon1.i64;
7344 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 += value2));
7347 exp->expType = op1->type;
7349 op1->type->refCount++;
7354 static unsigned int UInt64AddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7356 uint64 value2 = op2->__anon1.ui64;
7359 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 += value2));
7362 exp->expType = op1->type;
7364 op1->type->refCount++;
7369 static unsigned int ShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7371 short value2 = op2->__anon1.s;
7374 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s += value2));
7377 exp->expType = op1->type;
7379 op1->type->refCount++;
7384 static unsigned int UShortAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7386 unsigned short value2 = op2->__anon1.us;
7389 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us += value2));
7392 exp->expType = op1->type;
7394 op1->type->refCount++;
7399 static unsigned int CharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7401 char value2 = op2->__anon1.c;
7404 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c += value2));
7407 exp->expType = op1->type;
7409 op1->type->refCount++;
7414 static unsigned int UCharAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7416 unsigned char value2 = op2->__anon1.uc;
7419 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc += value2));
7422 exp->expType = op1->type;
7424 op1->type->refCount++;
7429 static unsigned int FloatAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7431 float value2 = op2->__anon1.f;
7434 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f += value2));
7437 exp->expType = op1->type;
7439 op1->type->refCount++;
7444 static unsigned int DoubleAddAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7446 double value2 = op2->__anon1.d;
7449 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d += value2));
7452 exp->expType = op1->type;
7454 op1->type->refCount++;
7459 static unsigned int IntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7461 int value2 = op2->__anon1.i;
7464 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i -= value2));
7467 exp->expType = op1->type;
7469 op1->type->refCount++;
7474 static unsigned int UIntSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7476 unsigned int value2 = op2->__anon1.ui;
7479 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui -= value2));
7482 exp->expType = op1->type;
7484 op1->type->refCount++;
7489 static unsigned int Int64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7491 long long value2 = op2->__anon1.i64;
7494 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 -= value2));
7497 exp->expType = op1->type;
7499 op1->type->refCount++;
7504 static unsigned int UInt64SubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7506 uint64 value2 = op2->__anon1.ui64;
7509 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 -= value2));
7512 exp->expType = op1->type;
7514 op1->type->refCount++;
7519 static unsigned int ShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7521 short value2 = op2->__anon1.s;
7524 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s -= value2));
7527 exp->expType = op1->type;
7529 op1->type->refCount++;
7534 static unsigned int UShortSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7536 unsigned short value2 = op2->__anon1.us;
7539 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us -= value2));
7542 exp->expType = op1->type;
7544 op1->type->refCount++;
7549 static unsigned int CharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7551 char value2 = op2->__anon1.c;
7554 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c -= value2));
7557 exp->expType = op1->type;
7559 op1->type->refCount++;
7564 static unsigned int UCharSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7566 unsigned char value2 = op2->__anon1.uc;
7569 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc -= value2));
7572 exp->expType = op1->type;
7574 op1->type->refCount++;
7579 static unsigned int FloatSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7581 float value2 = op2->__anon1.f;
7584 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f -= value2));
7587 exp->expType = op1->type;
7589 op1->type->refCount++;
7594 static unsigned int DoubleSubAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7596 double value2 = op2->__anon1.d;
7599 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d -= value2));
7602 exp->expType = op1->type;
7604 op1->type->refCount++;
7609 static unsigned int IntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7611 int value2 = op2->__anon1.i;
7614 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i *= value2));
7617 exp->expType = op1->type;
7619 op1->type->refCount++;
7624 static unsigned int UIntMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7626 unsigned int value2 = op2->__anon1.ui;
7629 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui *= value2));
7632 exp->expType = op1->type;
7634 op1->type->refCount++;
7639 static unsigned int Int64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7641 long long value2 = op2->__anon1.i64;
7644 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 *= value2));
7647 exp->expType = op1->type;
7649 op1->type->refCount++;
7654 static unsigned int UInt64MulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7656 uint64 value2 = op2->__anon1.ui64;
7659 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 *= value2));
7662 exp->expType = op1->type;
7664 op1->type->refCount++;
7669 static unsigned int ShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7671 short value2 = op2->__anon1.s;
7674 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s *= value2));
7677 exp->expType = op1->type;
7679 op1->type->refCount++;
7684 static unsigned int UShortMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7686 unsigned short value2 = op2->__anon1.us;
7689 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us *= value2));
7692 exp->expType = op1->type;
7694 op1->type->refCount++;
7699 static unsigned int CharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7701 char value2 = op2->__anon1.c;
7704 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c *= value2));
7707 exp->expType = op1->type;
7709 op1->type->refCount++;
7714 static unsigned int UCharMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7716 unsigned char value2 = op2->__anon1.uc;
7719 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc *= value2));
7722 exp->expType = op1->type;
7724 op1->type->refCount++;
7729 static unsigned int FloatMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7731 float value2 = op2->__anon1.f;
7734 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f *= value2));
7737 exp->expType = op1->type;
7739 op1->type->refCount++;
7744 static unsigned int DoubleMulAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7746 double value2 = op2->__anon1.d;
7749 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d *= value2));
7752 exp->expType = op1->type;
7754 op1->type->refCount++;
7759 static unsigned int IntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7761 int value2 = op2->__anon1.i;
7764 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i /= value2) : 0);
7767 exp->expType = op1->type;
7769 op1->type->refCount++;
7774 static unsigned int UIntDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7776 unsigned int value2 = op2->__anon1.ui;
7779 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui /= value2) : 0);
7782 exp->expType = op1->type;
7784 op1->type->refCount++;
7789 static unsigned int Int64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7791 long long value2 = op2->__anon1.i64;
7794 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 /= value2) : 0);
7797 exp->expType = op1->type;
7799 op1->type->refCount++;
7804 static unsigned int UInt64DivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7806 uint64 value2 = op2->__anon1.ui64;
7809 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 /= value2) : 0);
7812 exp->expType = op1->type;
7814 op1->type->refCount++;
7819 static unsigned int ShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7821 short value2 = op2->__anon1.s;
7824 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s /= value2) : (short)0);
7827 exp->expType = op1->type;
7829 op1->type->refCount++;
7834 static unsigned int UShortDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7836 unsigned short value2 = op2->__anon1.us;
7839 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us /= value2) : (unsigned short)0);
7842 exp->expType = op1->type;
7844 op1->type->refCount++;
7849 static unsigned int CharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7851 char value2 = op2->__anon1.c;
7854 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c /= value2) : (char)0);
7857 exp->expType = op1->type;
7859 op1->type->refCount++;
7864 static unsigned int UCharDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7866 unsigned char value2 = op2->__anon1.uc;
7869 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc /= value2) : (unsigned char)0);
7872 exp->expType = op1->type;
7874 op1->type->refCount++;
7879 static unsigned int FloatDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7881 float value2 = op2->__anon1.f;
7884 exp->__anon1.__anon2.string = PrintFloat(op1->__anon1.f /= value2);
7887 exp->expType = op1->type;
7889 op1->type->refCount++;
7894 static unsigned int DoubleDivAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7896 double value2 = op2->__anon1.d;
7899 exp->__anon1.__anon2.string = PrintDouble(op1->__anon1.d /= value2);
7902 exp->expType = op1->type;
7904 op1->type->refCount++;
7909 static unsigned int IntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7911 int value2 = op2->__anon1.i;
7914 exp->__anon1.__anon2.string = PrintInt(value2 ? (op1->__anon1.i %= value2) : 0);
7917 exp->expType = op1->type;
7919 op1->type->refCount++;
7924 static unsigned int UIntModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7926 unsigned int value2 = op2->__anon1.ui;
7929 exp->__anon1.__anon2.string = PrintUInt(value2 ? (op1->__anon1.ui %= value2) : 0);
7932 exp->expType = op1->type;
7934 op1->type->refCount++;
7939 static unsigned int Int64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7941 long long value2 = op2->__anon1.i64;
7944 exp->__anon1.__anon2.string = PrintInt64(value2 ? (op1->__anon1.i64 %= value2) : 0);
7947 exp->expType = op1->type;
7949 op1->type->refCount++;
7954 static unsigned int UInt64ModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7956 uint64 value2 = op2->__anon1.ui64;
7959 exp->__anon1.__anon2.string = PrintUInt64(value2 ? (op1->__anon1.ui64 %= value2) : 0);
7962 exp->expType = op1->type;
7964 op1->type->refCount++;
7969 static unsigned int ShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7971 short value2 = op2->__anon1.s;
7974 exp->__anon1.__anon2.string = PrintShort(value2 ? (op1->__anon1.s %= value2) : (short)0);
7977 exp->expType = op1->type;
7979 op1->type->refCount++;
7984 static unsigned int UShortModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
7986 unsigned short value2 = op2->__anon1.us;
7989 exp->__anon1.__anon2.string = PrintUShort(value2 ? (op1->__anon1.us %= value2) : (unsigned short)0);
7992 exp->expType = op1->type;
7994 op1->type->refCount++;
7999 static unsigned int CharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8001 char value2 = op2->__anon1.c;
8004 exp->__anon1.__anon2.string = PrintChar(value2 ? (op1->__anon1.c %= value2) : (char)0);
8007 exp->expType = op1->type;
8009 op1->type->refCount++;
8014 static unsigned int UCharModAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8016 unsigned char value2 = op2->__anon1.uc;
8019 exp->__anon1.__anon2.string = PrintUChar(value2 ? (op1->__anon1.uc %= value2) : (unsigned char)0);
8022 exp->expType = op1->type;
8024 op1->type->refCount++;
8029 static unsigned int IntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8031 int value2 = op2->__anon1.i;
8034 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i & value2));
8037 exp->expType = op1->type;
8039 op1->type->refCount++;
8044 static unsigned int UIntBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8046 unsigned int value2 = op2->__anon1.ui;
8049 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui & value2));
8052 exp->expType = op1->type;
8054 op1->type->refCount++;
8059 static unsigned int Int64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8061 long long value2 = op2->__anon1.i64;
8064 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 & value2));
8067 exp->expType = op1->type;
8069 op1->type->refCount++;
8074 static unsigned int UInt64BitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8076 uint64 value2 = op2->__anon1.ui64;
8079 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 & value2));
8082 exp->expType = op1->type;
8084 op1->type->refCount++;
8089 static unsigned int ShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8091 short value2 = op2->__anon1.s;
8094 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s & value2));
8097 exp->expType = op1->type;
8099 op1->type->refCount++;
8104 static unsigned int UShortBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8106 unsigned short value2 = op2->__anon1.us;
8109 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us & value2));
8112 exp->expType = op1->type;
8114 op1->type->refCount++;
8119 static unsigned int CharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8121 char value2 = op2->__anon1.c;
8124 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c & value2));
8127 exp->expType = op1->type;
8129 op1->type->refCount++;
8134 static unsigned int UCharBitAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8136 unsigned char value2 = op2->__anon1.uc;
8139 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc & value2));
8142 exp->expType = op1->type;
8144 op1->type->refCount++;
8149 static unsigned int IntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8151 int value2 = op2->__anon1.i;
8154 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i | value2));
8157 exp->expType = op1->type;
8159 op1->type->refCount++;
8164 static unsigned int UIntBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8166 unsigned int value2 = op2->__anon1.ui;
8169 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui | value2));
8172 exp->expType = op1->type;
8174 op1->type->refCount++;
8179 static unsigned int Int64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8181 long long value2 = op2->__anon1.i64;
8184 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 | value2));
8187 exp->expType = op1->type;
8189 op1->type->refCount++;
8194 static unsigned int UInt64BitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8196 uint64 value2 = op2->__anon1.ui64;
8199 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 | value2));
8202 exp->expType = op1->type;
8204 op1->type->refCount++;
8209 static unsigned int ShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8211 short value2 = op2->__anon1.s;
8214 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s | value2));
8217 exp->expType = op1->type;
8219 op1->type->refCount++;
8224 static unsigned int UShortBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8226 unsigned short value2 = op2->__anon1.us;
8229 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us | value2));
8232 exp->expType = op1->type;
8234 op1->type->refCount++;
8239 static unsigned int CharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8241 char value2 = op2->__anon1.c;
8244 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c | value2));
8247 exp->expType = op1->type;
8249 op1->type->refCount++;
8254 static unsigned int UCharBitOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8256 unsigned char value2 = op2->__anon1.uc;
8259 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc | value2));
8262 exp->expType = op1->type;
8264 op1->type->refCount++;
8269 static unsigned int IntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8271 int value2 = op2->__anon1.i;
8274 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^ value2));
8277 exp->expType = op1->type;
8279 op1->type->refCount++;
8284 static unsigned int UIntBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8286 unsigned int value2 = op2->__anon1.ui;
8289 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^ value2));
8292 exp->expType = op1->type;
8294 op1->type->refCount++;
8299 static unsigned int Int64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8301 long long value2 = op2->__anon1.i64;
8304 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^ value2));
8307 exp->expType = op1->type;
8309 op1->type->refCount++;
8314 static unsigned int UInt64BitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8316 uint64 value2 = op2->__anon1.ui64;
8319 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^ value2));
8322 exp->expType = op1->type;
8324 op1->type->refCount++;
8329 static unsigned int ShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8331 short value2 = op2->__anon1.s;
8334 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^ value2));
8337 exp->expType = op1->type;
8339 op1->type->refCount++;
8344 static unsigned int UShortBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8346 unsigned short value2 = op2->__anon1.us;
8349 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^ value2));
8352 exp->expType = op1->type;
8354 op1->type->refCount++;
8359 static unsigned int CharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8361 char value2 = op2->__anon1.c;
8364 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^ value2));
8367 exp->expType = op1->type;
8369 op1->type->refCount++;
8374 static unsigned int UCharBitXor(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8376 unsigned char value2 = op2->__anon1.uc;
8379 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^ value2));
8382 exp->expType = op1->type;
8384 op1->type->refCount++;
8389 static unsigned int IntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8391 int value2 = op2->__anon1.i;
8394 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i << value2));
8397 exp->expType = op1->type;
8399 op1->type->refCount++;
8404 static unsigned int UIntLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8406 unsigned int value2 = op2->__anon1.ui;
8409 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui << value2));
8412 exp->expType = op1->type;
8414 op1->type->refCount++;
8419 static unsigned int Int64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8421 long long value2 = op2->__anon1.i64;
8424 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 << value2));
8427 exp->expType = op1->type;
8429 op1->type->refCount++;
8434 static unsigned int UInt64LShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8436 uint64 value2 = op2->__anon1.ui64;
8439 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 << value2));
8442 exp->expType = op1->type;
8444 op1->type->refCount++;
8449 static unsigned int ShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8451 short value2 = op2->__anon1.s;
8454 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s << value2));
8457 exp->expType = op1->type;
8459 op1->type->refCount++;
8464 static unsigned int UShortLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8466 unsigned short value2 = op2->__anon1.us;
8469 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us << value2));
8472 exp->expType = op1->type;
8474 op1->type->refCount++;
8479 static unsigned int CharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8481 char value2 = op2->__anon1.c;
8484 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c << value2));
8487 exp->expType = op1->type;
8489 op1->type->refCount++;
8494 static unsigned int UCharLShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8496 unsigned char value2 = op2->__anon1.uc;
8499 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc << value2));
8502 exp->expType = op1->type;
8504 op1->type->refCount++;
8509 static unsigned int IntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8511 int value2 = op2->__anon1.i;
8514 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >> value2));
8517 exp->expType = op1->type;
8519 op1->type->refCount++;
8524 static unsigned int UIntRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8526 unsigned int value2 = op2->__anon1.ui;
8529 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >> value2));
8532 exp->expType = op1->type;
8534 op1->type->refCount++;
8539 static unsigned int Int64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8541 long long value2 = op2->__anon1.i64;
8544 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >> value2));
8547 exp->expType = op1->type;
8549 op1->type->refCount++;
8554 static unsigned int UInt64RShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8556 uint64 value2 = op2->__anon1.ui64;
8559 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >> value2));
8562 exp->expType = op1->type;
8564 op1->type->refCount++;
8569 static unsigned int ShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8571 short value2 = op2->__anon1.s;
8574 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >> value2));
8577 exp->expType = op1->type;
8579 op1->type->refCount++;
8584 static unsigned int UShortRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8586 unsigned short value2 = op2->__anon1.us;
8589 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >> value2));
8592 exp->expType = op1->type;
8594 op1->type->refCount++;
8599 static unsigned int CharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8601 char value2 = op2->__anon1.c;
8604 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >> value2));
8607 exp->expType = op1->type;
8609 op1->type->refCount++;
8614 static unsigned int UCharRShift(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8616 unsigned char value2 = op2->__anon1.uc;
8619 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >> value2));
8622 exp->expType = op1->type;
8624 op1->type->refCount++;
8629 static unsigned int IntBitNot(struct Expression * exp, struct Operand * op1)
8632 exp->__anon1.__anon2.string = PrintInt((~op1->__anon1.i));
8635 exp->expType = op1->type;
8637 op1->type->refCount++;
8642 static unsigned int UIntBitNot(struct Expression * exp, struct Operand * op1)
8645 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(~op1->__anon1.ui));
8648 exp->expType = op1->type;
8650 op1->type->refCount++;
8655 static unsigned int Int64BitNot(struct Expression * exp, struct Operand * op1)
8658 exp->__anon1.__anon2.string = PrintInt64((long long)(~op1->__anon1.i64));
8661 exp->expType = op1->type;
8663 op1->type->refCount++;
8668 static unsigned int UInt64BitNot(struct Expression * exp, struct Operand * op1)
8671 exp->__anon1.__anon2.string = PrintUInt64((uint64)(~op1->__anon1.ui64));
8674 exp->expType = op1->type;
8676 op1->type->refCount++;
8681 static unsigned int ShortBitNot(struct Expression * exp, struct Operand * op1)
8684 exp->__anon1.__anon2.string = PrintShort((short)(~op1->__anon1.s));
8687 exp->expType = op1->type;
8689 op1->type->refCount++;
8694 static unsigned int UShortBitNot(struct Expression * exp, struct Operand * op1)
8697 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(~op1->__anon1.us));
8700 exp->expType = op1->type;
8702 op1->type->refCount++;
8707 static unsigned int CharBitNot(struct Expression * exp, struct Operand * op1)
8710 exp->__anon1.__anon2.string = PrintChar((char)(~op1->__anon1.c));
8713 exp->expType = op1->type;
8715 op1->type->refCount++;
8720 static unsigned int UCharBitNot(struct Expression * exp, struct Operand * op1)
8723 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(~op1->__anon1.uc));
8726 exp->expType = op1->type;
8728 op1->type->refCount++;
8733 static unsigned int IntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8735 int value2 = op2->__anon1.i;
8738 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i &= value2));
8741 exp->expType = op1->type;
8743 op1->type->refCount++;
8748 static unsigned int UIntAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8750 unsigned int value2 = op2->__anon1.ui;
8753 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui &= value2));
8756 exp->expType = op1->type;
8758 op1->type->refCount++;
8763 static unsigned int Int64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8765 long long value2 = op2->__anon1.i64;
8768 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 &= value2));
8771 exp->expType = op1->type;
8773 op1->type->refCount++;
8778 static unsigned int UInt64AndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8780 uint64 value2 = op2->__anon1.ui64;
8783 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 &= value2));
8786 exp->expType = op1->type;
8788 op1->type->refCount++;
8793 static unsigned int ShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8795 short value2 = op2->__anon1.s;
8798 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s &= value2));
8801 exp->expType = op1->type;
8803 op1->type->refCount++;
8808 static unsigned int UShortAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8810 unsigned short value2 = op2->__anon1.us;
8813 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us &= value2));
8816 exp->expType = op1->type;
8818 op1->type->refCount++;
8823 static unsigned int CharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8825 char value2 = op2->__anon1.c;
8828 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c &= value2));
8831 exp->expType = op1->type;
8833 op1->type->refCount++;
8838 static unsigned int UCharAndAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8840 unsigned char value2 = op2->__anon1.uc;
8843 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc &= value2));
8846 exp->expType = op1->type;
8848 op1->type->refCount++;
8853 static unsigned int IntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8855 int value2 = op2->__anon1.i;
8858 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i |= value2));
8861 exp->expType = op1->type;
8863 op1->type->refCount++;
8868 static unsigned int UIntOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8870 unsigned int value2 = op2->__anon1.ui;
8873 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui |= value2));
8876 exp->expType = op1->type;
8878 op1->type->refCount++;
8883 static unsigned int Int64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8885 long long value2 = op2->__anon1.i64;
8888 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 |= value2));
8891 exp->expType = op1->type;
8893 op1->type->refCount++;
8898 static unsigned int UInt64OrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8900 uint64 value2 = op2->__anon1.ui64;
8903 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 |= value2));
8906 exp->expType = op1->type;
8908 op1->type->refCount++;
8913 static unsigned int ShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8915 short value2 = op2->__anon1.s;
8918 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s |= value2));
8921 exp->expType = op1->type;
8923 op1->type->refCount++;
8928 static unsigned int UShortOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8930 unsigned short value2 = op2->__anon1.us;
8933 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us |= value2));
8936 exp->expType = op1->type;
8938 op1->type->refCount++;
8943 static unsigned int CharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8945 char value2 = op2->__anon1.c;
8948 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c |= value2));
8951 exp->expType = op1->type;
8953 op1->type->refCount++;
8958 static unsigned int UCharOrAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8960 unsigned char value2 = op2->__anon1.uc;
8963 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc |= value2));
8966 exp->expType = op1->type;
8968 op1->type->refCount++;
8973 static unsigned int IntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8975 int value2 = op2->__anon1.i;
8978 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i ^= value2));
8981 exp->expType = op1->type;
8983 op1->type->refCount++;
8988 static unsigned int UIntXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
8990 unsigned int value2 = op2->__anon1.ui;
8993 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui ^= value2));
8996 exp->expType = op1->type;
8998 op1->type->refCount++;
9003 static unsigned int Int64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9005 long long value2 = op2->__anon1.i64;
9008 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 ^= value2));
9011 exp->expType = op1->type;
9013 op1->type->refCount++;
9018 static unsigned int UInt64XorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9020 uint64 value2 = op2->__anon1.ui64;
9023 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 ^= value2));
9026 exp->expType = op1->type;
9028 op1->type->refCount++;
9033 static unsigned int ShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9035 short value2 = op2->__anon1.s;
9038 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s ^= value2));
9041 exp->expType = op1->type;
9043 op1->type->refCount++;
9048 static unsigned int UShortXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9050 unsigned short value2 = op2->__anon1.us;
9053 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us ^= value2));
9056 exp->expType = op1->type;
9058 op1->type->refCount++;
9063 static unsigned int CharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9065 char value2 = op2->__anon1.c;
9068 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c ^= value2));
9071 exp->expType = op1->type;
9073 op1->type->refCount++;
9078 static unsigned int UCharXorAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9080 unsigned char value2 = op2->__anon1.uc;
9083 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc ^= value2));
9086 exp->expType = op1->type;
9088 op1->type->refCount++;
9093 static unsigned int IntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9095 int value2 = op2->__anon1.i;
9098 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i <<= value2));
9101 exp->expType = op1->type;
9103 op1->type->refCount++;
9108 static unsigned int UIntLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9110 unsigned int value2 = op2->__anon1.ui;
9113 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui <<= value2));
9116 exp->expType = op1->type;
9118 op1->type->refCount++;
9123 static unsigned int Int64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9125 long long value2 = op2->__anon1.i64;
9128 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 <<= value2));
9131 exp->expType = op1->type;
9133 op1->type->refCount++;
9138 static unsigned int UInt64LShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9140 uint64 value2 = op2->__anon1.ui64;
9143 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 <<= value2));
9146 exp->expType = op1->type;
9148 op1->type->refCount++;
9153 static unsigned int ShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9155 short value2 = op2->__anon1.s;
9158 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s <<= value2));
9161 exp->expType = op1->type;
9163 op1->type->refCount++;
9168 static unsigned int UShortLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9170 unsigned short value2 = op2->__anon1.us;
9173 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us <<= value2));
9176 exp->expType = op1->type;
9178 op1->type->refCount++;
9183 static unsigned int CharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9185 char value2 = op2->__anon1.c;
9188 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c <<= value2));
9191 exp->expType = op1->type;
9193 op1->type->refCount++;
9198 static unsigned int UCharLShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9200 unsigned char value2 = op2->__anon1.uc;
9203 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc <<= value2));
9206 exp->expType = op1->type;
9208 op1->type->refCount++;
9213 static unsigned int IntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9215 int value2 = op2->__anon1.i;
9218 exp->__anon1.__anon2.string = PrintInt((op1->__anon1.i >>= value2));
9221 exp->expType = op1->type;
9223 op1->type->refCount++;
9228 static unsigned int UIntRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9230 unsigned int value2 = op2->__anon1.ui;
9233 exp->__anon1.__anon2.string = PrintUInt((op1->__anon1.ui >>= value2));
9236 exp->expType = op1->type;
9238 op1->type->refCount++;
9243 static unsigned int Int64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9245 long long value2 = op2->__anon1.i64;
9248 exp->__anon1.__anon2.string = PrintInt64((op1->__anon1.i64 >>= value2));
9251 exp->expType = op1->type;
9253 op1->type->refCount++;
9258 static unsigned int UInt64RShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9260 uint64 value2 = op2->__anon1.ui64;
9263 exp->__anon1.__anon2.string = PrintUInt64((op1->__anon1.ui64 >>= value2));
9266 exp->expType = op1->type;
9268 op1->type->refCount++;
9273 static unsigned int ShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9275 short value2 = op2->__anon1.s;
9278 exp->__anon1.__anon2.string = PrintShort((op1->__anon1.s >>= value2));
9281 exp->expType = op1->type;
9283 op1->type->refCount++;
9288 static unsigned int UShortRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9290 unsigned short value2 = op2->__anon1.us;
9293 exp->__anon1.__anon2.string = PrintUShort((op1->__anon1.us >>= value2));
9296 exp->expType = op1->type;
9298 op1->type->refCount++;
9303 static unsigned int CharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9305 char value2 = op2->__anon1.c;
9308 exp->__anon1.__anon2.string = PrintChar((op1->__anon1.c >>= value2));
9311 exp->expType = op1->type;
9313 op1->type->refCount++;
9318 static unsigned int UCharRShiftAsign(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9320 unsigned char value2 = op2->__anon1.uc;
9323 exp->__anon1.__anon2.string = PrintUChar((op1->__anon1.uc >>= value2));
9326 exp->expType = op1->type;
9328 op1->type->refCount++;
9333 static unsigned int IntNot(struct Expression * exp, struct Operand * op1)
9336 exp->__anon1.__anon2.string = PrintInt((int)(!op1->__anon1.i));
9339 exp->expType = op1->type;
9341 op1->type->refCount++;
9346 static unsigned int UIntNot(struct Expression * exp, struct Operand * op1)
9349 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(!op1->__anon1.ui));
9352 exp->expType = op1->type;
9354 op1->type->refCount++;
9359 static unsigned int Int64Not(struct Expression * exp, struct Operand * op1)
9362 exp->__anon1.__anon2.string = PrintInt64((long long)(!op1->__anon1.i64));
9365 exp->expType = op1->type;
9367 op1->type->refCount++;
9372 static unsigned int UInt64Not(struct Expression * exp, struct Operand * op1)
9375 exp->__anon1.__anon2.string = PrintUInt64((uint64)(!op1->__anon1.ui64));
9378 exp->expType = op1->type;
9380 op1->type->refCount++;
9385 static unsigned int ShortNot(struct Expression * exp, struct Operand * op1)
9388 exp->__anon1.__anon2.string = PrintShort((short)(!op1->__anon1.s));
9391 exp->expType = op1->type;
9393 op1->type->refCount++;
9398 static unsigned int UShortNot(struct Expression * exp, struct Operand * op1)
9401 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(!op1->__anon1.us));
9404 exp->expType = op1->type;
9406 op1->type->refCount++;
9411 static unsigned int CharNot(struct Expression * exp, struct Operand * op1)
9414 exp->__anon1.__anon2.string = PrintChar((char)(!op1->__anon1.c));
9417 exp->expType = op1->type;
9419 op1->type->refCount++;
9424 static unsigned int UCharNot(struct Expression * exp, struct Operand * op1)
9427 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(!op1->__anon1.uc));
9430 exp->expType = op1->type;
9432 op1->type->refCount++;
9437 static unsigned int IntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9439 int value2 = op2->__anon1.i;
9442 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i == value2));
9445 exp->expType = op1->type;
9447 op1->type->refCount++;
9452 static unsigned int UIntEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9454 unsigned int value2 = op2->__anon1.ui;
9457 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui == value2));
9460 exp->expType = op1->type;
9462 op1->type->refCount++;
9467 static unsigned int Int64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9469 long long value2 = op2->__anon1.i64;
9472 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 == value2));
9475 exp->expType = op1->type;
9477 op1->type->refCount++;
9482 static unsigned int UInt64Equ(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9484 uint64 value2 = op2->__anon1.ui64;
9487 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 == value2));
9490 exp->expType = op1->type;
9492 op1->type->refCount++;
9497 static unsigned int ShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9499 short value2 = op2->__anon1.s;
9502 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s == value2));
9505 exp->expType = op1->type;
9507 op1->type->refCount++;
9512 static unsigned int UShortEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9514 unsigned short value2 = op2->__anon1.us;
9517 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us == value2));
9520 exp->expType = op1->type;
9522 op1->type->refCount++;
9527 static unsigned int CharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9529 char value2 = op2->__anon1.c;
9532 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c == value2));
9535 exp->expType = op1->type;
9537 op1->type->refCount++;
9542 static unsigned int UCharEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9544 unsigned char value2 = op2->__anon1.uc;
9547 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc == value2));
9550 exp->expType = op1->type;
9552 op1->type->refCount++;
9557 static unsigned int FloatEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9559 float value2 = op2->__anon1.f;
9562 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f == value2));
9565 exp->expType = op1->type;
9567 op1->type->refCount++;
9572 static unsigned int DoubleEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9574 double value2 = op2->__anon1.d;
9577 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d == value2));
9580 exp->expType = op1->type;
9582 op1->type->refCount++;
9587 static unsigned int IntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9589 int value2 = op2->__anon1.i;
9592 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i != value2));
9595 exp->expType = op1->type;
9597 op1->type->refCount++;
9602 static unsigned int UIntNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9604 unsigned int value2 = op2->__anon1.ui;
9607 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui != value2));
9610 exp->expType = op1->type;
9612 op1->type->refCount++;
9617 static unsigned int Int64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9619 long long value2 = op2->__anon1.i64;
9622 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 != value2));
9625 exp->expType = op1->type;
9627 op1->type->refCount++;
9632 static unsigned int UInt64Nqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9634 uint64 value2 = op2->__anon1.ui64;
9637 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 != value2));
9640 exp->expType = op1->type;
9642 op1->type->refCount++;
9647 static unsigned int ShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9649 short value2 = op2->__anon1.s;
9652 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s != value2));
9655 exp->expType = op1->type;
9657 op1->type->refCount++;
9662 static unsigned int UShortNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9664 unsigned short value2 = op2->__anon1.us;
9667 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us != value2));
9670 exp->expType = op1->type;
9672 op1->type->refCount++;
9677 static unsigned int CharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9679 char value2 = op2->__anon1.c;
9682 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c != value2));
9685 exp->expType = op1->type;
9687 op1->type->refCount++;
9692 static unsigned int UCharNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9694 unsigned char value2 = op2->__anon1.uc;
9697 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc != value2));
9700 exp->expType = op1->type;
9702 op1->type->refCount++;
9707 static unsigned int FloatNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9709 float value2 = op2->__anon1.f;
9712 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f != value2));
9715 exp->expType = op1->type;
9717 op1->type->refCount++;
9722 static unsigned int DoubleNqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9724 double value2 = op2->__anon1.d;
9727 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d != value2));
9730 exp->expType = op1->type;
9732 op1->type->refCount++;
9737 static unsigned int IntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9739 int value2 = op2->__anon1.i;
9742 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i && value2));
9745 exp->expType = op1->type;
9747 op1->type->refCount++;
9752 static unsigned int UIntAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9754 unsigned int value2 = op2->__anon1.ui;
9757 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui && value2));
9760 exp->expType = op1->type;
9762 op1->type->refCount++;
9767 static unsigned int Int64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9769 long long value2 = op2->__anon1.i64;
9772 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 && value2));
9775 exp->expType = op1->type;
9777 op1->type->refCount++;
9782 static unsigned int UInt64And(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9784 uint64 value2 = op2->__anon1.ui64;
9787 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 && value2));
9790 exp->expType = op1->type;
9792 op1->type->refCount++;
9797 static unsigned int ShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9799 short value2 = op2->__anon1.s;
9802 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s && value2));
9805 exp->expType = op1->type;
9807 op1->type->refCount++;
9812 static unsigned int UShortAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9814 unsigned short value2 = op2->__anon1.us;
9817 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us && value2));
9820 exp->expType = op1->type;
9822 op1->type->refCount++;
9827 static unsigned int CharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9829 char value2 = op2->__anon1.c;
9832 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c && value2));
9835 exp->expType = op1->type;
9837 op1->type->refCount++;
9842 static unsigned int UCharAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9844 unsigned char value2 = op2->__anon1.uc;
9847 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc && value2));
9850 exp->expType = op1->type;
9852 op1->type->refCount++;
9857 static unsigned int FloatAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9859 float value2 = op2->__anon1.f;
9862 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f && value2));
9865 exp->expType = op1->type;
9867 op1->type->refCount++;
9872 static unsigned int DoubleAnd(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9874 double value2 = op2->__anon1.d;
9877 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d && value2));
9880 exp->expType = op1->type;
9882 op1->type->refCount++;
9887 static unsigned int IntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9889 int value2 = op2->__anon1.i;
9892 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i || value2));
9895 exp->expType = op1->type;
9897 op1->type->refCount++;
9902 static unsigned int UIntOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9904 unsigned int value2 = op2->__anon1.ui;
9907 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui || value2));
9910 exp->expType = op1->type;
9912 op1->type->refCount++;
9917 static unsigned int Int64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9919 long long value2 = op2->__anon1.i64;
9922 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 || value2));
9925 exp->expType = op1->type;
9927 op1->type->refCount++;
9932 static unsigned int UInt64Or(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9934 uint64 value2 = op2->__anon1.ui64;
9937 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 || value2));
9940 exp->expType = op1->type;
9942 op1->type->refCount++;
9947 static unsigned int ShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9949 short value2 = op2->__anon1.s;
9952 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s || value2));
9955 exp->expType = op1->type;
9957 op1->type->refCount++;
9962 static unsigned int UShortOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9964 unsigned short value2 = op2->__anon1.us;
9967 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us || value2));
9970 exp->expType = op1->type;
9972 op1->type->refCount++;
9977 static unsigned int CharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9979 char value2 = op2->__anon1.c;
9982 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c || value2));
9985 exp->expType = op1->type;
9987 op1->type->refCount++;
9992 static unsigned int UCharOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
9994 unsigned char value2 = op2->__anon1.uc;
9997 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc || value2));
10000 exp->expType = op1->type;
10002 op1->type->refCount++;
10007 static unsigned int FloatOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10009 float value2 = op2->__anon1.f;
10012 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f || value2));
10015 exp->expType = op1->type;
10017 op1->type->refCount++;
10022 static unsigned int DoubleOr(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10024 double value2 = op2->__anon1.d;
10027 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d || value2));
10030 exp->expType = op1->type;
10032 op1->type->refCount++;
10037 static unsigned int IntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10039 int value2 = op2->__anon1.i;
10042 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i > value2));
10045 exp->expType = op1->type;
10047 op1->type->refCount++;
10052 static unsigned int UIntGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10054 unsigned int value2 = op2->__anon1.ui;
10057 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui > value2));
10060 exp->expType = op1->type;
10062 op1->type->refCount++;
10067 static unsigned int Int64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10069 long long value2 = op2->__anon1.i64;
10072 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 > value2));
10075 exp->expType = op1->type;
10077 op1->type->refCount++;
10082 static unsigned int UInt64Grt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10084 uint64 value2 = op2->__anon1.ui64;
10087 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 > value2));
10090 exp->expType = op1->type;
10092 op1->type->refCount++;
10097 static unsigned int ShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10099 short value2 = op2->__anon1.s;
10102 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s > value2));
10105 exp->expType = op1->type;
10107 op1->type->refCount++;
10112 static unsigned int UShortGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10114 unsigned short value2 = op2->__anon1.us;
10117 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us > value2));
10120 exp->expType = op1->type;
10122 op1->type->refCount++;
10127 static unsigned int CharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10129 char value2 = op2->__anon1.c;
10132 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c > value2));
10135 exp->expType = op1->type;
10137 op1->type->refCount++;
10142 static unsigned int UCharGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10144 unsigned char value2 = op2->__anon1.uc;
10147 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc > value2));
10150 exp->expType = op1->type;
10152 op1->type->refCount++;
10157 static unsigned int FloatGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10159 float value2 = op2->__anon1.f;
10162 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f > value2));
10165 exp->expType = op1->type;
10167 op1->type->refCount++;
10172 static unsigned int DoubleGrt(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10174 double value2 = op2->__anon1.d;
10177 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d > value2));
10180 exp->expType = op1->type;
10182 op1->type->refCount++;
10187 static unsigned int IntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10189 int value2 = op2->__anon1.i;
10192 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i < value2));
10195 exp->expType = op1->type;
10197 op1->type->refCount++;
10202 static unsigned int UIntSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10204 unsigned int value2 = op2->__anon1.ui;
10207 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui < value2));
10210 exp->expType = op1->type;
10212 op1->type->refCount++;
10217 static unsigned int Int64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10219 long long value2 = op2->__anon1.i64;
10222 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 < value2));
10225 exp->expType = op1->type;
10227 op1->type->refCount++;
10232 static unsigned int UInt64Sma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10234 uint64 value2 = op2->__anon1.ui64;
10237 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 < value2));
10240 exp->expType = op1->type;
10242 op1->type->refCount++;
10247 static unsigned int ShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10249 short value2 = op2->__anon1.s;
10252 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s < value2));
10255 exp->expType = op1->type;
10257 op1->type->refCount++;
10262 static unsigned int UShortSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10264 unsigned short value2 = op2->__anon1.us;
10267 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us < value2));
10270 exp->expType = op1->type;
10272 op1->type->refCount++;
10277 static unsigned int CharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10279 char value2 = op2->__anon1.c;
10282 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c < value2));
10285 exp->expType = op1->type;
10287 op1->type->refCount++;
10292 static unsigned int UCharSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10294 unsigned char value2 = op2->__anon1.uc;
10297 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc < value2));
10300 exp->expType = op1->type;
10302 op1->type->refCount++;
10307 static unsigned int FloatSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10309 float value2 = op2->__anon1.f;
10312 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f < value2));
10315 exp->expType = op1->type;
10317 op1->type->refCount++;
10322 static unsigned int DoubleSma(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10324 double value2 = op2->__anon1.d;
10327 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d < value2));
10330 exp->expType = op1->type;
10332 op1->type->refCount++;
10337 static unsigned int IntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10339 int value2 = op2->__anon1.i;
10342 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i >= value2));
10345 exp->expType = op1->type;
10347 op1->type->refCount++;
10352 static unsigned int UIntGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10354 unsigned int value2 = op2->__anon1.ui;
10357 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui >= value2));
10360 exp->expType = op1->type;
10362 op1->type->refCount++;
10367 static unsigned int Int64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10369 long long value2 = op2->__anon1.i64;
10372 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 >= value2));
10375 exp->expType = op1->type;
10377 op1->type->refCount++;
10382 static unsigned int UInt64GrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10384 uint64 value2 = op2->__anon1.ui64;
10387 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 >= value2));
10390 exp->expType = op1->type;
10392 op1->type->refCount++;
10397 static unsigned int ShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10399 short value2 = op2->__anon1.s;
10402 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s >= value2));
10405 exp->expType = op1->type;
10407 op1->type->refCount++;
10412 static unsigned int UShortGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10414 unsigned short value2 = op2->__anon1.us;
10417 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us >= value2));
10420 exp->expType = op1->type;
10422 op1->type->refCount++;
10427 static unsigned int CharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10429 char value2 = op2->__anon1.c;
10432 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c >= value2));
10435 exp->expType = op1->type;
10437 op1->type->refCount++;
10442 static unsigned int UCharGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10444 unsigned char value2 = op2->__anon1.uc;
10447 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc >= value2));
10450 exp->expType = op1->type;
10452 op1->type->refCount++;
10457 static unsigned int FloatGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10459 float value2 = op2->__anon1.f;
10462 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f >= value2));
10465 exp->expType = op1->type;
10467 op1->type->refCount++;
10472 static unsigned int DoubleGrtEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10474 double value2 = op2->__anon1.d;
10477 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d >= value2));
10480 exp->expType = op1->type;
10482 op1->type->refCount++;
10487 static unsigned int IntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10489 int value2 = op2->__anon1.i;
10492 exp->__anon1.__anon2.string = PrintInt((int)(op1->__anon1.i <= value2));
10495 exp->expType = op1->type;
10497 op1->type->refCount++;
10502 static unsigned int UIntSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10504 unsigned int value2 = op2->__anon1.ui;
10507 exp->__anon1.__anon2.string = PrintUInt((unsigned int)(op1->__anon1.ui <= value2));
10510 exp->expType = op1->type;
10512 op1->type->refCount++;
10517 static unsigned int Int64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10519 long long value2 = op2->__anon1.i64;
10522 exp->__anon1.__anon2.string = PrintInt64((long long)(op1->__anon1.i64 <= value2));
10525 exp->expType = op1->type;
10527 op1->type->refCount++;
10532 static unsigned int UInt64SmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10534 uint64 value2 = op2->__anon1.ui64;
10537 exp->__anon1.__anon2.string = PrintUInt64((uint64)(op1->__anon1.ui64 <= value2));
10540 exp->expType = op1->type;
10542 op1->type->refCount++;
10547 static unsigned int ShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10549 short value2 = op2->__anon1.s;
10552 exp->__anon1.__anon2.string = PrintShort((short)(op1->__anon1.s <= value2));
10555 exp->expType = op1->type;
10557 op1->type->refCount++;
10562 static unsigned int UShortSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10564 unsigned short value2 = op2->__anon1.us;
10567 exp->__anon1.__anon2.string = PrintUShort((unsigned short)(op1->__anon1.us <= value2));
10570 exp->expType = op1->type;
10572 op1->type->refCount++;
10577 static unsigned int CharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10579 char value2 = op2->__anon1.c;
10582 exp->__anon1.__anon2.string = PrintChar((char)(op1->__anon1.c <= value2));
10585 exp->expType = op1->type;
10587 op1->type->refCount++;
10592 static unsigned int UCharSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10594 unsigned char value2 = op2->__anon1.uc;
10597 exp->__anon1.__anon2.string = PrintUChar((unsigned char)(op1->__anon1.uc <= value2));
10600 exp->expType = op1->type;
10602 op1->type->refCount++;
10607 static unsigned int FloatSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10609 float value2 = op2->__anon1.f;
10612 exp->__anon1.__anon2.string = PrintFloat((float)(op1->__anon1.f <= value2));
10615 exp->expType = op1->type;
10617 op1->type->refCount++;
10622 static unsigned int DoubleSmaEqu(struct Expression * exp, struct Operand * op1, struct Operand * op2)
10624 double value2 = op2->__anon1.d;
10627 exp->__anon1.__anon2.string = PrintDouble((double)(op1->__anon1.d <= value2));
10630 exp->expType = op1->type;
10632 op1->type->refCount++;
10637 static unsigned int IntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10640 exp->__anon1.__anon2.string = PrintInt(op1->__anon1.i ? op2->__anon1.i : op3->__anon1.i);
10643 exp->expType = op1->type;
10645 op1->type->refCount++;
10650 static unsigned int UIntCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10653 exp->__anon1.__anon2.string = PrintUInt(op1->__anon1.ui ? op2->__anon1.ui : op3->__anon1.ui);
10656 exp->expType = op1->type;
10658 op1->type->refCount++;
10663 static unsigned int Int64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10666 exp->__anon1.__anon2.string = PrintInt64(op1->__anon1.i64 ? op2->__anon1.i64 : op3->__anon1.i64);
10669 exp->expType = op1->type;
10671 op1->type->refCount++;
10676 static unsigned int UInt64Cond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10679 exp->__anon1.__anon2.string = PrintUInt64(op1->__anon1.ui64 ? op2->__anon1.ui64 : op3->__anon1.ui64);
10682 exp->expType = op1->type;
10684 op1->type->refCount++;
10689 static unsigned int ShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10692 exp->__anon1.__anon2.string = PrintShort(op1->__anon1.s ? op2->__anon1.s : op3->__anon1.s);
10695 exp->expType = op1->type;
10697 op1->type->refCount++;
10702 static unsigned int UShortCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10705 exp->__anon1.__anon2.string = PrintUShort(op1->__anon1.us ? op2->__anon1.us : op3->__anon1.us);
10708 exp->expType = op1->type;
10710 op1->type->refCount++;
10715 static unsigned int CharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10718 exp->__anon1.__anon2.string = PrintChar(op1->__anon1.c ? op2->__anon1.c : op3->__anon1.c);
10721 exp->expType = op1->type;
10723 op1->type->refCount++;
10728 static unsigned int UCharCond(struct Expression * exp, struct Operand * op1, struct Operand * op2, struct Operand * op3)
10731 exp->__anon1.__anon2.string = PrintUChar(op1->__anon1.uc ? op2->__anon1.uc : op3->__anon1.uc);
10734 exp->expType = op1->type;
10736 op1->type->refCount++;
10741 struct OpTable intOps =
10743 (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)
10746 struct OpTable uintOps =
10748 (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)
10751 struct OpTable int64Ops =
10753 (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)
10756 struct OpTable uint64Ops =
10758 (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)
10761 struct OpTable shortOps =
10763 (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)
10766 struct OpTable ushortOps =
10768 (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)
10771 struct OpTable floatOps =
10773 (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)
10776 struct OpTable doubleOps =
10778 (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)
10781 struct OpTable charOps =
10783 (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)
10786 struct OpTable ucharOps =
10788 (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)
10791 void ReadString(char * output, char * string)
10793 int len = strlen(string);
10795 unsigned int quoted = 0, escaped = 0;
10797 for(c = 0; c < len; c++)
10799 char ch = string[c];
10857 int UnescapeString(char * d, char * s, int len)
10862 while(j < len && (ch = s[j]))
10867 switch((ch = s[++j]))
10913 char * OffsetEscapedString(char * s, int len, int offset)
10918 while(j < len && k < offset && (ch = s[j]))
10924 return (k == offset) ? s + j : (((void *)0));
10927 extern long long __ecereNameSpace__ecere__com___strtoi64(const char * string, const char * * endString, int base);
10929 extern uint64 __ecereNameSpace__ecere__com___strtoui64(const char * string, const char * * endString, int base);
10931 extern double strtod(const char * , char * * );
10933 extern float (* __ecereMethod_float_inf)(void);
10935 extern float (* __ecereMethod_float_nan)(void);
10937 extern double (* __ecereMethod_double_inf)(void);
10939 extern double (* __ecereMethod_double_nan)(void);
10941 struct Operand GetOperand(struct Expression * exp)
10943 struct Operand op =
10950 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
10953 struct Type * type = exp->expType;
10957 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))
10959 if(!type->__anon1._class->__anon1.registered->dataType)
10960 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
10961 type = type->__anon1._class->__anon1.registered->dataType;
10963 if(exp->type == 3 && op.kind == 13)
10965 op.__anon1.ui64 = (uint64)(uintptr_t)exp->__anon1.__anon2.string;
10967 op.ops = uint64Ops;
10969 else if(exp->isConstant && exp->type == 2)
10971 op.kind = type->kind;
10978 if(exp->__anon1.__anon1.constant[0] == '\'')
10980 op.__anon1.c = exp->__anon1.__anon1.constant[1];
10983 else if(type->isSigned)
10985 op.__anon1.c = (char)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10990 op.__anon1.uc = (unsigned char)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
10998 op.__anon1.s = (short)strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11003 op.__anon1.us = (unsigned short)strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11004 op.ops = ushortOps;
11011 op.__anon1.i = strtol(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11016 op.__anon1.ui = strtoul(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11024 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11029 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11030 op.ops = uint64Ops;
11037 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11042 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11043 op.ops = uint64Ops;
11050 op.__anon1.i64 = __ecereNameSpace__ecere__com___strtoi64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11055 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11056 op.ops = uint64Ops;
11061 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11062 op.__anon1.f = __ecereMethod_float_inf();
11063 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11064 op.__anon1.f = -__ecereMethod_float_inf();
11065 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11066 op.__anon1.f = __ecereMethod_float_nan();
11067 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11068 op.__anon1.f = -__ecereMethod_float_nan();
11070 op.__anon1.f = (float)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11074 if(!strcmp(exp->__anon1.__anon1.constant, "inf"))
11075 op.__anon1.d = __ecereMethod_double_inf();
11076 else if(!strcmp(exp->__anon1.__anon1.constant, "-inf"))
11077 op.__anon1.d = -__ecereMethod_double_inf();
11078 else if(!strcmp(exp->__anon1.__anon1.constant, "nan"))
11079 op.__anon1.d = __ecereMethod_double_nan();
11080 else if(!strcmp(exp->__anon1.__anon1.constant, "-nan"))
11081 op.__anon1.d = -__ecereMethod_double_nan();
11083 op.__anon1.d = (double)strtod(exp->__anon1.__anon1.constant, (((void *)0)));
11084 op.ops = doubleOps;
11089 op.__anon1.ui64 = __ecereNameSpace__ecere__com___strtoui64(exp->__anon1.__anon1.constant, (((void *)0)), 0);
11091 op.ops = uint64Ops;
11099 static long long GetEnumValue(struct __ecereNameSpace__ecere__com__Class * _class, void * ptr)
11103 switch(_class->typeSize)
11106 if(!strcmp(_class->dataTypeString, "uint64"))
11107 v = (long long)*(uint64 *)ptr;
11109 v = *(long long *)ptr;
11112 if(!strcmp(_class->dataTypeString, "uint"))
11113 v = (long long)*(unsigned int *)ptr;
11115 v = (long long)*(int *)ptr;
11118 if(!strcmp(_class->dataTypeString, "uint16"))
11119 v = (long long)*(unsigned short *)ptr;
11121 v = (long long)*(short *)ptr;
11124 if(!strcmp(_class->dataTypeString, "byte"))
11125 v = (long long)*(unsigned char *)ptr;
11127 v = (long long)*(char *)ptr;
11133 int __ecereVMethodID_class_OnGetString;
11135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_int;
11137 static __attribute__((unused)) void UnusedFunction()
11141 ((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);
11144 extern int __ecereVMethodID_class_OnGetString;
11146 static void PopulateInstanceProcessMember(struct Instantiation * inst, struct __ecereNameSpace__ecere__sys__OldList * memberList, struct __ecereNameSpace__ecere__com__DataMember * parentDataMember, unsigned int offset)
11148 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11150 for(dataMember = parentDataMember->members.first; dataMember; dataMember = dataMember->next)
11152 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11153 PopulateInstanceProcessMember(inst, memberList, dataMember, offset + dataMember->offset);
11156 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11157 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11158 struct Type * type;
11159 void * ptr = inst->data + dataMember->offset + offset;
11160 char * result = (((void *)0));
11162 exp->loc = member->loc = inst->loc;
11163 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11164 if(!dataMember->dataType)
11165 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11166 type = dataMember->dataType;
11167 if(type->kind == 8)
11169 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11171 if(_class->type == 4)
11173 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11177 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11178 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11180 for(item = e->values.first; item; item = item->next)
11182 if(item->data == GetEnumValue(_class, ptr))
11184 result = item->name;
11190 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11192 exp->destType = MkClassType(_class->fullName);
11193 ProcessExpressionType(exp);
11197 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11199 if(!_class->dataType)
11200 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11201 type = _class->dataType;
11210 FreeExpContents(exp);
11211 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11217 FreeExpContents(exp);
11218 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11224 FreeExpContents(exp);
11225 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11231 FreeExpContents(exp);
11232 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11238 FreeExpContents(exp);
11239 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11245 FreeExpContents(exp);
11246 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11251 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11254 ListAdd(memberList, member);
11256 if(parentDataMember->type == 1)
11261 extern struct MembersInit * MkMembersInitList(struct __ecereNameSpace__ecere__sys__OldList * dataMembers);
11263 void PopulateInstance(struct Instantiation * inst)
11265 struct Symbol * classSym = inst->_class->__anon1.__anon1.symbol;
11266 struct __ecereNameSpace__ecere__com__Class * _class = classSym->__anon1.registered;
11267 struct __ecereNameSpace__ecere__com__DataMember * dataMember;
11268 struct __ecereNameSpace__ecere__sys__OldList * memberList = MkList();
11271 inst->members = MkListOne(MkMembersInitList(memberList));
11273 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*inst->members), MkMembersInitList(memberList));
11274 for(dataMember = _class->membersAndProperties.first; dataMember; dataMember = dataMember->next)
11276 if(!dataMember->isProperty)
11278 if(!dataMember->name && (dataMember->type == 2 || dataMember->type == 1))
11279 PopulateInstanceProcessMember(inst, memberList, dataMember, dataMember->offset);
11282 struct Expression * exp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
11283 struct MemberInit * member = MkMemberInit(MkListOne(MkIdentifier(dataMember->name)), MkInitializerAssignment(exp));
11284 struct Type * type;
11285 void * ptr = inst->data + dataMember->offset;
11286 char * result = (((void *)0));
11288 exp->loc = member->loc = inst->loc;
11289 ((struct Identifier *)(*member->identifiers).first)->loc = inst->loc;
11290 if(!dataMember->dataType)
11291 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11292 type = dataMember->dataType;
11293 if(type->kind == 8)
11295 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11297 if(_class->type == 4)
11299 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
11303 struct __ecereNameSpace__ecere__com__EnumClassData * e = (_class ? ((void *)(((char *)_class->data) + enumClass->offsetClass)) : (((void *)0)));
11304 struct __ecereNameSpace__ecere__sys__NamedLink64 * item;
11306 for(item = e->values.first; item; item = item->next)
11308 if(item->data == GetEnumValue(_class, ptr))
11310 result = item->name;
11317 exp->__anon1.__anon1.identifier = MkIdentifier(result);
11319 exp->destType = MkClassType(_class->fullName);
11320 ProcessExpressionType(exp);
11323 if(_class->type == 4 || _class->type == 3 || _class->type == 2)
11325 if(!_class->dataType)
11326 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11327 type = _class->dataType;
11336 exp->__anon1.__anon1.constant = PrintFloat(*(float *)ptr);
11342 exp->__anon1.__anon1.constant = PrintDouble(*(double *)ptr);
11348 exp->__anon1.__anon1.constant = PrintInt(*(int *)ptr);
11354 exp->__anon1.__anon1.constant = PrintInt64(*(long long *)ptr);
11360 exp->__anon1.__anon1.constant = PrintInt64((long long)*(intptr_t *)ptr);
11365 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unhandled type populating instance\n", (((void *)0))));
11368 ListAdd(memberList, member);
11374 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);
11376 extern void FreeInstance(struct Instantiation * inst);
11378 void ComputeInstantiation(struct Expression * exp)
11380 struct Instantiation * inst = exp->__anon1.instance;
11381 struct MembersInit * members;
11382 struct Symbol * classSym = inst->_class ? inst->_class->__anon1.__anon1.symbol : (((void *)0));
11383 struct __ecereNameSpace__ecere__com__Class * _class = classSym ? classSym->__anon1.registered : (((void *)0));
11384 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
11385 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
11386 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
11387 int subMemberStackPos = 0;
11390 if(_class && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11394 if(_class->type == 0 || _class->type == 5)
11396 inst->data = (unsigned char *)__ecereNameSpace__ecere__com__eInstance_New(_class);
11397 if(_class->type == 0)
11398 ((struct __ecereNameSpace__ecere__com__Instance *)(char *)((struct __ecereNameSpace__ecere__com__Instance *)inst->data))->_refCount++;
11401 inst->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
11405 for(members = (*inst->members).first; members; members = members->next)
11407 switch(members->type)
11411 if(members->__anon1.dataMembers)
11413 struct MemberInit * member;
11415 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
11417 struct Identifier * ident = member->identifiers ? (*member->identifiers).first : (((void *)0));
11418 unsigned int found = 0;
11419 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
11420 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (((void *)0));
11421 unsigned int dataMemberOffset;
11425 __ecereNameSpace__ecere__com__eClass_FindNextMember(_class, &curClass, &curMember, subMemberStack, &subMemberStackPos);
11428 if(curMember->isProperty)
11429 prop = (struct __ecereNameSpace__ecere__com__Property *)curMember;
11432 dataMember = curMember;
11433 __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, dataMember->name, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11434 if(_class->type == 0)
11435 dataMemberOffset += _class->base->structSize;
11442 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, ident->string, privateModule);
11446 if(prop->memberAccess == 1)
11448 curMember = (struct __ecereNameSpace__ecere__com__DataMember *)prop;
11449 curClass = prop->_class;
11454 struct __ecereNameSpace__ecere__com__DataMember * _subMemberStack[256];
11455 int _subMemberStackPos = 0;
11457 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(_class, ident->string, &dataMemberOffset, privateModule, _subMemberStack, &_subMemberStackPos);
11461 if(dataMember->memberAccess == 1)
11463 curMember = dataMember;
11464 curClass = dataMember->_class;
11465 memcpy(subMemberStack, _subMemberStack, sizeof(struct __ecereNameSpace__ecere__com__DataMember *) * _subMemberStackPos);
11466 subMemberStackPos = _subMemberStackPos;
11471 if(found && member->initializer && member->initializer->type == 0)
11473 struct Expression * value = member->initializer->__anon1.exp;
11474 struct Type * type = (((void *)0));
11475 unsigned int deepMember = 0;
11479 type = prop->dataType;
11481 else if(dataMember)
11483 if(!dataMember->dataType)
11484 dataMember->dataType = ProcessTypeString(dataMember->dataTypeString, 0);
11485 type = dataMember->dataType;
11487 if(ident && ident->next)
11490 for(ident = ident->next; ident && type; ident = ident->next)
11492 if(type->kind == 8)
11494 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(type->__anon1._class->__anon1.registered, ident->string, privateModule);
11496 type = prop->dataType;
11499 dataMember = __ecereNameSpace__ecere__com__eClass_FindDataMemberAndOffset(type->__anon1._class->__anon1.registered, ident->string, &dataMemberOffset, privateModule, (((void *)0)), (((void *)0)));
11501 type = dataMember->dataType;
11504 else if(type->kind == 9 || type->kind == 10)
11506 struct Type * memberType;
11508 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
11510 if(!strcmp(memberType->name, ident->string))
11521 FreeType(value->destType);
11522 value->destType = type;
11525 ComputeExpression(value);
11527 if(!deepMember && type && value && (_class->type == 1 || _class->type == 0 || _class->type == 5))
11529 if(type->kind == 8)
11531 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11533 if(_class->type == 2 || _class->type == 3 || _class->type == 4)
11535 if(!_class->dataType)
11536 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11537 type = _class->dataType;
11542 void * ptr = inst->data + dataMemberOffset;
11544 if(value->type == 2)
11550 GetInt(value, (int *)ptr);
11555 GetInt64(value, (long long *)ptr);
11560 GetIntPtr(value, (intptr_t *)ptr);
11565 GetIntSize(value, (ssize_t *)ptr);
11570 GetFloat(value, (float *)ptr);
11575 GetDouble(value, (double *)ptr);
11580 else if(value->type == 1)
11582 if(type->kind == 8)
11584 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11586 if(_class->type == 1)
11588 ComputeTypeSize(type);
11589 if(value->__anon1.instance->data)
11590 memcpy(ptr, value->__anon1.instance->data, type->size);
11595 else if(prop && prop->Set != (void *)(intptr_t)1)
11597 if(value->type == 1 && value->__anon1.instance->data)
11599 if(type->kind == 8)
11601 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11603 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)))
11605 void (* Set)(void *, void *) = (void *)prop->Set;
11607 Set(inst->data, value->__anon1.instance->data);
11608 PopulateInstance(inst);
11612 else if(value->type == 2)
11618 void (* Set)(void *, double) = (void *)prop->Set;
11620 Set(inst->data, strtod(value->__anon1.__anon1.constant, (((void *)0))));
11625 void (* Set)(void *, float) = (void *)prop->Set;
11627 Set(inst->data, (float)(strtod(value->__anon1.__anon1.constant, (((void *)0)))));
11632 void (* Set)(void *, int) = (void *)prop->Set;
11634 Set(inst->data, strtol(value->__anon1.__anon1.constant, (((void *)0)), 0));
11639 void (* Set)(void *, long long) = (void *)prop->Set;
11641 Set(inst->data, __ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11646 void (* Set)(void *, intptr_t) = (void *)prop->Set;
11648 Set(inst->data, (intptr_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11653 void (* Set)(void *, ssize_t) = (void *)prop->Set;
11655 Set(inst->data, (ssize_t)__ecereNameSpace__ecere__com___strtoi64(value->__anon1.__anon1.constant, (((void *)0)), 0));
11660 else if(value->type == 3)
11664 ReadString(temp, value->__anon1.__anon2.string);
11665 ((void (*)(void *, void *))(void *)prop->Set)(inst->data, temp);
11669 else if(!deepMember && type && _class->type == 3)
11673 if(value->type == 2)
11675 if(type->kind == 8)
11677 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
11679 if(_class->type == 3)
11681 if(!_class->dataType)
11682 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
11683 type = _class->dataType;
11691 float (* Set)(float) = (void *)prop->Set;
11693 GetFloat(member->initializer->__anon1.exp, &fValue);
11694 exp->__anon1.__anon1.constant = PrintFloat(Set(fValue));
11701 double (* Set)(double) = (void *)prop->Set;
11703 GetDouble(member->initializer->__anon1.exp, &dValue);
11704 exp->__anon1.__anon1.constant = PrintDouble(Set(dValue));
11712 else if(!deepMember && type && _class->type == 2)
11716 if(value->type == 1 && value->__anon1.instance->data)
11718 unsigned int (* Set)(void *) = (void *)prop->Set;
11720 bits = Set(value->__anon1.instance->data);
11722 else if(value->type == 2)
11726 else if(dataMember)
11728 struct __ecereNameSpace__ecere__com__BitMember * bitMember = (struct __ecereNameSpace__ecere__com__BitMember *)dataMember;
11729 struct Type * type;
11732 bits = (bits & ~bitMember->mask);
11733 if(!bitMember->dataType)
11734 bitMember->dataType = ProcessTypeString(bitMember->dataTypeString, 0);
11735 type = bitMember->dataType;
11736 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
11738 if(!type->__anon1._class->__anon1.registered->dataType)
11739 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
11740 type = type->__anon1._class->__anon1.registered->dataType;
11749 type->isSigned ? GetChar(value, (char *)&v) : GetUChar(value, &v);
11757 type->isSigned ? GetShort(value, (short *)&v) : GetUShort(value, &v);
11766 type->isSigned ? GetInt(value, (int *)&v) : GetUInt(value, &v);
11774 type->isSigned ? GetInt64(value, (long long *)&v) : GetUInt64(value, &v);
11782 type->isSigned ? GetIntPtr(value, (intptr_t *)&v) : GetUIntPtr(value, &v);
11790 type->isSigned ? GetIntSize(value, (ssize_t *)&v) : GetUIntSize(value, &v);
11795 bits |= part << bitMember->pos;
11801 if(_class && _class->type == 3)
11803 ComputeExpression(member->initializer->__anon1.exp);
11804 exp->__anon1.__anon1.constant = member->initializer->__anon1.exp->__anon1.__anon1.constant;
11806 member->initializer->__anon1.exp->__anon1.__anon1.constant = (((void *)0));
11816 if(_class && _class->type == 2)
11818 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
11823 FreeInstance(inst);
11827 static unsigned int Promote(struct Operand * op, int kind, unsigned int isSigned)
11829 unsigned int result = 0;
11834 if(op->kind == 1 || op->kind == 15 || op->kind == 24)
11835 result = isSigned ? GetOpShort(op, &op->__anon1.s) : GetOpUShort(op, &op->__anon1.us);
11839 if(op->kind == 1 || op->kind == 2 || op->kind == 15 || op->kind == 24)
11840 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11843 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)
11844 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11847 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)
11848 result = GetOpFloat(op, &op->__anon1.f);
11851 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)
11852 result = GetOpDouble(op, &op->__anon1.d);
11855 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)
11856 result = GetOpUInt64(op, &op->__anon1.ui64);
11859 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)
11860 result = isSigned ? GetOpInt(op, &op->__anon1.i) : GetOpUInt(op, &op->__anon1.ui);
11863 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11864 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11867 if(op->kind == 1 || op->kind == 2 || op->kind == 3 || op->kind == 5 || op->kind == 15 || op->kind == 24)
11868 result = isSigned ? GetOpInt64(op, &op->__anon1.i64) : GetOpUInt64(op, &op->__anon1.ui64);
11874 void CallOperator(struct Expression * exp, struct Expression * exp1, struct Expression * exp2, struct Operand * op1, struct Operand * op2)
11876 if(exp->__anon1.op.op == SIZEOF)
11878 FreeExpContents(exp);
11880 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(op1->type));
11884 if(!exp->__anon1.op.exp1)
11886 switch(exp->__anon1.op.op)
11890 struct Expression * exp2 = exp->__anon1.op.exp2;
11892 exp->__anon1.op.exp2 = (((void *)0));
11893 FreeExpContents(exp);
11894 FreeType(exp->expType);
11895 FreeType(exp->destType);
11897 ((exp2 ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)exp2) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(exp2)) : 0), exp2 = 0);
11903 FreeExpContents(exp);
11904 op1->ops.Neg(exp, op1);
11908 if(op1->ops.BitNot)
11910 FreeExpContents(exp);
11911 op1->ops.BitNot(exp, op1);
11917 FreeExpContents(exp);
11918 op1->ops.Not(exp, op1);
11925 if(op1 && op2 && op1->type && op2->type && op1->kind != op2->kind)
11927 if(Promote(op2, op1->kind, op1->type->isSigned))
11928 op2->kind = op1->kind, op2->ops = op1->ops;
11929 else if(Promote(op1, op2->kind, op2->type->isSigned))
11930 op1->kind = op2->kind, op1->ops = op2->ops;
11932 switch(exp->__anon1.op.op)
11937 FreeExpContents(exp);
11938 op1->ops.Add(exp, op1, op2);
11944 FreeExpContents(exp);
11945 op1->ops.Sub(exp, op1, op2);
11951 FreeExpContents(exp);
11952 op1->ops.Mul(exp, op1, op2);
11958 FreeExpContents(exp);
11959 op1->ops.Div(exp, op1, op2);
11965 FreeExpContents(exp);
11966 op1->ops.Mod(exp, op1, op2);
11970 if(exp->__anon1.op.exp2)
11972 if(op1->ops.BitAnd)
11974 FreeExpContents(exp);
11975 op1->ops.BitAnd(exp, op1, op2);
11982 FreeExpContents(exp);
11983 op1->ops.BitOr(exp, op1, op2);
11987 if(op1->ops.BitXor)
11989 FreeExpContents(exp);
11990 op1->ops.BitXor(exp, op1, op2);
11994 if(op1->ops.LShift)
11996 FreeExpContents(exp);
11997 op1->ops.LShift(exp, op1, op2);
12001 if(op1->ops.RShift)
12003 FreeExpContents(exp);
12004 op1->ops.RShift(exp, op1, op2);
12010 FreeExpContents(exp);
12011 op1->ops.Equ(exp, op1, op2);
12017 FreeExpContents(exp);
12018 op1->ops.Nqu(exp, op1, op2);
12024 FreeExpContents(exp);
12025 op1->ops.And(exp, op1, op2);
12031 FreeExpContents(exp);
12032 op1->ops.Or(exp, op1, op2);
12038 FreeExpContents(exp);
12039 op1->ops.Grt(exp, op1, op2);
12045 FreeExpContents(exp);
12046 op1->ops.Sma(exp, op1, op2);
12050 if(op1->ops.GrtEqu)
12052 FreeExpContents(exp);
12053 op1->ops.GrtEqu(exp, op1, op2);
12057 if(op1->ops.SmaEqu)
12059 FreeExpContents(exp);
12060 op1->ops.SmaEqu(exp, op1, op2);
12068 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName);
12070 extern struct Expression * MkExpIdentifier(struct Identifier * id);
12072 void ComputeExpression(struct Expression * exp)
12078 ComputeInstantiation(exp);
12083 struct Expression * exp1, * exp2 = (((void *)0));
12084 struct Operand op1 =
12091 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
12094 struct Operand op2 =
12101 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
12105 if(exp->__anon1.op.exp2)
12107 struct Expression * e = exp->__anon1.op.exp2;
12109 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
12111 if(e->type == 5 || e->type == 32 || e->type == 23)
12114 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
12116 e = (*e->__anon1.list).last;
12119 if(exp->__anon1.op.op == 261 && e && e->expType)
12121 if(e->type == 3 && e->__anon1.__anon2.string)
12123 char * string = e->__anon1.__anon2.string;
12124 int len = strlen(string);
12125 char * tmp = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (len - 2 + 1));
12127 len = UnescapeString(tmp, string + 1, len - 2);
12128 (__ecereNameSpace__ecere__com__eSystem_Delete(tmp), tmp = 0);
12129 FreeExpContents(exp);
12131 exp->__anon1.__anon1.constant = PrintUInt(len + 1);
12135 struct Type * type = e->expType;
12138 FreeExpContents(exp);
12140 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12146 ComputeExpression(exp->__anon1.op.exp2);
12148 if(exp->__anon1.op.exp1)
12150 ComputeExpression(exp->__anon1.op.exp1);
12151 exp1 = exp->__anon1.op.exp1;
12152 exp2 = exp->__anon1.op.exp2;
12153 op1 = GetOperand(exp1);
12155 op1.type->refCount++;
12158 op2 = GetOperand(exp2);
12160 op2.type->refCount++;
12165 exp1 = exp->__anon1.op.exp2;
12166 op1 = GetOperand(exp1);
12168 op1.type->refCount++;
12170 CallOperator(exp, exp1, exp2, &op1, &op2);
12172 FreeType(op1.type);
12174 FreeType(op2.type);
12180 struct Expression * e, * n;
12182 for(e = (*exp->__anon1.list).first; e; e = n)
12187 struct __ecereNameSpace__ecere__sys__OldList * list = exp->__anon1.list;
12188 struct Expression * prev = exp->prev;
12189 struct Expression * next = exp->next;
12191 ComputeExpression(e);
12192 FreeType(exp->expType);
12193 FreeType(exp->destType);
12197 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
12198 (__ecereNameSpace__ecere__com__eSystem_Delete(list), list = 0);
12209 struct Expression * memberExp = exp->__anon1.member.exp;
12210 struct Identifier * memberID = exp->__anon1.member.member;
12211 struct Type * type;
12213 ComputeExpression(exp->__anon1.member.exp);
12214 type = exp->__anon1.member.exp->expType;
12217 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)));
12218 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
12219 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
12220 struct __ecereNameSpace__ecere__com__Class * convertTo = (((void *)0));
12222 if(type->kind == 19 && exp->__anon1.member.exp->type == 24)
12223 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
12227 struct Symbol * classSym;
12230 PrintTypeNoConst(type, string, 0, 1);
12231 classSym = FindClass(string);
12232 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12234 if(exp->__anon1.member.member)
12236 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, exp->__anon1.member.member->string, privateModule);
12238 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, exp->__anon1.member.member->string, privateModule, (((void *)0)), (((void *)0)));
12240 if(!prop && !member && _class && exp->__anon1.member.member)
12242 struct Symbol * classSym = FindClass(exp->__anon1.member.member->string);
12244 convertTo = _class;
12245 _class = classSym ? classSym->__anon1.registered : (((void *)0));
12246 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, convertTo->fullName, privateModule);
12252 struct Type * type = prop->dataType;
12254 if(_class->type == 3)
12256 if(type->kind == 8)
12258 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12260 if(_class->type == 3)
12262 if(!_class->dataType)
12263 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12264 type = _class->dataType;
12272 float (* Get)(float) = (void *)prop->Get;
12274 GetFloat(exp->__anon1.member.exp, &value);
12275 exp->__anon1.__anon1.constant = PrintFloat(Get ? Get(value) : value);
12282 double (* Get)(double);
12284 GetDouble(exp->__anon1.member.exp, &value);
12286 Get = (void *)prop->Set;
12288 Get = (void *)prop->Get;
12289 exp->__anon1.__anon1.constant = PrintDouble(Get ? Get(value) : value);
12299 struct Expression * value = exp->__anon1.member.exp;
12300 struct Type * type;
12302 if(!prop->dataType)
12303 ProcessPropertyType(prop);
12304 type = prop->dataType;
12308 else if(_class->type == 1)
12314 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12316 if(propertyClass->type == 1 && value->type == 1)
12318 void (* Set)(void *, void *) = (void *)prop->Set;
12320 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12321 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12322 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12323 exp->__anon1.instance->loc = exp->loc;
12325 Set(exp->__anon1.instance->data, value->__anon1.instance->data);
12326 PopulateInstance(exp->__anon1.instance);
12333 void (* Set)(void *, int) = (void *)prop->Set;
12335 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12336 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12337 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12338 exp->__anon1.instance->loc = exp->loc;
12340 GetInt(value, &intValue);
12341 Set(exp->__anon1.instance->data, intValue);
12342 PopulateInstance(exp->__anon1.instance);
12347 long long intValue;
12348 void (* Set)(void *, long long) = (void *)prop->Set;
12350 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12351 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12352 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12353 exp->__anon1.instance->loc = exp->loc;
12355 GetInt64(value, &intValue);
12356 Set(exp->__anon1.instance->data, intValue);
12357 PopulateInstance(exp->__anon1.instance);
12363 void (* Set)(void *, intptr_t) = (void *)prop->Set;
12365 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12366 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12367 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12368 exp->__anon1.instance->loc = exp->loc;
12370 GetIntPtr(value, &intValue);
12371 Set(exp->__anon1.instance->data, intValue);
12372 PopulateInstance(exp->__anon1.instance);
12378 void (* Set)(void *, ssize_t) = (void *)prop->Set;
12380 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12381 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12382 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12383 exp->__anon1.instance->loc = exp->loc;
12385 GetIntSize(value, &intValue);
12386 Set(exp->__anon1.instance->data, intValue);
12387 PopulateInstance(exp->__anon1.instance);
12393 void (* Set)(void *, float) = (void *)prop->Set;
12395 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12396 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12397 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12398 exp->__anon1.instance->loc = exp->loc;
12400 GetFloat(value, &floatValue);
12401 Set(exp->__anon1.instance->data, floatValue);
12402 PopulateInstance(exp->__anon1.instance);
12407 double doubleValue;
12408 void (* Set)(void *, double) = (void *)prop->Set;
12410 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12411 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12412 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12413 exp->__anon1.instance->loc = exp->loc;
12415 GetDouble(value, &doubleValue);
12416 Set(exp->__anon1.instance->data, doubleValue);
12417 PopulateInstance(exp->__anon1.instance);
12422 else if(_class->type == 2)
12428 struct __ecereNameSpace__ecere__com__Class * propertyClass = type->__anon1._class->__anon1.registered;
12430 if(propertyClass->type == 1 && value->__anon1.instance->data)
12432 unsigned int (* Set)(void *) = (void *)prop->Set;
12433 unsigned int bits = Set(value->__anon1.instance->data);
12435 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12439 else if(_class->type == 2)
12441 unsigned int value;
12442 unsigned int (* Set)(unsigned int) = (void *)prop->Set;
12445 GetUInt(exp->__anon1.member.exp, &value);
12447 exp->__anon1.__anon1.constant = PrintHexUInt(bits);
12456 if(_class->type == 2)
12458 unsigned int value;
12460 GetUInt(exp->__anon1.member.exp, &value);
12465 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12467 if(_class->type == 1)
12469 void (* Get)(unsigned int, void *) = (void *)prop->Get;
12471 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12472 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12473 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12474 exp->__anon1.instance->loc = exp->loc;
12476 Get(value, exp->__anon1.instance->data);
12477 PopulateInstance(exp->__anon1.instance);
12479 else if(_class->type == 2)
12481 unsigned int (* Get)(unsigned int) = (void *)prop->Get;
12482 uint64 bits = Get(value);
12484 exp->__anon1.__anon1.constant = PrintHexUInt64(bits);
12491 else if(_class->type == 1)
12493 unsigned char * value = (exp->__anon1.member.exp->type == 1) ? exp->__anon1.member.exp->__anon1.instance->data : (((void *)0));
12499 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12501 if(_class->type == 1 && value)
12503 void (* Get)(void *, void *) = (void *)prop->Get;
12505 exp->__anon1.instance = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Instantiation);
12506 exp->__anon1.instance->data = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(unsigned char) * (_class->structSize));
12507 exp->__anon1.instance->_class = MkSpecifierName(_class->fullName);
12508 exp->__anon1.instance->loc = exp->loc;
12510 Get(value, exp->__anon1.instance->data);
12511 PopulateInstance(exp->__anon1.instance);
12522 exp->isConstant = 0;
12531 FreeExpression(memberExp);
12532 FreeIdentifier(memberID);
12538 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
12540 FreeExpContents(exp);
12541 exp->__anon1.__anon1.constant = PrintUInt(ComputeTypeSize(type));
12548 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
12550 if(classSym && classSym->__anon1.registered)
12552 if(classSym->__anon1.registered->fixed)
12554 FreeSpecifier(exp->__anon1._class);
12555 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
12560 char className[1024];
12562 strcpy(className, "__ecereClass_");
12563 FullClassNameCat(className, classSym->string, 1);
12564 DeclareClass(classSym, className);
12565 FreeExpContents(exp);
12567 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
12568 exp->__anon1.member.member = MkIdentifier("structSize");
12575 struct Type * type;
12576 struct Expression * e = exp;
12578 if(exp->type == 11)
12580 if(exp->__anon1.cast.exp)
12581 ComputeExpression(exp->__anon1.cast.exp);
12582 e = exp->__anon1.cast.exp;
12584 if(e && exp->expType)
12586 type = exp->expType;
12587 if(type->kind == 8)
12589 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1._class->__anon1.registered;
12591 if(_class && (_class->type == 3 || _class->type == 2))
12593 if(!_class->dataType)
12594 _class->dataType = ProcessTypeString(_class->dataTypeString, 0);
12595 type = _class->dataType;
12604 char value = (char)0;
12606 if(GetChar(e, &value))
12608 FreeExpContents(exp);
12609 exp->__anon1.__anon1.constant = PrintChar(value);
12615 unsigned char value = (unsigned char)0;
12617 if(GetUChar(e, &value))
12619 FreeExpContents(exp);
12620 exp->__anon1.__anon1.constant = PrintUChar(value);
12628 short value = (short)0;
12630 if(GetShort(e, &value))
12632 FreeExpContents(exp);
12633 exp->__anon1.__anon1.constant = PrintShort(value);
12639 unsigned short value = (unsigned short)0;
12641 if(GetUShort(e, &value))
12643 FreeExpContents(exp);
12644 exp->__anon1.__anon1.constant = PrintUShort(value);
12654 if(GetInt(e, &value))
12656 FreeExpContents(exp);
12657 exp->__anon1.__anon1.constant = PrintInt(value);
12663 unsigned int value = 0;
12665 if(GetUInt(e, &value))
12667 FreeExpContents(exp);
12668 exp->__anon1.__anon1.constant = PrintUInt(value);
12676 long long value = 0;
12678 if(GetInt64(e, &value))
12680 FreeExpContents(exp);
12681 exp->__anon1.__anon1.constant = PrintInt64(value);
12689 if(GetUInt64(e, &value))
12691 FreeExpContents(exp);
12692 exp->__anon1.__anon1.constant = PrintUInt64(value);
12700 intptr_t value = 0;
12702 if(GetIntPtr(e, &value))
12704 FreeExpContents(exp);
12705 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12711 uintptr_t value = 0;
12713 if(GetUIntPtr(e, &value))
12715 FreeExpContents(exp);
12716 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12726 if(GetIntSize(e, &value))
12728 FreeExpContents(exp);
12729 exp->__anon1.__anon1.constant = PrintInt64((long long)value);
12737 if(GetUIntSize(e, &value))
12739 FreeExpContents(exp);
12740 exp->__anon1.__anon1.constant = PrintUInt64((uint64)value);
12749 if(GetFloat(e, &value))
12751 FreeExpContents(exp);
12752 exp->__anon1.__anon1.constant = PrintFloat(value);
12761 if(GetDouble(e, &value))
12763 FreeExpContents(exp);
12764 exp->__anon1.__anon1.constant = PrintDouble(value);
12775 struct Operand op1 =
12782 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
12785 struct Operand op2 =
12792 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
12795 struct Operand op3 =
12802 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
12806 if(exp->__anon1.cond.exp)
12807 ComputeExpression((*exp->__anon1.cond.exp).last);
12808 if(exp->__anon1.cond.elseExp)
12809 ComputeExpression(exp->__anon1.cond.elseExp);
12810 if(exp->__anon1.cond.cond)
12811 ComputeExpression(exp->__anon1.cond.cond);
12812 op1 = GetOperand(exp->__anon1.cond.cond);
12814 op1.type->refCount++;
12815 op2 = GetOperand((*exp->__anon1.cond.exp).last);
12817 op2.type->refCount++;
12818 op3 = GetOperand(exp->__anon1.cond.elseExp);
12820 op3.type->refCount++;
12823 FreeExpContents(exp);
12824 op1.ops.Cond(exp, &op1, &op2, &op3);
12827 FreeType(op1.type);
12829 FreeType(op2.type);
12831 FreeType(op3.type);
12837 void ApplyAnyObjectLogic(struct Expression * e);
12839 static unsigned int CheckExpressionType(struct Expression * exp, struct Type * destType, unsigned int skipUnitBla, unsigned int warnConst)
12841 unsigned int result = 1;
12845 struct __ecereNameSpace__ecere__sys__OldList converts =
12849 struct Conversion * convert;
12851 if(destType->kind == 0)
12853 if(!MatchTypeExpression(exp, destType, &converts, skipUnitBla, warnConst))
12857 for(convert = converts.first; convert; convert = convert->next)
12859 unsigned int empty = !(convert->isGet ? (void *)convert->convert->Get : (void *)convert->convert->Set);
12863 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12864 int objectType = exp->expType ? exp->expType->classObjectType : 0;
12867 newExp->prev = (((void *)0));
12868 newExp->next = (((void *)0));
12869 newExp->destType = (((void *)0));
12873 exp->addedThis = 1;
12874 exp->__anon1.member.exp = newExp;
12875 FreeType(exp->__anon1.member.exp->expType);
12876 exp->__anon1.member.exp->expType = MkClassType(convert->convert->_class->fullName);
12877 exp->__anon1.member.exp->expType->classObjectType = objectType;
12878 exp->__anon1.member.member = MkIdentifier(convert->convert->dataTypeString);
12879 exp->__anon1.member.memberType = 1;
12880 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12883 exp->expType->refCount++;
12884 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12890 exp->addedThis = 1;
12891 exp->__anon1.member.exp = newExp;
12892 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)
12894 newExp->byReference = 1;
12896 FreeType(exp->__anon1.member.exp->expType);
12897 exp->__anon1.member.exp->expType = (((void *)0));
12898 if(convert->convert->dataType)
12900 exp->__anon1.member.exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
12901 CopyTypeInto(exp->__anon1.member.exp->expType, convert->convert->dataType);
12902 exp->__anon1.member.exp->expType->refCount = 1;
12903 exp->__anon1.member.exp->expType->classObjectType = objectType;
12904 ApplyAnyObjectLogic(exp->__anon1.member.exp);
12906 exp->__anon1.member.member = MkIdentifier(convert->convert->_class->fullName);
12907 exp->__anon1.member.memberType = 4;
12908 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12910 if(convert->resultType)
12911 convert->resultType->refCount++;
12917 FreeType(exp->expType);
12920 exp->expType = convert->resultType ? convert->resultType : convert->convert->dataType;
12921 if(exp->destType->casted)
12924 exp->expType->refCount++;
12928 exp->expType = convert->resultType ? convert->resultType : MkClassType(convert->convert->_class->fullName);
12929 if(exp->destType->casted)
12931 if(convert->resultType)
12932 convert->resultType->refCount++;
12936 if(exp->isConstant && inCompiler)
12937 ComputeExpression(exp);
12938 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&converts, (void *)(FreeConvert));
12940 if(!result && exp->expType && converts.count)
12942 result = MatchTypes(exp->expType, exp->destType, (((void *)0)), (((void *)0)), (((void *)0)), 1, 1, 0, 0, warnConst);
12944 if(!result && exp->expType && exp->destType)
12946 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))
12953 extern struct Expression * GetNonBracketsExp(struct Expression * exp);
12955 extern struct Statement * MkCompoundStmt(struct __ecereNameSpace__ecere__sys__OldList * declarations, struct __ecereNameSpace__ecere__sys__OldList * statements);
12957 extern struct Statement * MkExpressionStmt(struct __ecereNameSpace__ecere__sys__OldList * expressions);
12959 extern struct Expression * MkExpMember(struct Expression * expression, struct Identifier * member);
12961 unsigned int __ecereProp_Type_Get_isPointerType(struct Type * this);
12963 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_isPointerType;
12965 void CheckTemplateTypes(struct Expression * exp)
12967 struct Expression * nbExp = GetNonBracketsExp(exp);
12969 if(exp->destType && exp->destType->passAsTemplate && exp->expType && exp->expType->kind != 20 && !exp->expType->passAsTemplate && (nbExp == exp || nbExp->type != 11))
12971 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
12972 struct Context * context;
12976 exp->destType->refCount++;
12978 exp->expType->refCount++;
12979 newExp->prev = (((void *)0));
12980 newExp->next = (((void *)0));
12981 switch(exp->expType->kind)
12984 if(exp->destType->classObjectType)
12987 exp->destType->refCount--;
12989 exp->expType->refCount--;
12990 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
12994 struct __ecereNameSpace__ecere__sys__OldList * specs;
12995 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
12996 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
12998 context = PushContext();
12999 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
13000 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
13001 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
13003 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
13004 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")), '=', newExp))));
13005 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")))));
13006 exp->__anon1.compound->__anon1.compound.context = context;
13007 PopContext(context);
13012 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifierName("uint64")), (((void *)0)));
13013 if(__ecereProp_Type_Get_isPointerType(exp->expType))
13014 exp->__anon1.cast.exp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), MkExpBrackets(MkListOne(newExp)));
13016 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13021 else if(exp->expType && exp->expType->passAsTemplate && exp->destType && ((unsigned int)((exp->usage & 0x1) >> 0)) && exp->destType->kind != 20 && !exp->destType->passAsTemplate)
13023 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13024 struct Context * context;
13028 exp->destType->refCount++;
13030 exp->expType->refCount++;
13031 newExp->prev = (((void *)0));
13032 newExp->next = (((void *)0));
13033 switch(exp->expType->kind)
13036 if(exp->destType->classObjectType)
13039 exp->destType->refCount--;
13041 exp->expType->refCount--;
13042 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13046 struct __ecereNameSpace__ecere__sys__OldList * specs;
13047 struct __ecereNameSpace__ecere__sys__OldList * unionDefs = MkList();
13048 struct __ecereNameSpace__ecere__sys__OldList * statements = MkList();
13050 context = PushContext();
13051 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifier(DOUBLE)), MkListOne(MkDeclaratorIdentifier(MkIdentifier("d"))), (((void *)0)))));
13052 ListAdd(unionDefs, MkClassDefDeclaration(MkStructDeclaration(MkListOne(MkSpecifierName("uint64")), MkListOne(MkDeclaratorIdentifier(MkIdentifier("i"))), (((void *)0)))));
13053 specs = MkListOne(MkStructOrUnion(4, (((void *)0)), unionDefs));
13055 exp->__anon1.compound = MkCompoundStmt(MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internal_union")), (((void *)0)))))), statements);
13056 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpOp(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("i")), '=', newExp))));
13057 ListAdd(statements, MkExpressionStmt(MkListOne(MkExpMember(MkExpIdentifier(MkIdentifier("__internal_union")), MkIdentifier("d")))));
13058 exp->__anon1.compound->__anon1.compound.context = context;
13059 PopContext(context);
13064 if(exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->type == 1)
13067 if(__ecereProp_Type_Get_isPointerType(exp->expType))
13068 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
13069 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)));
13070 ProcessExpressionType((*exp->__anon1.list).first);
13076 if(__ecereProp_Type_Get_isPointerType(exp->expType))
13078 exp->needTemplateCast = 2;
13079 newExp->needCast = 1;
13080 newExp->needTemplateCast = 2;
13081 newExp = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), newExp);
13083 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(exp->expType->__anon1._class->string)), (((void *)0))), newExp));
13084 exp->needTemplateCast = 2;
13085 newExp->needCast = 1;
13086 newExp->needTemplateCast = 2;
13087 ProcessExpressionType((*exp->__anon1.list).first);
13093 if(exp->expType->kind == 20)
13095 struct Type * type = ProcessTemplateParameterType(exp->expType->__anon1.templateParameter);
13099 FreeType(exp->destType);
13100 FreeType(exp->expType);
13101 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13105 if(newExp->type == 8 && newExp->__anon1.member.memberType == 3)
13108 exp->__anon1.op.op = '*';
13109 exp->__anon1.op.exp1 = (((void *)0));
13110 exp->__anon1.op.exp2 = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uint64")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '&', newExp))));
13114 char typeString[1024];
13115 struct Declarator * decl;
13116 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13118 typeString[0] = '\0';
13119 PrintType(exp->expType, typeString, 0, 0);
13120 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13122 exp->__anon1.cast.typeName = MkTypeName(specs, decl);
13123 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(newExp));
13124 exp->__anon1.cast.exp->needCast = 1;
13132 extern int strncmp(const char * , const char * , size_t n);
13134 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindPrefix(struct __ecereNameSpace__ecere__sys__BinaryTree * this, const char * key);
13136 static struct Symbol * ScanWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * nameSpace, const char * name)
13138 int nsLen = strlen(nameSpace);
13139 struct Symbol * symbol;
13141 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)))
13143 char * s = symbol->string;
13145 if(!strncmp(s, nameSpace, nsLen))
13150 for(c = strlen(s) - 1; c >= 0; c--)
13153 namePart = s + c + 1;
13154 if(!strcmp(namePart, name))
13162 return (((void *)0));
13165 static struct Symbol * FindWithNameSpace(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, const char * name)
13168 char nameSpace[1024];
13169 const char * namePart;
13170 unsigned int gotColon = 0;
13172 nameSpace[0] = '\0';
13173 for(c = strlen(name) - 1; c >= 0; c--)
13179 namePart = name + c + 1;
13180 while(c >= 0 && name[c] == ':')
13184 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, name);
13188 memcpy(nameSpace, name, c + 1);
13189 nameSpace[c + 1] = (char)0;
13190 return ScanWithNameSpace(tree, nameSpace, namePart);
13194 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13200 struct Symbol * symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(tree, namePart);
13204 return ScanWithNameSpace(tree, "", namePart);
13206 return (((void *)0));
13209 static void ProcessDeclaration(struct Declaration * decl);
13211 struct Symbol * FindSymbol(const char * name, struct Context * startContext, struct Context * endContext, unsigned int isStruct, unsigned int globalNameSpace)
13213 struct Context * ctx;
13214 struct Symbol * symbol = (((void *)0));
13216 for(ctx = startContext; ctx && !symbol; ctx = ctx->parent)
13218 if(ctx == globalContext && !globalNameSpace && ctx->hasNameSpace)
13220 symbol = (((void *)0));
13223 char curName[1024];
13225 strcpy(curName, thisNameSpace);
13226 strcat(curName, "::");
13227 strcat(curName, name);
13228 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, curName);
13231 symbol = FindWithNameSpace(isStruct ? &ctx->structSymbols : &ctx->symbols, name);
13234 symbol = (struct Symbol *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((isStruct ? &ctx->structSymbols : &ctx->symbols), name);
13235 if(symbol || ctx == endContext)
13238 if(inCompiler && curExternal && symbol && ctx == globalContext && curExternal->symbol && symbol->id > curExternal->symbol->idCode && symbol->__anon2.__anon1.pointerExternal)
13240 if(symbol->__anon2.__anon1.pointerExternal->type == 0)
13242 struct FunctionDefinition * function = symbol->__anon2.__anon1.pointerExternal->__anon1.function;
13243 struct Context * tmpContext = curContext;
13245 curContext = (((void *)0));
13246 symbol->__anon2.__anon1.pointerExternal = MkExternalDeclaration(MkDeclaration(CopyList(function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(function->declarator), (((void *)0))))));
13247 curContext = tmpContext;
13248 symbol->__anon2.__anon1.pointerExternal->symbol = symbol;
13249 DeclareType(symbol->type, 1, 1);
13250 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, symbol->__anon2.__anon1.pointerExternal);
13251 symbol->id = curExternal->symbol->idCode;
13253 else if(symbol->__anon2.__anon1.pointerExternal->type == 1 && curExternal->symbol->idCode < symbol->__anon2.__anon1.pointerExternal->symbol->id)
13255 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Move((&*ast), symbol->__anon2.__anon1.pointerExternal, curExternal->prev);
13256 symbol->id = curExternal->symbol->idCode;
13262 static void GetTypeSpecs(struct Type * type, struct __ecereNameSpace__ecere__sys__OldList * specs)
13264 if(!type->isSigned && type->kind != 22 && type->kind != 23)
13265 ListAdd(specs, MkSpecifier(UNSIGNED));
13270 if(type->__anon1._class->__anon1.registered)
13272 if(!type->__anon1._class->__anon1.registered->dataType)
13273 type->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type->__anon1._class->__anon1.registered->dataTypeString, 0);
13274 GetTypeSpecs(type->__anon1._class->__anon1.registered->dataType, specs);
13279 ListAdd(specs, MkSpecifier(DOUBLE));
13282 ListAdd(specs, MkSpecifier(FLOAT));
13285 ListAdd(specs, MkSpecifier(CHAR));
13288 ListAdd(specs, MkSpecifier(_BOOL));
13291 ListAdd(specs, MkSpecifier(SHORT));
13294 ListAdd(specs, MkSpecifier(INT64));
13297 ListAdd(specs, MkSpecifierName(type->isSigned ? "intptr" : "uintptr"));
13300 ListAdd(specs, MkSpecifierName(type->isSigned ? "intsize" : "uintsize"));
13304 ListAdd(specs, MkSpecifier(INT));
13309 static void PrintArraySize(struct Type * arrayType, char * string)
13315 if(arrayType->__anon1.__anon4.enumClass)
13316 strcat(size, arrayType->__anon1.__anon4.enumClass->string);
13317 else if(arrayType->__anon1.__anon4.arraySizeExp)
13318 PrintExpression(arrayType->__anon1.__anon4.arraySizeExp, size);
13320 strcat(string, size);
13323 static void PrintTypeSpecs(struct Type * type, char * string, unsigned int fullName, unsigned int printConst)
13327 if(printConst && type->constant)
13328 strcat(string, "const ");
13333 struct Symbol * c = type->__anon1._class;
13335 if(type->classObjectType == 2)
13336 strcat(string, "typed_object");
13337 else if(type->classObjectType == 3)
13338 strcat(string, "any_object");
13342 strcat(string, (fullName || !c->__anon1.registered) ? c->string : c->__anon1.registered->name);
13344 if(type->byReference)
13345 strcat(string, " &");
13349 strcat(string, "void");
13352 strcat(string, type->isSigned ? "int" : "uint");
13355 strcat(string, type->isSigned ? "int64" : "uint64");
13358 strcat(string, type->isSigned ? "intptr" : "uintptr");
13361 strcat(string, type->isSigned ? "intsize" : "uintsize");
13364 strcat(string, type->isSigned ? "char" : "byte");
13367 strcat(string, "_Bool");
13370 strcat(string, type->isSigned ? "short" : "uint16");
13373 strcat(string, "float");
13376 strcat(string, "double");
13379 if(type->__anon1.__anon1.enumName)
13381 strcat(string, "struct ");
13382 strcat(string, type->__anon1.__anon1.enumName);
13384 else if(type->typeName)
13385 strcat(string, type->typeName);
13388 struct Type * member;
13390 strcat(string, "struct { ");
13391 for(member = type->__anon1.__anon1.members.first; member; member = member->next)
13393 PrintType(member, string, 1, fullName);
13394 strcat(string, "; ");
13396 strcat(string, "}");
13400 if(type->__anon1.__anon1.enumName)
13402 strcat(string, "union ");
13403 strcat(string, type->__anon1.__anon1.enumName);
13405 else if(type->typeName)
13406 strcat(string, type->typeName);
13409 strcat(string, "union ");
13410 strcat(string, "(unnamed)");
13414 if(type->__anon1.__anon1.enumName)
13416 strcat(string, "enum ");
13417 strcat(string, type->__anon1.__anon1.enumName);
13419 else if(type->typeName)
13420 strcat(string, type->typeName);
13422 strcat(string, "int");
13425 strcat(string, "...");
13428 strcat(string, "subclass(");
13429 strcat(string, type->__anon1._class ? type->__anon1._class->string : "int");
13430 strcat(string, ")");
13433 strcat(string, type->__anon1.templateParameter->identifier->string);
13436 strcat(string, "thisclass");
13439 strcat(string, "__builtin_va_list");
13445 extern char * __ecereNameSpace__ecere__sys__RSearchString(const char * buffer, const char * subStr, int maxLen, unsigned int matchCase, unsigned int matchWord);
13447 static void PrintName(struct Type * type, char * string, unsigned int fullName)
13449 if(type->name && type->name[0])
13452 strcat(string, type->name);
13455 char * name = __ecereNameSpace__ecere__sys__RSearchString(type->name, "::", strlen(type->name), 1, 0);
13461 strcat(string, name);
13466 static void PrintAttribs(struct Type * type, char * string)
13470 if(type->dllExport)
13471 strcat(string, "dllexport ");
13472 if(type->attrStdcall)
13473 strcat(string, "stdcall ");
13477 static void PrePrintType(struct Type * type, char * string, unsigned int fullName, struct Type * parentType, unsigned int printConst)
13479 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13481 if((type->kind == 11 || type->kind == 16) && (!parentType || parentType->kind != 13))
13482 PrintAttribs(type, string);
13483 if(printConst && type->constant && (type->kind == 11 || type->kind == 16))
13484 strcat(string, " const");
13485 PrePrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName, type, printConst);
13486 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13487 strcat(string, " (");
13488 if(type->kind == 13)
13490 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16)
13491 PrintAttribs(type->__anon1.type, string);
13493 if(type->kind == 13)
13495 if(type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16 || type->__anon1.type->kind == 12)
13496 strcat(string, "*");
13498 strcat(string, " *");
13500 if(printConst && type->constant && type->kind == 13)
13501 strcat(string, " const");
13504 PrintTypeSpecs(type, string, fullName, printConst);
13507 static void PostPrintType(struct Type * type, char * string, unsigned int fullName)
13509 if(type->kind == 13 && (type->__anon1.type->kind == 12 || type->__anon1.type->kind == 11 || type->__anon1.type->kind == 16))
13510 strcat(string, ")");
13511 if(type->kind == 12)
13512 PrintArraySize(type, string);
13513 else if(type->kind == 11)
13515 struct Type * param;
13517 strcat(string, "(");
13518 for(param = type->__anon1.__anon2.params.first; param; param = param->next)
13520 PrintType(param, string, 1, fullName);
13522 strcat(string, ", ");
13524 strcat(string, ")");
13526 if(type->kind == 12 || type->kind == 13 || type->kind == 11 || type->kind == 16)
13527 PostPrintType(type->kind == 16 ? type->__anon1.__anon3.method->dataType : type->__anon1.type, string, fullName);
13530 static void _PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName, unsigned int printConst)
13532 PrePrintType(type, string, fullName, (((void *)0)), printConst);
13533 if(type->__anon1.__anon2.thisClass || (printName && type->name && type->name[0]))
13534 strcat(string, " ");
13535 if((type->__anon1.__anon2.thisClass || type->__anon1.__anon2.staticMethod))
13537 struct Symbol * _class = type->__anon1.__anon2.thisClass;
13539 if((type->classObjectType == 2 || type->classObjectType == 1) || (_class && !strcmp(_class->string, "class")))
13541 if(type->classObjectType == 1)
13542 strcat(string, "class");
13544 strcat(string, type->byReference ? "typed_object&" : "typed_object");
13546 else if(_class && _class->string)
13548 char * s = _class->string;
13554 char * name = __ecereNameSpace__ecere__sys__RSearchString(s, "::", strlen(s), 1, 0);
13560 strcat(string, name);
13563 strcat(string, "::");
13565 if(printName && type->name)
13566 PrintName(type, string, fullName);
13567 PostPrintType(type, string, fullName);
13568 if(type->bitFieldCount)
13572 sprintf(count, ":%d", type->bitFieldCount);
13573 strcat(string, count);
13577 void PrintType(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13579 _PrintType(type, string, printName, fullName, 1);
13582 void PrintTypeNoConst(struct Type * type, char * string, unsigned int printName, unsigned int fullName)
13584 _PrintType(type, string, printName, fullName, 0);
13587 static struct Type * FindMember(struct Type * type, char * string)
13589 struct Type * memberType;
13591 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13593 if(!memberType->name)
13595 struct Type * subType = FindMember(memberType, string);
13600 else if(!strcmp(memberType->name, string))
13603 return (((void *)0));
13606 struct Type * FindMemberAndOffset(struct Type * type, char * string, unsigned int * offset)
13608 struct Type * memberType;
13610 for(memberType = type->__anon1.__anon1.members.first; memberType; memberType = memberType->next)
13612 if(!memberType->name)
13614 struct Type * subType = FindMember(memberType, string);
13618 *offset += memberType->offset;
13622 else if(!strcmp(memberType->name, string))
13624 *offset += memberType->offset;
13628 return (((void *)0));
13631 extern unsigned int parseError;
13633 unsigned int GetParseError()
13638 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
13640 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Write;
13642 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__File;
13644 struct Expression * ParseExpressionString(char * expression)
13647 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
13648 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
13649 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13651 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13652 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, expression, 1, strlen(expression));
13653 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
13654 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
13656 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
13657 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
13659 parsedExpression = (((void *)0));
13661 expression_yyparse();
13662 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
13663 return parsedExpression;
13666 extern char * QMkString(const char * source);
13668 static unsigned int ResolveIdWithClass(struct Expression * exp, struct __ecereNameSpace__ecere__com__Class * _class, unsigned int skipIDClassCheck)
13670 struct Identifier * id = exp->__anon1.__anon1.identifier;
13671 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
13672 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
13673 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
13674 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
13676 if(_class && _class->type == 4)
13678 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (((void *)0));
13679 struct __ecereNameSpace__ecere__com__Class * enumClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "enum");
13683 struct __ecereNameSpace__ecere__com__Class * baseClass;
13685 for(baseClass = _class; baseClass && baseClass->type == 4; baseClass = baseClass->base)
13687 struct __ecereNameSpace__ecere__com__EnumClassData * e = (baseClass ? ((void *)(((char *)baseClass->data) + enumClass->offsetClass)) : (((void *)0)));
13689 for(value = e->values.first; value; value = value->next)
13691 if(!strcmp(value->name, id->string))
13696 exp->isConstant = 1;
13697 if(inCompiler || inPreCompiler || inDebugger)
13699 char constant[256];
13701 FreeExpContents(exp);
13703 if(!strcmp(baseClass->dataTypeString, "int") || !strcmp(baseClass->dataTypeString, "int64") || !strcmp(baseClass->dataTypeString, "char") || !strcmp(baseClass->dataTypeString, "short"))
13704 sprintf(constant, ((__runtimePlatform == 1) ? "%I64d" : "%lld"), value->data);
13706 sprintf(constant, ((__runtimePlatform == 1) ? "0x%I64X" : "0x%llX"), value->data);
13707 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13709 exp->expType = MkClassType(baseClass->fullName);
13717 if((method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule)))
13719 ProcessMethodType(method);
13720 exp->expType = __extension__ ({
13721 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13723 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1->__anon1.__anon3.methodClass = (skipIDClassCheck || (id && id->_class)) ? _class : (((void *)0)), __ecereInstance1;
13727 else if((prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule)))
13729 if(!prop->dataType)
13730 ProcessPropertyType(prop);
13731 exp->expType = prop->dataType;
13733 prop->dataType->refCount++;
13736 else if((member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)))))
13738 if(!member->dataType)
13739 member->dataType = ProcessTypeString(member->dataTypeString, 0);
13740 exp->expType = member->dataType;
13741 if(member->dataType)
13742 member->dataType->refCount++;
13745 else if((classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(_class, id->string)))
13747 if(!classProp->dataType)
13748 classProp->dataType = ProcessTypeString(classProp->dataTypeString, 0);
13749 if(classProp->constant)
13751 FreeExpContents(exp);
13752 exp->isConstant = 1;
13753 if(classProp->dataType->kind == 13 && classProp->dataType->__anon1.type->kind == 1)
13756 exp->__anon1.__anon1.constant = QMkString((char *)(uintptr_t)classProp->Get(_class));
13760 char constant[256];
13763 sprintf(constant, "%d", (int)classProp->Get(_class));
13764 exp->__anon1.__anon1.constant = __ecereNameSpace__ecere__sys__CopyString(constant);
13770 exp->expType = classProp->dataType;
13771 if(classProp->dataType)
13772 classProp->dataType->refCount++;
13778 static struct GlobalData * ScanGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace, char * name)
13780 struct __ecereNameSpace__ecere__sys__BinaryTree * tree = &nameSpace->functions;
13781 struct GlobalData * data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString((&*tree), name);
13782 struct __ecereNameSpace__ecere__com__NameSpace * child;
13786 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)))
13788 data = ScanGlobalData(child, name);
13796 extern struct __ecereNameSpace__ecere__com__NameSpace * globalData;
13798 extern char * strncpy(char * , const char * , size_t n);
13800 static struct GlobalData * FindGlobalData(char * name)
13803 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
13805 nameSpace = globalData;
13806 for(c = 0; name[c]; c++)
13808 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
13810 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
13811 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
13813 strncpy(spaceName, name + start, c - start);
13814 spaceName[c - start] = '\0';
13815 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
13816 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
13818 return (((void *)0));
13819 nameSpace = newSpace;
13827 return ScanGlobalData(nameSpace, name + start);
13829 return (((void *)0));
13832 static int definedExpStackPos;
13834 static void * definedExpStack[512];
13836 void ReplaceExpContents(struct Expression * checkedExp, struct Expression * newExp)
13838 struct Expression * prev = checkedExp->prev, * next = checkedExp->next;
13840 FreeExpContents(checkedExp);
13841 FreeType(checkedExp->expType);
13842 FreeType(checkedExp->destType);
13843 *checkedExp = *newExp;
13844 ((newExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)newExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(newExp)) : 0), newExp = 0);
13845 checkedExp->prev = prev;
13846 checkedExp->next = next;
13849 extern struct Expression * MkExpCall(struct Expression * expression, struct __ecereNameSpace__ecere__sys__OldList * arguments);
13851 extern int printf(const char * , ...);
13853 void __ecereMethod_Expression_Clear();
13855 void ApplyAnyObjectLogic(struct Expression * e)
13857 struct Type * destType = e->destType;
13859 if(destType && (destType->classObjectType == 3))
13861 if(e && e->expType)
13863 struct Type * type = e->expType;
13864 struct __ecereNameSpace__ecere__com__Class * _class = (((void *)0));
13866 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
13868 _class = type->__anon1._class->__anon1.registered;
13870 else if(type->kind == 19)
13872 _class = FindClass("ecere::com::Class")->__anon1.registered;
13876 char string[1024] = "";
13877 struct Symbol * classSym;
13879 PrintTypeNoConst(type, string, 0, 1);
13880 classSym = FindClass(string);
13882 _class = classSym->__anon1.registered;
13884 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)))
13886 if(!_class || strcmp(_class->fullName, "char *"))
13888 struct Expression * checkedExp = e, * newExp;
13890 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
13892 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
13894 if(checkedExp->type == 23)
13896 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13899 checkedExp = (*checkedExp->__anon1.list).last;
13901 else if(checkedExp->type == 11)
13902 checkedExp = checkedExp->__anon1.cast.exp;
13904 if(checkedExp && checkedExp->type == 4 && checkedExp->__anon1.op.op == '*' && !checkedExp->__anon1.op.exp1)
13906 newExp = checkedExp->__anon1.op.exp2;
13907 checkedExp->__anon1.op.exp2 = (((void *)0));
13908 FreeExpContents(checkedExp);
13909 if(e->expType && e->expType->passAsTemplate)
13913 ComputeTypeSize(e->expType);
13914 sprintf(size, "%d", e->expType->size);
13915 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))))));
13917 ReplaceExpContents(checkedExp, newExp);
13918 e->byReference = 1;
13920 else if(!e->byReference || (_class && _class->type == 5))
13922 struct Expression * checkedExp;
13925 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;
13927 if(_class && _class->type != 5 && _class->type != 0 && _class->type != 1 && !hasAddress)
13929 struct Context * context = PushContext();
13930 struct Declarator * decl;
13931 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
13932 char typeString[1024];
13933 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13935 typeString[0] = '\0';
13937 newExp->prev = (((void *)0));
13938 newExp->next = (((void *)0));
13939 newExp->expType = (((void *)0));
13940 PrintTypeNoConst(e->expType, typeString, 0, 1);
13941 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
13942 newExp->destType = ProcessType(specs, decl);
13943 curContext = context;
13947 struct __ecereNameSpace__ecere__sys__OldList * stmts = MkList();
13950 sprintf(name, "__internalValue%03X", internalValueCounter++);
13951 if(!curCompound->__anon1.compound.declarations)
13952 curCompound->__anon1.compound.declarations = MkList();
13953 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), MkDeclaration(specs, MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(name)), (((void *)0))))));
13954 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpOp(MkExpIdentifier(MkIdentifier(name)), '=', newExp))));
13955 ListAdd(stmts, MkExpressionStmt(MkListOne(MkExpIdentifier(MkIdentifier(name)))));
13956 e->__anon1.compound = MkCompoundStmt((((void *)0)), stmts);
13959 printf("libec: compiler error, curCompound is null in ApplyAnyObjectLogic\n");
13961 struct Type * type = e->destType;
13963 e->destType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
13964 CopyTypeInto(e->destType, type);
13965 e->destType->refCount = 1;
13966 e->destType->classObjectType = 0;
13969 e->__anon1.compound->__anon1.compound.context = context;
13970 PopContext(context);
13971 curContext = context->parent;
13975 while(((checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23) && checkedExp->__anon1.list) || checkedExp->type == 11)
13977 if(checkedExp->type == 5 || checkedExp->type == 32 || checkedExp->type == 23)
13979 if(checkedExp->type == 23)
13981 checkedExp = (*((struct Statement *)(*checkedExp->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
13984 checkedExp = (*checkedExp->__anon1.list).last;
13986 else if(checkedExp->type == 11)
13987 checkedExp = checkedExp->__anon1.cast.exp;
13990 struct Expression * operand = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
13992 *operand = *checkedExp;
13993 __ecereMethod_Expression_Clear(checkedExp);
13994 checkedExp->destType = ProcessTypeString("void *", 0);
13995 checkedExp->expType = checkedExp->destType;
13996 checkedExp->destType->refCount++;
13997 checkedExp->type = 4;
13998 checkedExp->__anon1.op.op = '&';
13999 checkedExp->__anon1.op.exp1 = (((void *)0));
14000 checkedExp->__anon1.op.exp2 = operand;
14009 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))))
14011 if(e->expType->classObjectType && destType && destType->classObjectType)
14017 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14020 thisExp->prev = (((void *)0));
14021 thisExp->next = (((void *)0));
14022 __ecereMethod_Expression_Clear(e);
14024 e->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', thisExp->type == 0 ? thisExp : MkExpBrackets(MkListOne(thisExp))));
14025 if(thisExp->expType->kind == 8 && thisExp->expType->__anon1._class && thisExp->expType->__anon1._class->__anon1.registered && thisExp->expType->__anon1._class->__anon1.registered->type == 5)
14026 ((struct Expression *)(*e->__anon1.list).first)->byReference = 1;
14028 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14029 CopyTypeInto(e->expType, thisExp->expType);
14030 e->expType->byReference = 0;
14031 e->expType->refCount = 1;
14032 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))
14034 e->expType->classObjectType = 0;
14039 else if(destType && e->expType && (e->expType->classObjectType == 3 || e->expType->classObjectType == 2) && !destType->classObjectType && destType->kind != 0)
14041 if(destType->kind == 14)
14043 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Unspecified type\n", (((void *)0))));
14045 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))
14047 unsigned int byReference = e->expType->byReference;
14048 struct Expression * thisExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
14049 struct Declarator * decl;
14050 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
14051 char typeString[1024];
14052 struct Type * type;
14053 int backupClassObjectType;
14054 unsigned int backupByReference;
14056 if(e->expType->kind == 8 && e->expType->__anon1._class && e->expType->__anon1._class->__anon1.registered && strcmp(e->expType->__anon1._class->__anon1.registered->name, "class"))
14060 backupClassObjectType = type->classObjectType;
14061 backupByReference = type->byReference;
14062 type->classObjectType = 0;
14063 type->byReference = 0;
14064 typeString[0] = '\0';
14065 PrintType(type, typeString, 0, 1);
14066 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
14067 type->classObjectType = backupClassObjectType;
14068 type->byReference = backupByReference;
14070 thisExp->prev = (((void *)0));
14071 thisExp->next = (((void *)0));
14072 __ecereMethod_Expression_Clear(e);
14073 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)))
14076 e->__anon1.op.op = '*';
14077 e->__anon1.op.exp1 = (((void *)0));
14078 e->__anon1.op.exp2 = MkExpCast(MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl)), thisExp);
14079 e->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14080 CopyTypeInto(e->expType, type);
14081 e->expType->byReference = 0;
14082 e->expType->refCount = 1;
14087 e->__anon1.cast.typeName = MkTypeName(specs, decl);
14088 e->__anon1.cast.exp = thisExp;
14089 e->byReference = 1;
14093 e->destType = destType;
14094 destType->refCount++;
14099 void ApplyLocation(struct Expression * exp, struct Location * loc)
14105 if(exp->__anon1.op.exp1)
14106 ApplyLocation(exp->__anon1.op.exp1, loc);
14107 if(exp->__anon1.op.exp2)
14108 ApplyLocation(exp->__anon1.op.exp2, loc);
14111 if(exp->__anon1.list)
14113 struct Expression * e;
14115 for(e = (*exp->__anon1.list).first; e; e = e->next)
14116 ApplyLocation(e, loc);
14120 if(exp->__anon1.index.index)
14122 struct Expression * e;
14124 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
14125 ApplyLocation(e, loc);
14127 if(exp->__anon1.index.exp)
14128 ApplyLocation(exp->__anon1.index.exp, loc);
14131 if(exp->__anon1.call.arguments)
14133 struct Expression * arg;
14135 for(arg = (*exp->__anon1.call.arguments).first; arg; arg = arg->next)
14136 ApplyLocation(arg, loc);
14138 if(exp->__anon1.call.exp)
14139 ApplyLocation(exp->__anon1.call.exp, loc);
14143 if(exp->__anon1.member.exp)
14144 ApplyLocation(exp->__anon1.member.exp, loc);
14147 if(exp->__anon1.cast.exp)
14148 ApplyLocation(exp->__anon1.cast.exp, loc);
14151 if(exp->__anon1.cond.exp)
14153 struct Expression * e;
14155 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
14156 ApplyLocation(e, loc);
14158 if(exp->__anon1.cond.cond)
14159 ApplyLocation(exp->__anon1.cond.cond, loc);
14160 if(exp->__anon1.cond.elseExp)
14161 ApplyLocation(exp->__anon1.cond.elseExp, loc);
14164 if(exp->__anon1.vaArg.exp)
14165 ApplyLocation(exp->__anon1.vaArg.exp, loc);
14172 extern char * strstr(const char * , const char * );
14174 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
14176 struct __ecereNameSpace__ecere__com__DefinedExpression
14178 struct __ecereNameSpace__ecere__com__DefinedExpression * prev;
14179 struct __ecereNameSpace__ecere__com__DefinedExpression * next;
14181 const char * value;
14182 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace;
14183 } __attribute__ ((gcc_struct));
14185 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_FindDefine(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14187 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_FindFunction(struct __ecereNameSpace__ecere__com__Instance * module, const char * name);
14189 extern unsigned int __ecereNameSpace__ecere__sys__UTF8GetChar(const char * string, int * numBytes);
14191 extern struct Expression * GetTemplateArgExp(struct TemplateParameter * param, struct __ecereNameSpace__ecere__com__Class * curClass, unsigned int pointer);
14193 extern struct Expression * MkExpCondition(struct Expression * cond, struct __ecereNameSpace__ecere__sys__OldList * expressions, struct Expression * elseExp);
14195 extern struct Expression * MkExpClass(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Declarator * decl);
14197 static void ProcessStatement(struct Statement * stmt);
14199 extern struct Expression * MkExpExtensionInitializer(struct TypeName * typeName, struct Initializer * initializer);
14201 extern struct Initializer * MkInitializerList(struct __ecereNameSpace__ecere__sys__OldList * list);
14203 extern char * __ecereNameSpace__ecere__com__PrintString(struct __ecereNameSpace__ecere__com__Class * class, const void * object, ...);
14205 extern const char * sourceFile;
14207 extern unsigned int IsVoidPtrCast(struct TypeName * typeName);
14209 extern struct Expression * MoveExpContents(struct Expression * exp);
14211 unsigned int __ecereProp_Type_Get_specConst(struct Type * this);
14213 extern struct __ecereNameSpace__ecere__com__Property * __ecereProp_Type_specConst;
14215 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear(struct __ecereNameSpace__ecere__sys__OldList * this);
14217 void ProcessExpressionType(struct Expression * exp)
14219 unsigned int unresolved = 0;
14220 struct Location oldyylloc = yylloc;
14221 unsigned int notByReference = 0;
14223 if(!exp || exp->expType)
14230 struct Identifier * id = exp->__anon1.__anon1.identifier;
14232 if(!id || !topContext)
14234 if(id->_class && id->_class->__anon1.__anon1.name)
14236 id->classSym = id->_class->__anon1.__anon1.symbol;
14238 if(!strcmp(id->string, "__runtimePlatform"))
14240 exp->expType = ProcessTypeString("ecere::com::Platform", 1);
14243 else if(strstr(id->string, "__ecereClass") == id->string)
14245 exp->expType = ProcessTypeString("ecere::com::Class", 1);
14248 else if(id->_class && (id->classSym || (id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))))
14250 ReplaceClassMembers(exp, thisClass);
14253 ProcessExpressionType(exp);
14256 if(id->classSym && ResolveIdWithClass(exp, id->classSym->__anon1.registered, 0))
14261 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14265 if(exp->destType && CheckExpressionType(exp, exp->destType, 0, 0))
14271 ReplaceClassMembers(exp, thisClass ? thisClass : currentClass);
14274 ProcessExpressionType(exp);
14278 else if(currentClass && !id->_class)
14280 if(ResolveIdWithClass(exp, currentClass, 1))
14283 symbol = FindSymbol(id->string, topContext->parent, globalContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14288 struct Type * type = symbol->type;
14289 struct __ecereNameSpace__ecere__com__Class * _class = (type && type->kind == 8 && type->__anon1._class) ? type->__anon1._class->__anon1.registered : (((void *)0));
14291 if(_class && !strcmp(id->string, "this") && !type->classObjectType)
14293 struct Context * context = SetupTemplatesContext(_class);
14295 type = ReplaceThisClassType(_class);
14296 FinishTemplatesContext(context);
14298 type->refCount = 0;
14300 FreeSpecifier(id->_class);
14301 id->_class = (((void *)0));
14302 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14303 id->string = __ecereNameSpace__ecere__sys__CopyString(symbol->string);
14304 id->classSym = (((void *)0));
14305 exp->expType = type;
14308 if(type && (type->kind == 15))
14309 exp->isConstant = 1;
14310 if(symbol->isParam || !strcmp(id->string, "this"))
14312 if(_class && _class->type == 1 && !type->declaredWithStruct)
14313 exp->byReference = 1;
14315 if(symbol->isIterator)
14317 if(symbol->isIterator == 3)
14320 exp->__anon1.list = MkListOne(MkExpOp((((void *)0)), '*', MkExpIdentifier(exp->__anon1.__anon1.identifier)));
14321 ((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2->expType = exp->expType;
14322 exp->expType = (((void *)0));
14323 ProcessExpressionType(exp);
14325 else if(symbol->isIterator != 4)
14328 exp->__anon1.member.exp = MkExpIdentifier(exp->__anon1.__anon1.identifier);
14329 exp->__anon1.member.exp->expType = exp->expType;
14330 exp->__anon1.member.member = MkIdentifier("data");
14331 exp->expType = (((void *)0));
14332 ProcessExpressionType(exp);
14339 struct __ecereNameSpace__ecere__com__DefinedExpression * definedExp = (((void *)0));
14341 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14345 strcpy(name, thisNameSpace);
14346 strcat(name, "::");
14347 strcat(name, id->string);
14348 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, name);
14351 definedExp = __ecereNameSpace__ecere__com__eSystem_FindDefine(privateModule, id->string);
14356 for(c = 0; c < definedExpStackPos; c++)
14357 if(definedExpStack[c] == definedExp)
14359 if(c == definedExpStackPos && c < sizeof (definedExpStack) / sizeof(void *))
14361 struct Location backupYylloc = yylloc;
14362 struct __ecereNameSpace__ecere__com__Instance * backInput = fileInput;
14364 definedExpStack[definedExpStackPos++] = definedExp;
14365 fileInput = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__sys__TempFile);
14366 ((int (*)(struct __ecereNameSpace__ecere__com__Instance *, const void * buffer, unsigned int size, unsigned int count))__extension__ ({
14367 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14369 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14370 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Write])(fileInput, definedExp->value, 1, strlen(definedExp->value));
14371 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))__extension__ ({
14372 struct __ecereNameSpace__ecere__com__Instance * __internal_ClassInst = fileInput;
14374 __internal_ClassInst ? __internal_ClassInst->_vTbl : __ecereClass___ecereNameSpace__ecere__sys__File->_vTbl;
14375 })[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, 0, 0);
14377 parsedExpression = (((void *)0));
14379 expression_yyparse();
14380 (__ecereNameSpace__ecere__com__eInstance_DecRef(fileInput), fileInput = 0);
14382 fileInput = backInput;
14383 yylloc = backupYylloc;
14384 if(parsedExpression)
14386 FreeIdentifier(id);
14388 exp->__anon1.list = MkListOne(parsedExpression);
14389 ApplyLocation(parsedExpression, &yylloc);
14390 ProcessExpressionType(exp);
14391 definedExpStackPos--;
14394 definedExpStackPos--;
14400 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Recursion in defined expression %s\n", (((void *)0))), id->string);
14406 struct GlobalData * data = (((void *)0));
14408 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14412 strcpy(name, thisNameSpace);
14413 strcat(name, "::");
14414 strcat(name, id->string);
14415 data = FindGlobalData(name);
14418 data = FindGlobalData(id->string);
14421 DeclareGlobalData(data);
14422 exp->expType = data->dataType;
14424 data->dataType->refCount++;
14425 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14426 id->string = __ecereNameSpace__ecere__sys__CopyString(data->fullName);
14427 FreeSpecifier(id->_class);
14428 id->_class = (((void *)0));
14433 struct __ecereNameSpace__ecere__com__GlobalFunction * function = (((void *)0));
14435 if(thisNameSpace && !(id->_class && !id->_class->__anon1.__anon1.name))
14439 strcpy(name, thisNameSpace);
14440 strcat(name, "::");
14441 strcat(name, id->string);
14442 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, name);
14445 function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, id->string);
14450 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14451 id->string = __ecereNameSpace__ecere__sys__CopyString(function->name);
14453 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
14454 strcpy(name, "__ecereFunction_");
14455 FullClassNameCat(name, id->string, 0);
14456 if(DeclareFunction(function, name))
14458 (__ecereNameSpace__ecere__com__eSystem_Delete(id->string), id->string = 0);
14459 id->string = __ecereNameSpace__ecere__sys__CopyString(name);
14461 exp->expType = function->dataType;
14462 if(function->dataType)
14463 function->dataType->refCount++;
14464 FreeSpecifier(id->_class);
14465 id->_class = (((void *)0));
14477 if(!exp->__anon1.instance->_class)
14479 if(exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class)
14481 exp->__anon1.instance->_class = MkSpecifierName(exp->destType->__anon1._class->string);
14484 ProcessInstantiationType(exp->__anon1.instance);
14485 exp->isConstant = exp->__anon1.instance->isConstant;
14486 if(exp->__anon1.instance->_class)
14488 exp->expType = MkClassType(exp->__anon1.instance->_class->__anon1.__anon1.name);
14496 char * constant = exp->__anon1.__anon1.constant;
14497 struct Type * type = (type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), type->refCount = 1, type->constant = 1, type);
14499 exp->expType = type;
14500 if(constant[0] == '\'')
14502 if((int)((unsigned char *)constant)[1] > 127)
14505 unsigned int ch = __ecereNameSpace__ecere__sys__UTF8GetChar(constant + 1, &nb);
14509 (__ecereNameSpace__ecere__com__eSystem_Delete(constant), constant = 0);
14510 exp->__anon1.__anon1.constant = PrintUInt(ch);
14512 type->__anon1._class = FindClass("unichar");
14513 type->isSigned = 0;
14518 type->isSigned = 1;
14523 char * dot = strchr(constant, '.');
14524 unsigned int isHex = (constant[0] == '0' && (constant[1] == 'x' || constant[1] == 'X'));
14529 exponent = strchr(constant, 'p');
14531 exponent = strchr(constant, 'P');
14535 exponent = strchr(constant, 'e');
14537 exponent = strchr(constant, 'E');
14539 if(dot || exponent)
14541 if(strchr(constant, 'f') || strchr(constant, 'F'))
14545 type->isSigned = 1;
14549 unsigned int isSigned = constant[0] == '-';
14550 char * endP = (((void *)0));
14551 long long i64 = strtoll(constant, &endP, 0);
14552 uint64 ui64 = strtoull(constant, &endP, 0);
14553 unsigned int is64Bit = endP && (!strcmp(endP, "LL") || !strcmp(endP, "ll"));
14557 if(i64 < (((int)0x80000000)))
14562 if(ui64 > (((int)0x7fffffff)))
14564 if(ui64 > (0xffffffff))
14567 if(ui64 <= (((long long)0x7fffffffffffffffLL)) && (constant[0] != '0' || !constant[1]))
14571 else if(constant[0] != '0' || !constant[1])
14574 type->kind = is64Bit ? 4 : 3;
14575 type->isSigned = isSigned;
14578 exp->isConstant = 1;
14579 if(exp->destType && exp->destType->kind == 7)
14581 else if(exp->destType && exp->destType->kind == 6)
14583 else if(exp->destType && exp->destType->kind == 4)
14590 exp->isConstant = 1;
14591 exp->expType = __extension__ ({
14592 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14594 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
14595 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14597 __ecereInstance1->refCount = 1, __ecereInstance1->kind = exp->__anon1.__anon2.wideString ? 2 : 1, __ecereInstance1->constant = 1, __ecereInstance1->isSigned = exp->__anon1.__anon2.wideString ? 0 : 1, __ecereInstance1;
14598 }), __ecereInstance2;
14604 ProcessExpressionType(exp->__anon1._new.size);
14605 exp->expType = __extension__ ({
14606 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14608 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._new.typeName->qualifiers, exp->__anon1._new.typeName->declarator), __ecereInstance1;
14610 DeclareType(exp->expType->__anon1.type, 0, 0);
14614 ProcessExpressionType(exp->__anon1._renew.size);
14615 ProcessExpressionType(exp->__anon1._renew.exp);
14616 exp->expType = __extension__ ({
14617 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14619 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = ProcessType(exp->__anon1._renew.typeName->qualifiers, exp->__anon1._renew.typeName->declarator), __ecereInstance1;
14621 DeclareType(exp->expType->__anon1.type, 0, 0);
14625 unsigned int assign = 0, boolResult = 0, boolOps = 0;
14626 struct Type * type1 = (((void *)0)), * type2 = (((void *)0));
14627 unsigned int useDestType = 0, useSideType = 0;
14628 struct Location oldyylloc = yylloc;
14629 unsigned int useSideUnit = 0;
14630 struct __ecereNameSpace__ecere__com__Class * destClass = (exp->destType && exp->destType->kind == 8 && exp->destType->__anon1._class) ? exp->destType->__anon1._class->__anon1.registered : (((void *)0));
14631 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
14633 switch(exp->__anon1.op.op)
14687 if(exp->__anon1.op.exp1)
14694 if(exp->__anon1.op.op == '&')
14696 if(!exp->__anon1.op.exp1 && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->type == 0 && exp->__anon1.op.exp2->__anon1.__anon1.identifier)
14698 struct Identifier * id = exp->__anon1.op.exp2->__anon1.__anon1.identifier;
14699 struct Symbol * symbol = FindSymbol(id->string, curContext, topContext, 0, id->_class && id->_class->__anon1.__anon1.name == (((void *)0)));
14701 if(symbol && symbol->isIterator == 2)
14704 exp->__anon1.member.exp = exp->__anon1.op.exp2;
14705 exp->__anon1.member.member = MkIdentifier("key");
14706 exp->expType = (((void *)0));
14707 exp->__anon1.op.exp2->expType = symbol->type;
14708 symbol->type->refCount++;
14709 ProcessExpressionType(exp);
14715 if(exp->__anon1.op.exp1)
14717 if(exp->__anon1.op.exp2 && useSideUnit && useDestType && destClass && destClass->type == 3 && destClass->base->type != 3)
14719 if(destClass && useDestType && ((destClass->type == 3 && useSideUnit) || destClass->type == 4 || destClass->type == 2))
14721 if(exp->__anon1.op.exp1->destType)
14722 FreeType(exp->__anon1.op.exp1->destType);
14723 exp->__anon1.op.exp1->destType = exp->destType;
14724 exp->__anon1.op.exp1->opDestType = 1;
14726 exp->destType->refCount++;
14730 if(exp->__anon1.op.exp1->destType)
14731 FreeType(exp->__anon1.op.exp1->destType);
14732 exp->__anon1.op.exp1->destType = dummy;
14735 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14736 exp->__anon1.op.exp1->destType->count++;
14737 ProcessExpressionType(exp->__anon1.op.exp1);
14738 if(exp->__anon1.op.exp1->destType && exp->__anon1.op.op != '=')
14739 exp->__anon1.op.exp1->destType->count--;
14740 exp->__anon1.op.exp1->opDestType = 0;
14741 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)
14743 exp->__anon1.op.exp2 = MkExpConstant("1");
14744 exp->__anon1.op.op = exp->__anon1.op.op == INC_OP ? ADD_ASSIGN : SUB_ASSIGN;
14747 if(exp->__anon1.op.exp1->destType == dummy)
14750 exp->__anon1.op.exp1->destType = (((void *)0));
14752 type1 = exp->__anon1.op.exp1->expType;
14754 if(exp->__anon1.op.exp2)
14756 char expString[10240];
14758 expString[0] = '\0';
14759 if(exp->__anon1.op.exp2->type == 1 && !exp->__anon1.op.exp2->__anon1.instance->_class)
14761 if(exp->__anon1.op.exp1)
14763 exp->__anon1.op.exp2->destType = exp->__anon1.op.exp1->expType;
14764 if(exp->__anon1.op.exp1->expType)
14765 exp->__anon1.op.exp1->expType->refCount++;
14769 exp->__anon1.op.exp2->destType = exp->destType;
14770 if(!exp->__anon1.op.exp1 || exp->__anon1.op.op != '&')
14771 exp->__anon1.op.exp2->opDestType = 1;
14773 exp->destType->refCount++;
14777 exp->expType = type1;
14782 PrintExpression(exp->__anon1.op.exp2, expString);
14783 if(type1 && type1->kind == 13)
14785 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)
14786 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "operator %s illegal on pointer\n", (((void *)0))), exp->__anon1.op.op);
14787 else if(exp->__anon1.op.op == '=')
14789 if(exp->__anon1.op.exp2->destType)
14790 FreeType(exp->__anon1.op.exp2->destType);
14791 exp->__anon1.op.exp2->destType = type1;
14798 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)
14802 if(exp->__anon1.op.exp2->destType)
14803 FreeType(exp->__anon1.op.exp2->destType);
14804 exp->__anon1.op.exp2->destType = type1;
14811 exp->expType = type1;
14813 else if(destClass && ((destClass->type == 3 && useDestType && useSideUnit) || (destClass->type == 4 && useDestType)))
14815 if(exp->__anon1.op.exp2->destType)
14816 FreeType(exp->__anon1.op.exp2->destType);
14817 exp->__anon1.op.exp2->destType = exp->destType;
14818 if(exp->__anon1.op.op != '&')
14819 exp->__anon1.op.exp2->opDestType = 1;
14821 exp->destType->refCount++;
14825 if(exp->__anon1.op.exp2->destType)
14826 FreeType(exp->__anon1.op.exp2->destType);
14827 exp->__anon1.op.exp2->destType = dummy;
14830 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))
14832 FreeType(exp->__anon1.op.exp2->destType);
14833 exp->__anon1.op.exp2->destType = type1;
14836 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14837 exp->__anon1.op.exp2->destType->count++;
14838 if(exp->__anon1.op.op == SIZEOF)
14840 struct Expression * e = exp->__anon1.op.exp2;
14842 while((e->type == 5 || e->type == 32 || e->type == 23) && e->__anon1.list)
14844 if(e->type == 5 || e->type == 32 || e->type == 23)
14847 e = (*((struct Statement *)(*e->__anon1.compound->__anon1.compound.statements).last)->__anon1.expressions).last;
14849 e = (*e->__anon1.list).last;
14852 if(e->type == 11 && e->__anon1.cast.exp)
14853 e->__anon1.cast.exp->needCast = 1;
14855 ProcessExpressionType(exp->__anon1.op.exp2);
14856 exp->__anon1.op.exp2->opDestType = 0;
14857 if(exp->__anon1.op.exp2->destType && exp->__anon1.op.op != '=')
14858 exp->__anon1.op.exp2->destType->count--;
14859 if(assign && type1 && type1->kind == 13 && exp->__anon1.op.exp2->expType)
14861 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)
14863 if(exp->__anon1.op.op != '=' && type1->__anon1.type->kind == 0)
14864 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
14866 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)))
14868 if(exp->__anon1.op.op == ADD_ASSIGN)
14869 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14871 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))
14873 if(exp->__anon1.op.op == ADD_ASSIGN)
14874 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
14876 else if(inCompiler)
14878 char type1String[1024];
14879 char type2String[1024];
14881 type1String[0] = '\0';
14882 type2String[0] = '\0';
14883 PrintType(exp->__anon1.op.exp2->expType, type1String, 0, 1);
14884 PrintType(type1, type2String, 0, 1);
14885 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
14886 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1String, type2String);
14889 if(exp->__anon1.op.exp2->destType == dummy)
14892 exp->__anon1.op.exp2->destType = (((void *)0));
14894 if(exp->__anon1.op.op == '-' && !exp->__anon1.op.exp1 && exp->__anon1.op.exp2->expType && !exp->__anon1.op.exp2->expType->isSigned)
14896 type2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14897 type2->refCount = 1;
14898 CopyTypeInto(type2, exp->__anon1.op.exp2->expType);
14899 type2->isSigned = 1;
14901 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))
14903 type2 = __extension__ ({
14904 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14906 __ecereInstance1->kind = 3, __ecereInstance1;
14908 type2->refCount = 1;
14909 type2->isSigned = 1;
14913 type2 = exp->__anon1.op.exp2->expType;
14919 if(exp->__anon1.op.op == SIZEOF)
14921 exp->expType = __extension__ ({
14922 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
14924 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
14926 exp->isConstant = 1;
14928 else if(exp->__anon1.op.op == '*' && !exp->__anon1.op.exp1)
14930 exp->expType = Dereference(type2);
14931 if(type2 && type2->kind == 8)
14932 notByReference = 1;
14934 else if(exp->__anon1.op.op == '&' && !exp->__anon1.op.exp1)
14935 exp->expType = Reference(type2);
14940 if(exp->__anon1.op.exp1)
14942 if(exp->__anon1.op.exp1->destType)
14943 FreeType(exp->__anon1.op.exp1->destType);
14944 exp->__anon1.op.exp1->destType = MkClassType("bool");
14945 exp->__anon1.op.exp1->destType->truth = 1;
14946 if(!exp->__anon1.op.exp1->expType)
14947 ProcessExpressionType(exp->__anon1.op.exp1);
14949 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
14950 FreeType(exp->__anon1.op.exp1->expType);
14951 exp->__anon1.op.exp1->expType = MkClassType("bool");
14952 exp->__anon1.op.exp1->expType->truth = 1;
14954 if(exp->__anon1.op.exp2)
14956 if(exp->__anon1.op.exp2->destType)
14957 FreeType(exp->__anon1.op.exp2->destType);
14958 exp->__anon1.op.exp2->destType = MkClassType("bool");
14959 exp->__anon1.op.exp2->destType->truth = 1;
14960 if(!exp->__anon1.op.exp2->expType)
14961 ProcessExpressionType(exp->__anon1.op.exp2);
14963 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
14964 FreeType(exp->__anon1.op.exp2->expType);
14965 exp->__anon1.op.exp2->expType = MkClassType("bool");
14966 exp->__anon1.op.exp2->expType->truth = 1;
14969 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")))))
14971 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"))))
14973 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)))
14975 struct Type * intType;
14977 if(!type1->__anon1._class->__anon1.registered->dataType)
14978 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
14979 if(!type2->__anon1._class->__anon1.registered->dataType)
14980 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
14981 intType = ProcessTypeString((type1->__anon1._class->__anon1.registered->dataType->kind == 4 || type2->__anon1._class->__anon1.registered->dataType->kind == 4) ? "int64" : "int", 0);
14982 if(exp->__anon1.op.exp1->destType)
14983 FreeType(exp->__anon1.op.exp1->destType);
14984 if(exp->__anon1.op.exp2->destType)
14985 FreeType(exp->__anon1.op.exp2->destType);
14986 exp->__anon1.op.exp1->destType = intType;
14987 exp->__anon1.op.exp2->destType = intType;
14988 intType->refCount++;
14992 if(exp->__anon1.op.exp2->destType)
14993 FreeType(exp->__anon1.op.exp2->destType);
14994 exp->__anon1.op.exp2->destType = type1;
14996 if(exp->__anon1.op.exp1->destType)
14997 FreeType(exp->__anon1.op.exp1->destType);
14998 exp->__anon1.op.exp1->destType = type2;
15001 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)
15002 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);
15003 if(type1->kind == 13 && type1->__anon1.type->kind == 20 && type2->kind != 13)
15005 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
15009 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
15011 exp->__anon1.op.exp1 = MkExpBrackets(MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName("byte")), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp->__anon1.op.exp1)));
15012 ProcessExpressionType(exp->__anon1.op.exp1);
15013 if(type2->kind != 13)
15015 ProcessExpressionType(classExp);
15016 exp->__anon1.op.exp2 = MkExpBrackets(MkListOne(MkExpOp(exp->__anon1.op.exp2, '*', MkExpMember(classExp, MkIdentifier("typeSize")))));
15017 if(!exp->__anon1.op.exp2->expType)
15021 type2 = exp->__anon1.op.exp2->expType = ProcessTypeString("int", 0);
15024 ProcessExpressionType(exp->__anon1.op.exp2);
15028 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)))
15030 if(type1->kind != 8 && type1->__anon1.type->kind == 0)
15031 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15032 exp->expType = type1;
15036 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)))
15038 if(type2->kind != 8 && type2->__anon1.type->kind == 0)
15039 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "void *: unknown size\n", (((void *)0))));
15040 exp->expType = type2;
15044 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))
15046 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "different levels of indirection\n", (((void *)0))));
15050 unsigned int success = 0;
15052 if(type1->kind == 13 && type2->kind == 13)
15054 if(exp->__anon1.op.op == '+')
15055 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "cannot add two pointers\n", (((void *)0))));
15056 else if(exp->__anon1.op.op == '-')
15058 if(MatchTypes(type1->__anon1.type, type2->__anon1.type, (((void *)0)), (((void *)0)), (((void *)0)), 0, 0, 0, 0, 0))
15060 exp->expType = __extension__ ({
15061 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15063 __ecereInstance1->kind = 3, __ecereInstance1->refCount = 1, __ecereInstance1;
15066 if(type1->__anon1.type->kind == 20)
15068 struct Expression * argExp = GetTemplateArgExp(type1->__anon1.type->__anon1.templateParameter, thisClass, 1);
15072 struct Expression * classExp = MkExpMember(argExp, MkIdentifier("dataTypeClass"));
15074 ProcessExpressionType(classExp);
15076 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"))));
15077 ProcessExpressionType(((struct Expression *)(*exp->__anon1.list).first)->__anon1.op.exp2);
15085 if(!success && exp->__anon1.op.exp1->type == 2)
15087 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15090 FreeType(exp->expType);
15091 exp->expType = exp->__anon1.op.exp1->destType;
15092 if(exp->__anon1.op.exp1->destType)
15093 exp->__anon1.op.exp1->destType->refCount++;
15096 else if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15099 FreeType(exp->expType);
15100 exp->expType = exp->__anon1.op.exp2->destType;
15101 if(exp->__anon1.op.exp2->destType)
15102 exp->__anon1.op.exp2->destType->refCount++;
15108 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15111 FreeType(exp->expType);
15112 exp->expType = exp->__anon1.op.exp2->destType;
15113 if(exp->__anon1.op.exp2->destType)
15114 exp->__anon1.op.exp2->destType->refCount++;
15117 else if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15120 FreeType(exp->expType);
15121 exp->expType = exp->__anon1.op.exp1->destType;
15122 if(exp->__anon1.op.exp1->destType)
15123 exp->__anon1.op.exp1->destType->refCount++;
15129 char expString1[10240];
15130 char expString2[10240];
15134 expString1[0] = '\0';
15135 expString2[0] = '\0';
15140 PrintExpression(exp->__anon1.op.exp1, expString1);
15141 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15142 PrintExpression(exp->__anon1.op.exp2, expString2);
15143 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15144 PrintType(exp->__anon1.op.exp1->expType, type1, 0, 1);
15145 PrintType(exp->__anon1.op.exp2->expType, type2, 0, 1);
15147 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1, expString2, type2);
15151 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)
15153 if(exp->__anon1.op.exp1->destType)
15154 FreeType(exp->__anon1.op.exp1->destType);
15155 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15156 if(type2->__anon1._class->__anon1.registered->dataType)
15157 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15158 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15159 exp->expType = type2;
15163 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)
15165 if(exp->__anon1.op.exp2->destType)
15166 FreeType(exp->__anon1.op.exp2->destType);
15167 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15168 if(type1->__anon1._class->__anon1.registered->dataType)
15169 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15170 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15171 exp->expType = type1;
15177 unsigned int valid = 0;
15179 if(!boolResult && useSideUnit && type1 && type1->kind == 8 && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3 && type2 && type2->kind != 8)
15181 if(exp->__anon1.op.exp2->destType)
15182 FreeType(exp->__anon1.op.exp2->destType);
15183 if(!type1->__anon1._class->__anon1.registered->dataType)
15184 type1->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type1->__anon1._class->__anon1.registered->dataTypeString, 0);
15185 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15186 exp->__anon1.op.exp2->destType->refCount++;
15187 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15190 type2 = exp->__anon1.op.exp2->destType;
15193 exp->expType = type2;
15196 if(!boolResult && useSideUnit && type2 && type2->kind == 8 && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3 && type1 && type1->kind != 8)
15198 if(exp->__anon1.op.exp1->destType)
15199 FreeType(exp->__anon1.op.exp1->destType);
15200 if(!type2->__anon1._class->__anon1.registered->dataType)
15201 type2->__anon1._class->__anon1.registered->dataType = ProcessTypeString(type2->__anon1._class->__anon1.registered->dataTypeString, 0);
15202 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15203 exp->__anon1.op.exp1->destType->refCount++;
15204 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15205 type1 = exp->__anon1.op.exp1->destType;
15206 exp->expType = type1;
15209 if(!boolResult || exp->__anon1.op.op == '>' || exp->__anon1.op.op == '<' || exp->__anon1.op.op == GE_OP || exp->__anon1.op.op == LE_OP)
15211 unsigned int op1IsEnum = type1 && type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4;
15212 unsigned int op2IsEnum = type2 && type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4;
15214 if(exp->__anon1.op.op == '*' || exp->__anon1.op.op == '/' || exp->__anon1.op.op == '-' || exp->__anon1.op.op == '|' || exp->__anon1.op.op == '^')
15216 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15218 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15221 FreeType(exp->expType);
15222 exp->expType = exp->__anon1.op.exp2->expType;
15223 if(exp->__anon1.op.exp2->expType)
15224 exp->__anon1.op.exp2->expType->refCount++;
15228 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15230 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15233 FreeType(exp->expType);
15234 exp->expType = exp->__anon1.op.exp1->expType;
15235 if(exp->__anon1.op.exp1->expType)
15236 exp->__anon1.op.exp1->expType->refCount++;
15243 if(op1IsEnum && exp->__anon1.op.exp2->expType)
15245 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp2->expType, 0, 0))
15248 FreeType(exp->expType);
15249 exp->expType = exp->__anon1.op.exp1->expType;
15250 if(exp->__anon1.op.exp1->expType)
15251 exp->__anon1.op.exp1->expType->refCount++;
15255 else if(op2IsEnum && exp->__anon1.op.exp1->expType)
15257 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp1->expType, 0, 0))
15260 FreeType(exp->expType);
15261 exp->expType = exp->__anon1.op.exp2->expType;
15262 if(exp->__anon1.op.exp2->expType)
15263 exp->__anon1.op.exp2->expType->refCount++;
15271 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))
15273 if(exp->__anon1.op.exp1->destType)
15274 FreeType(exp->__anon1.op.exp1->destType);
15275 exp->__anon1.op.exp1->destType = type2;
15277 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15280 FreeType(exp->expType);
15281 exp->expType = exp->__anon1.op.exp1->destType;
15282 if(exp->__anon1.op.exp1->destType)
15283 exp->__anon1.op.exp1->destType->refCount++;
15288 if(exp->__anon1.op.exp2->destType)
15289 FreeType(exp->__anon1.op.exp2->destType);
15290 exp->__anon1.op.exp2->destType = type1;
15292 if(CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0))
15295 FreeType(exp->expType);
15296 exp->expType = exp->__anon1.op.exp2->destType;
15297 if(exp->__anon1.op.exp2->destType)
15298 exp->__anon1.op.exp2->destType->refCount++;
15300 else if(type1 && type2)
15302 char expString1[10240];
15303 char expString2[10240];
15304 char type1String[1024];
15305 char type2String[1024];
15307 expString1[0] = '\0';
15308 expString2[0] = '\0';
15309 type1String[0] = '\0';
15310 type2String[0] = '\0';
15313 PrintExpression(exp->__anon1.op.exp1, expString1);
15314 __ecereNameSpace__ecere__sys__ChangeCh(expString1, '\n', ' ');
15315 PrintExpression(exp->__anon1.op.exp2, expString2);
15316 __ecereNameSpace__ecere__sys__ChangeCh(expString2, '\n', ' ');
15317 PrintType(exp->__anon1.op.exp1->expType, type1String, 0, 1);
15318 PrintType(exp->__anon1.op.exp2->expType, type2String, 0, 1);
15320 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expressions %s (%s) and %s (%s)\n", (((void *)0))), expString1, type1String, expString2, type2String);
15321 if(type1->kind == 8 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 4)
15323 exp->expType = exp->__anon1.op.exp1->expType;
15324 if(exp->__anon1.op.exp1->expType)
15325 exp->__anon1.op.exp1->expType->refCount++;
15327 else if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15329 exp->expType = exp->__anon1.op.exp2->expType;
15330 if(exp->__anon1.op.exp2->expType)
15331 exp->__anon1.op.exp2->expType->refCount++;
15339 if(type2->kind == 8 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 4)
15341 struct Type * oldType = exp->__anon1.op.exp1->expType;
15343 exp->__anon1.op.exp1->expType = (((void *)0));
15344 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15347 exp->__anon1.op.exp1->expType = oldType;
15349 if(exp->__anon1.op.exp1->destType)
15350 FreeType(exp->__anon1.op.exp1->destType);
15351 exp->__anon1.op.exp1->destType = type2;
15353 if(CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0))
15356 FreeType(exp->expType);
15357 exp->expType = exp->__anon1.op.exp1->destType;
15358 if(exp->__anon1.op.exp1->destType)
15359 exp->__anon1.op.exp1->destType->refCount++;
15363 else if(type2 && (!type1 || (type2->kind == 8 && type1->kind != 8)))
15365 if(type1 && type2->__anon1._class && type2->__anon1._class->__anon1.registered && type2->__anon1._class->__anon1.registered->type == 3)
15367 if(exp->__anon1.op.exp1->destType)
15368 FreeType(exp->__anon1.op.exp1->destType);
15369 exp->__anon1.op.exp1->destType = type2->__anon1._class->__anon1.registered->dataType;
15370 if(type2->__anon1._class->__anon1.registered->dataType)
15371 type2->__anon1._class->__anon1.registered->dataType->refCount++;
15372 CheckExpressionType(exp->__anon1.op.exp1, exp->__anon1.op.exp1->destType, 0, 0);
15374 if(exp->__anon1.op.op == '!')
15376 exp->expType = MkClassType("bool");
15377 exp->expType->truth = 1;
15381 exp->expType = type2;
15386 else if(type1 && (!type2 || (type1->kind == 8 && type2->kind != 8)))
15388 if(type2 && type1->__anon1._class && type1->__anon1._class->__anon1.registered && type1->__anon1._class->__anon1.registered->type == 3)
15390 if(exp->__anon1.op.exp2->destType)
15391 FreeType(exp->__anon1.op.exp2->destType);
15392 exp->__anon1.op.exp2->destType = type1->__anon1._class->__anon1.registered->dataType;
15393 if(type1->__anon1._class->__anon1.registered->dataType)
15394 type1->__anon1._class->__anon1.registered->dataType->refCount++;
15395 CheckExpressionType(exp->__anon1.op.exp2, exp->__anon1.op.exp2->destType, 0, 0);
15397 exp->expType = type1;
15403 if(exp->__anon1.op.exp1 && !exp->__anon1.op.exp1->expType)
15405 char expString[10000];
15407 expString[0] = '\0';
15410 PrintExpression(exp->__anon1.op.exp1, expString);
15411 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15414 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15416 if(exp->__anon1.op.exp2 && !exp->__anon1.op.exp2->expType)
15418 char expString[10240];
15420 expString[0] = '\0';
15423 PrintExpression(exp->__anon1.op.exp2, expString);
15424 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
15427 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
15431 FreeType(exp->expType);
15432 exp->expType = MkClassType("bool");
15433 exp->expType->truth = 1;
15435 if(exp->__anon1.op.op != SIZEOF)
15436 exp->isConstant = (!exp->__anon1.op.exp1 || exp->__anon1.op.exp1->isConstant) && (!exp->__anon1.op.exp2 || exp->__anon1.op.exp2->isConstant);
15437 if(exp->__anon1.op.op == SIZEOF && exp->__anon1.op.exp2->expType)
15439 DeclareType(exp->__anon1.op.exp2->expType, 0, 0);
15441 if(exp->__anon1.op.op == DELETE && exp->__anon1.op.exp2 && exp->__anon1.op.exp2->expType && __ecereProp_Type_Get_specConst(exp->__anon1.op.exp2->expType))
15442 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "deleting const qualified object\n", (((void *)0))));
15443 yylloc = oldyylloc;
15452 struct Expression * e;
15454 exp->isConstant = 1;
15455 for(e = (*exp->__anon1.list).first; e; e = e->next)
15457 unsigned int inced = 0;
15461 FreeType(e->destType);
15462 e->opDestType = exp->opDestType;
15463 e->destType = exp->destType;
15466 exp->destType->refCount++;
15467 e->destType->count++;
15471 ProcessExpressionType(e);
15473 exp->destType->count--;
15474 if(!exp->expType && !e->next)
15476 exp->expType = e->expType;
15478 e->expType->refCount++;
15481 exp->isConstant = 0;
15483 e = (*exp->__anon1.list).first;
15484 if(!e->next && e->type == 8)
15486 struct Expression * next = exp->next, * prev = exp->prev;
15488 FreeType(exp->expType);
15489 FreeType(exp->destType);
15490 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
15494 ((e ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)e) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(e)) : 0), e = 0);
15495 ProcessExpressionType(exp);
15501 struct Expression * e;
15503 exp->isConstant = 1;
15504 ProcessExpressionType(exp->__anon1.index.exp);
15505 if(!exp->__anon1.index.exp->isConstant)
15506 exp->isConstant = 0;
15507 if(exp->__anon1.index.exp->expType)
15509 struct Type * source = exp->__anon1.index.exp->expType;
15511 if(source->kind == 8 && source->__anon1._class && source->__anon1._class->__anon1.registered)
15513 struct __ecereNameSpace__ecere__com__Class * _class = source->__anon1._class->__anon1.registered;
15514 struct __ecereNameSpace__ecere__com__Class * c = _class->templateClass ? _class->templateClass : _class;
15516 if(_class != containerClass && __ecereNameSpace__ecere__com__eClass_IsDerived(c, containerClass) && _class->templateArgs)
15518 exp->expType = ProcessTypeString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, 0);
15519 if(exp->__anon1.index.index && (*exp->__anon1.index.index).last)
15521 struct Type * type = ProcessTypeString(_class->templateArgs[1].__anon1.__anon1.dataTypeString, 0);
15523 if(type->kind == 8)
15524 type->constant = 1;
15525 else if(type->kind == 13)
15527 struct Type * t = type;
15529 while(t->kind == 13)
15530 t = t->__anon1.type;
15533 ((struct Expression *)(*exp->__anon1.index.index).last)->destType = type;
15538 for(e = (*exp->__anon1.index.index).first; e; e = e->next)
15540 if(!e->next && exp->__anon1.index.exp->expType && exp->__anon1.index.exp->expType->kind == 12 && exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass)
15543 FreeType(e->destType);
15544 e->destType = MkClassType(exp->__anon1.index.exp->expType->__anon1.__anon4.enumClass->string);
15546 ProcessExpressionType(e);
15551 exp->isConstant = 0;
15554 exp->expType = Dereference(exp->__anon1.index.exp->expType);
15556 DeclareType(exp->expType, 0, 0);
15561 struct Expression * e;
15562 struct Type * functionType;
15563 struct Type * methodType = (((void *)0));
15569 PrintExpression(exp->__anon1.call.exp, name);
15570 if(exp->__anon1.call.exp->expType && !exp->__anon1.call.exp->expType->__anon1.__anon2.returnType)
15572 PrintExpression(exp->__anon1.call.exp, name);
15575 if(exp->__anon1.call.exp->type == 0)
15577 struct Expression * idExp = exp->__anon1.call.exp;
15578 struct Identifier * id = idExp->__anon1.__anon1.identifier;
15580 if(!strcmp(id->string, "__builtin_frame_address"))
15582 exp->expType = ProcessTypeString("void *", 1);
15583 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15584 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15587 else if(!strcmp(id->string, "__ENDIAN_PAD"))
15589 exp->expType = ProcessTypeString("int", 1);
15590 if(exp->__anon1.call.arguments && (*exp->__anon1.call.arguments).first)
15591 ProcessExpressionType((*exp->__anon1.call.arguments).first);
15594 else if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min") || !strcmp(id->string, "Sgn") || !strcmp(id->string, "Abs"))
15596 struct Expression * a = (((void *)0));
15597 struct Expression * b = (((void *)0));
15598 struct Expression * tempExp1 = (((void *)0)), * tempExp2 = (((void *)0));
15600 if((!strcmp(id->string, "Max") || !strcmp(id->string, "Min")) && (*exp->__anon1.call.arguments).count == 2)
15602 a = (*exp->__anon1.call.arguments).first;
15603 b = (*exp->__anon1.call.arguments).last;
15607 else if((*exp->__anon1.call.arguments).count == 1)
15609 a = (*exp->__anon1.call.arguments).first;
15614 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Clear((&*exp->__anon1.call.arguments));
15615 idExp->__anon1.__anon1.identifier = (((void *)0));
15616 FreeExpContents(exp);
15617 ProcessExpressionType(a);
15619 ProcessExpressionType(b);
15621 exp->__anon1.list = MkList();
15622 if(a->expType && (!b || b->expType))
15624 if((!a->isConstant && a->type != 0) || (b && !b->isConstant && b->type != 0))
15628 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15629 struct __ecereNameSpace__ecere__sys__OldList * decls = MkList();
15630 struct Declaration * decl;
15631 char temp1[1024], temp2[1024];
15633 GetTypeSpecs(a->expType, specs);
15634 if(a && !a->isConstant && a->type != 0)
15636 sprintf(temp1, "__simpleStruct%d", curContext->simpleID++);
15637 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp1)), (((void *)0))));
15638 tempExp1 = QMkExpId(temp1);
15639 tempExp1->expType = a->expType;
15641 a->expType->refCount++;
15642 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp1), '=', a));
15644 if(b && !b->isConstant && b->type != 0)
15646 sprintf(temp2, "__simpleStruct%d", curContext->simpleID++);
15647 ListAdd(decls, MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier(temp2)), (((void *)0))));
15648 tempExp2 = QMkExpId(temp2);
15649 tempExp2->expType = b->expType;
15651 b->expType->refCount++;
15652 ListAdd(exp->__anon1.list, MkExpOp(CopyExpression(tempExp2), '=', b));
15654 decl = MkDeclaration(specs, decls);
15655 if(!curCompound->__anon1.compound.declarations)
15656 curCompound->__anon1.compound.declarations = MkList();
15657 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*curCompound->__anon1.compound.declarations), (((void *)0)), decl);
15661 if(!strcmp(id->string, "Max") || !strcmp(id->string, "Min"))
15663 int op = (!strcmp(id->string, "Max")) ? '>' : '<';
15665 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), op, CopyExpression(tempExp2)))), MkListOne(CopyExpression(tempExp1)), CopyExpression(tempExp2)));
15666 exp->expType = a->expType;
15668 a->expType->refCount++;
15670 else if(!strcmp(id->string, "Abs"))
15672 ListAdd(exp->__anon1.list, MkExpCondition(MkExpBrackets(MkListOne(MkExpOp(CopyExpression(tempExp1), '<', MkExpConstant("0")))), MkListOne(MkExpOp((((void *)0)), '-', CopyExpression(tempExp1))), CopyExpression(tempExp1)));
15673 exp->expType = a->expType;
15675 a->expType->refCount++;
15677 else if(!strcmp(id->string, "Sgn"))
15679 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"))))));
15680 exp->expType = ProcessTypeString("int", 0);
15682 FreeExpression(tempExp1);
15684 FreeExpression(tempExp2);
15685 FreeIdentifier(id);
15691 struct Type * dummy = (dummy = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type), dummy->count = 1, dummy->refCount = 1, dummy);
15693 if(!exp->__anon1.call.exp->destType)
15695 exp->__anon1.call.exp->destType = dummy;
15698 ProcessExpressionType(exp->__anon1.call.exp);
15699 if(exp->__anon1.call.exp->destType == dummy)
15702 exp->__anon1.call.exp->destType = (((void *)0));
15706 functionType = exp->__anon1.call.exp->expType;
15707 if(functionType && functionType->kind == 16)
15709 methodType = functionType;
15710 functionType = methodType->__anon1.__anon3.method->dataType;
15711 if(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass)
15713 char typeString[1024];
15715 typeString[0] = '\0';
15717 struct Symbol * back = functionType->__anon1.__anon2.thisClass;
15719 functionType->__anon1.__anon2.thisClass = (((void *)0));
15720 PrintType(functionType, typeString, 1, 1);
15721 functionType->__anon1.__anon2.thisClass = back;
15723 if(strstr(typeString, "thisclass"))
15725 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
15726 struct Declarator * decl;
15729 struct Context * context = SetupTemplatesContext(exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15731 decl = SpecDeclFromString(typeString, specs, (((void *)0)));
15732 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))
15733 thisClassParams = 0;
15734 ReplaceThisClassSpecifiers(specs, exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass);
15736 struct __ecereNameSpace__ecere__com__Class * backupThisClass = thisClass;
15738 thisClass = exp->__anon1.call.exp->expType->__anon1.__anon3.usedClass;
15739 ProcessDeclarator(decl);
15740 thisClass = backupThisClass;
15742 thisClassParams = 1;
15743 functionType = ProcessType(specs, decl);
15744 functionType->refCount = 0;
15745 FinishTemplatesContext(context);
15747 FreeList(specs, (void *)(FreeSpecifier));
15748 FreeDeclarator(decl);
15752 if(functionType && functionType->kind == 13 && functionType->__anon1.type && functionType->__anon1.type->kind == 11)
15754 struct Type * type = functionType->__anon1.type;
15756 if(!functionType->refCount)
15758 functionType->__anon1.type = (((void *)0));
15759 FreeType(functionType);
15761 functionType = type;
15763 if(functionType && functionType->kind != 11)
15765 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "called object %s is not a function\n", (((void *)0))), name);
15767 else if(functionType)
15769 unsigned int emptyParams = 0, noParams = 0;
15770 struct Expression * e = exp->__anon1.call.arguments ? (*exp->__anon1.call.arguments).first : (((void *)0));
15771 struct Type * type = functionType->__anon1.__anon2.params.first;
15772 struct Expression * memberExp = (exp->__anon1.call.exp->type == 8) ? exp->__anon1.call.exp : (((void *)0));
15774 struct Location oldyylloc = yylloc;
15778 if(functionType->extraParam && e && functionType->__anon1.__anon2.thisClass)
15780 e->destType = MkClassType(functionType->__anon1.__anon2.thisClass->string);
15783 if(!functionType->__anon1.__anon2.staticMethod && !functionType->extraParam)
15785 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)
15787 type = MkClassType(memberExp->__anon1.member.exp->expType->__anon1._class->string);
15790 e->destType = type;
15792 type = functionType->__anon1.__anon2.params.first;
15795 type->refCount = 0;
15797 else if(!memberExp && (functionType->__anon1.__anon2.thisClass || (methodType && methodType->__anon1.__anon3.methodClass)))
15799 type = MkClassType(functionType->__anon1.__anon2.thisClass ? functionType->__anon1.__anon2.thisClass->string : (methodType ? methodType->__anon1.__anon3.methodClass->fullName : (((void *)0))));
15800 type->byReference = functionType->byReference;
15801 type->typedByReference = functionType->typedByReference;
15804 if(e->next && type->kind == 8 && (functionType && functionType->__anon1.__anon2.thisClass) && functionType->classObjectType == 2)
15806 e->destType = type;
15808 type = functionType->__anon1.__anon2.params.first;
15811 type->refCount = 0;
15814 if(type && type->kind == 0)
15817 if(!type->refCount)
15819 type = (((void *)0));
15821 for(; e; e = e->next)
15823 if(!type && !emptyParams)
15826 if(methodType && methodType->__anon1.__anon3.methodClass)
15827 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);
15829 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);
15832 if(methodType && type && type->kind == 20 && type->__anon1.templateParameter->type == 0)
15834 struct Type * templatedType = (((void *)0));
15835 struct __ecereNameSpace__ecere__com__Class * _class = methodType->__anon1.__anon3.usedClass;
15836 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
15839 if(_class && _class->templateArgs)
15841 struct __ecereNameSpace__ecere__com__Class * sClass;
15843 for(sClass = _class; sClass; sClass = sClass->base)
15845 if(sClass->templateClass)
15846 sClass = sClass->templateClass;
15848 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
15850 if(curParam->type == 0 && !strcmp(type->__anon1.templateParameter->identifier->string, curParam->name))
15852 struct __ecereNameSpace__ecere__com__Class * nextClass;
15854 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
15856 if(nextClass->templateClass)
15857 nextClass = nextClass->templateClass;
15858 id += nextClass->templateParams.count;
15868 if(curParam && _class->templateArgs[id].__anon1.__anon1.dataTypeString)
15870 unsigned int constant = type->constant;
15871 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = _class->templateArgs[id];
15874 struct Context * context = SetupTemplatesContext(_class);
15876 templatedType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
15877 FinishTemplatesContext(context);
15879 if(templatedType->kind == 8 && constant)
15880 templatedType->constant = 1;
15881 else if(templatedType->kind == 13)
15883 struct Type * t = templatedType->__anon1.type;
15885 while(t->kind == 13)
15886 t = t->__anon1.type;
15888 t->constant = constant;
15890 e->destType = templatedType;
15893 templatedType->passAsTemplate = 1;
15898 e->destType = type;
15905 if(type && type->kind == 14 && type->prev && type->prev->kind == 8 && type->prev->classObjectType)
15907 e->destType = type->prev;
15908 e->destType->refCount++;
15912 e->destType = type;
15917 if(type && type->kind != 14)
15919 struct Type * next = type->next;
15921 if(!type->refCount)
15926 if(type && type->kind != 14)
15928 if(methodType && methodType->__anon1.__anon3.methodClass)
15929 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);
15931 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);
15933 yylloc = oldyylloc;
15934 if(type && !type->refCount)
15939 functionType = __extension__ ({
15940 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15942 __ecereInstance1->refCount = 0, __ecereInstance1->kind = 11, __ecereInstance1;
15944 if(exp->__anon1.call.exp->type == 0)
15946 char * string = exp->__anon1.call.exp->__anon1.__anon1.identifier->string;
15950 struct Symbol * symbol;
15951 struct Location oldyylloc = yylloc;
15953 yylloc = exp->__anon1.call.exp->__anon1.__anon1.identifier->loc;
15954 if(strstr(string, "__builtin_") == string)
15958 functionType->__anon1.__anon2.returnType = exp->destType;
15959 exp->destType->refCount++;
15963 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "%s undefined; assuming extern returning int\n", (((void *)0))), string);
15964 symbol = __extension__ ({
15965 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
15967 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString(string), __ecereInstance1->type = ProcessTypeString("int()", 1), __ecereInstance1;
15969 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)symbol);
15970 if(strstr(symbol->string, "::"))
15971 globalContext->hasNameSpace = 1;
15972 yylloc = oldyylloc;
15975 else if(exp->__anon1.call.exp->type == 8)
15979 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "callable object undefined; extern assuming returning int\n", (((void *)0))));
15980 if(!functionType->__anon1.__anon2.returnType)
15982 functionType->__anon1.__anon2.returnType = __extension__ ({
15983 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
15985 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 3, __ecereInstance1;
15989 if(functionType && functionType->kind == 11)
15991 exp->expType = functionType->__anon1.__anon2.returnType;
15992 if(functionType->__anon1.__anon2.returnType)
15993 functionType->__anon1.__anon2.returnType->refCount++;
15994 if(!functionType->refCount)
15995 FreeType(functionType);
15997 if(exp->__anon1.call.arguments)
15999 for(e = (*exp->__anon1.call.arguments).first; e; e = e->next)
16000 ProcessExpressionType(e);
16006 struct Type * type;
16007 struct Location oldyylloc = yylloc;
16008 unsigned int thisPtr;
16009 struct Expression * checkExp = exp->__anon1.member.exp;
16013 if(checkExp->type == 11)
16014 checkExp = checkExp->__anon1.cast.exp;
16015 else if(checkExp->type == 5)
16016 checkExp = checkExp->__anon1.list ? (*checkExp->__anon1.list).first : (((void *)0));
16020 thisPtr = (checkExp && checkExp->type == 0 && !strcmp(checkExp->__anon1.__anon1.identifier->string, "this"));
16021 exp->thisPtr = thisPtr;
16022 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
16024 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
16026 ProcessExpressionType(exp->__anon1.member.exp);
16027 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)
16029 exp->isConstant = 0;
16032 exp->isConstant = exp->__anon1.member.exp->isConstant;
16033 type = exp->__anon1.member.exp->expType;
16035 if(type && (type->kind == 20))
16037 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
16038 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param = (((void *)0));
16042 for(param = _class->templateParams.first; param; param = param->next)
16044 if(param->type == 1 && exp->__anon1.member.member && exp->__anon1.member.member->string && !strcmp(param->name, exp->__anon1.member.member->string))
16048 if(param && param->defaultArg.__anon1.__anon2.__anon1.member)
16050 struct Expression * argExp = GetTemplateArgExpByName(param->name, thisClass, 1);
16054 struct Expression * expMember = exp->__anon1.member.exp;
16055 struct Declarator * decl;
16056 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16057 char thisClassTypeString[1024];
16059 FreeIdentifier(exp->__anon1.member.member);
16060 ProcessExpressionType(argExp);
16062 char * colon = strstr(param->defaultArg.__anon1.__anon2.memberString, "::");
16066 memcpy(thisClassTypeString, param->defaultArg.__anon1.__anon2.memberString, colon - param->defaultArg.__anon1.__anon2.memberString);
16067 thisClassTypeString[colon - param->defaultArg.__anon1.__anon2.memberString] = '\0';
16070 strcpy(thisClassTypeString, _class->fullName);
16072 decl = SpecDeclFromString(param->defaultArg.__anon1.__anon2.__anon1.member->dataTypeString, specs, (((void *)0)));
16073 exp->expType = ProcessType(specs, decl);
16074 if(exp->expType->kind == 8 && exp->expType->__anon1._class && exp->expType->__anon1._class->__anon1.registered && exp->expType->__anon1._class->__anon1.registered->templateClass)
16076 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16077 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16078 int paramCount = 0;
16079 int lastParam = -1;
16080 char templateString[1024];
16081 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16083 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16084 for(cClass = expClass; cClass; cClass = cClass->base)
16088 for(param = cClass->templateParams.first; param; param = param->next)
16091 struct __ecereNameSpace__ecere__com__Class * sClass;
16092 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16094 for(sClass = cClass->base; sClass; sClass = sClass->base)
16095 id += sClass->templateParams.count;
16096 arg = expClass->templateArgs[id];
16097 for(sClass = _class; sClass; sClass = sClass->base)
16099 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * cParam;
16101 struct __ecereNameSpace__ecere__com__Class * nextClass;
16103 for(nextClass = sClass->base; nextClass; nextClass = nextClass->base)
16104 p += nextClass->templateParams.count;
16105 for(cParam = sClass->templateParams.first; cParam; cParam = cParam->next, p++)
16107 if(cParam->type == 0 && arg.__anon1.__anon1.dataTypeString && !strcmp(cParam->name, arg.__anon1.__anon1.dataTypeString))
16109 if(_class->templateArgs && arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16111 arg.__anon1.__anon1.dataTypeString = _class->templateArgs[p].__anon1.__anon1.dataTypeString;
16112 arg.__anon1.__anon1.dataTypeClass = _class->templateArgs[p].__anon1.__anon1.dataTypeClass;
16119 char argument[256];
16121 argument[0] = '\0';
16122 switch(param->type)
16126 char expString[1024];
16127 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16128 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16129 struct Expression * exp;
16130 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16132 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16133 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16134 ProcessExpressionType(exp);
16135 ComputeExpression(exp);
16136 expString[0] = '\0';
16137 PrintExpression(exp, expString);
16138 strcat(argument, expString);
16139 FreeExpression(exp);
16144 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16149 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16151 if(!strcmp(arg.__anon1.__anon1.dataTypeString, "thisclass"))
16152 strcat(argument, thisClassTypeString);
16154 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16162 strcat(templateString, ", ");
16163 if(lastParam != p - 1)
16165 strcat(templateString, param->name);
16166 strcat(templateString, " = ");
16168 strcat(templateString, argument);
16177 int len = strlen(templateString);
16179 if(templateString[len - 1] == '>')
16180 templateString[len++] = ' ';
16181 templateString[len++] = '>';
16182 templateString[len++] = '\0';
16185 struct Context * context = SetupTemplatesContext(_class);
16187 FreeType(exp->expType);
16188 exp->expType = ProcessTypeString(templateString, 0);
16189 FinishTemplatesContext(context);
16192 if(!__ecereProp_Type_Get_isPointerType(expMember->expType))
16193 expMember = MkExpCast(MkTypeName(MkListOne(MkSpecifierName("uintptr")), (((void *)0))), expMember);
16195 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")))))))));
16198 else if(type->__anon1.templateParameter && type->__anon1.templateParameter->type == 0 && (type->__anon1.templateParameter->__anon1.dataType || type->__anon1.templateParameter->dataTypeString))
16200 type = ProcessTemplateParameterType(type->__anon1.templateParameter);
16203 if(type && (type->kind == 20))
16205 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)))
16207 struct Identifier * id = exp->__anon1.member.member;
16208 int typeKind = type->kind;
16209 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));
16211 if(typeKind == 19 && exp->__anon1.member.exp->type == 24)
16213 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "ecere::com::Class");
16218 if(typeKind == 3 || typeKind == 15)
16219 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "int");
16222 if(type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
16224 _class = type->__anon1._class->__anon1.registered;
16226 else if((type->kind == 12 || type->kind == 13) && type->__anon1.type && type->__anon1.type->kind == 1)
16228 _class = FindClass("char *")->__anon1.registered;
16230 else if(type->kind == 13)
16232 _class = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "uintptr");
16233 FreeType(exp->expType);
16234 exp->expType = ProcessTypeString("uintptr", 0);
16235 exp->byReference = 1;
16239 char string[1024] = "";
16240 struct Symbol * classSym;
16242 PrintTypeNoConst(type, string, 0, 1);
16243 classSym = FindClass(string);
16245 _class = classSym->__anon1.registered;
16251 struct __ecereNameSpace__ecere__com__Property * prop = (((void *)0));
16252 struct __ecereNameSpace__ecere__com__Method * method = (((void *)0));
16253 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
16254 struct __ecereNameSpace__ecere__com__Property * revConvert = (((void *)0));
16255 struct __ecereNameSpace__ecere__com__ClassProperty * classProp = (((void *)0));
16257 if(id && id->_class && id->_class->__anon1.__anon1.name && !strcmp(id->_class->__anon1.__anon1.name, "property"))
16258 exp->__anon1.member.memberType = 1;
16259 if(id && id->_class && type->__anon1._class && !__ecereNameSpace__ecere__com__eClass_IsDerived(type->__anon1._class->__anon1.registered, _class))
16260 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "invalid class specifier %s for object of class %s\n", (((void *)0))), _class->fullName, type->__anon1._class->string);
16263 if((exp->__anon1.member.memberType == 0 && thisPtr) || exp->__anon1.member.memberType == 3)
16265 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16266 if(member && member->_class != (_class->templateClass ? _class->templateClass : _class) && exp->__anon1.member.memberType != 3)
16268 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16270 member = (((void *)0));
16272 if(!member && !prop)
16273 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16274 if((member && member->_class == (_class->templateClass ? _class->templateClass : _class)) || (prop && prop->_class == (_class->templateClass ? _class->templateClass : _class)))
16275 exp->__anon1.member.thisPtr = 1;
16279 unsigned int useMemberForNonConst = 0;
16283 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, (((void *)0)));
16284 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);
16285 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16286 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, (((void *)0)), (((void *)0)), (((void *)0)));
16288 if((!prop || useMemberForNonConst) && !member)
16290 method = useMemberForNonConst ? (((void *)0)) : __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, (((void *)0)));
16293 prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, id->string, privateModule);
16294 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);
16295 if(useMemberForNonConst || !id->_class || !id->_class->__anon1.__anon1.name || strcmp(id->_class->__anon1.__anon1.name, "property"))
16296 member = __ecereNameSpace__ecere__com__eClass_FindDataMember(_class, id->string, privateModule, (((void *)0)), (((void *)0)));
16301 if(useMemberForNonConst || (member->_class != prop->_class && !id->_class && __ecereNameSpace__ecere__com__eClass_IsDerived(member->_class, prop->_class)))
16302 prop = (((void *)0));
16304 member = (((void *)0));
16308 if(!prop && !member && !method)
16309 method = __ecereNameSpace__ecere__com__eClass_FindMethod(_class, id->string, privateModule);
16310 if(!prop && !member && !method)
16314 classProp = __ecereNameSpace__ecere__com__eClass_FindClassProperty(type->__anon1._class->__anon1.registered, exp->__anon1.member.member->string);
16317 exp->__anon1.member.memberType = 5;
16318 exp->expType = ProcessTypeString(classProp->dataTypeString, 0);
16322 char structName[1024];
16323 struct Identifier * id = exp->__anon1.member.member;
16324 struct Expression * classExp = exp->__anon1.member.exp;
16327 FreeType(classExp->expType);
16328 classExp->expType = ProcessTypeString("ecere::com::Class", 0);
16329 strcpy(structName, "__ecereClassData_");
16330 FullClassNameCat(structName, type->__anon1._class->string, 0);
16332 exp->__anon1.member.member = id;
16333 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"))))))));
16335 ProcessExpressionType(exp);
16341 struct Symbol * classSym = FindClass(id->string);
16345 struct __ecereNameSpace__ecere__com__Class * convertClass = classSym->__anon1.registered;
16348 revConvert = __ecereNameSpace__ecere__com__eClass_FindProperty(convertClass, _class->fullName, privateModule);
16352 if(exp->__anon1.member.exp->destType)
16353 FreeType(exp->__anon1.member.exp->destType);
16355 if(method && !method->_class->symbol)
16356 method->_class->symbol = FindClass(method->_class->fullName);
16357 if(prop && !prop->_class->symbol)
16358 prop->_class->symbol = FindClass(prop->_class->fullName);
16359 exp->__anon1.member.exp->destType = __extension__ ({
16360 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16362 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 8, __ecereInstance1->__anon1._class = prop ? prop->_class->symbol : method ? method->_class->symbol : _class->symbol, __ecereInstance1;
16367 exp->__anon1.member.memberType = 1;
16368 if(!prop->dataType)
16369 ProcessPropertyType(prop);
16370 exp->expType = prop->dataType;
16371 if(!strcmp(_class->base->fullName, "eda::Row") && !exp->expType->constant && !exp->destType)
16373 struct Type * type = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16375 CopyTypeInto(type, exp->expType);
16376 type->refCount = 1;
16377 type->constant = 1;
16378 exp->expType = type;
16380 else if(prop->dataType)
16381 prop->dataType->refCount++;
16385 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16387 FreeExpContents(exp);
16389 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16390 ProcessExpressionType(exp);
16393 exp->__anon1.member.memberType = 3;
16394 DeclareStruct(_class->fullName, 0);
16395 if(!member->dataType)
16397 struct Context * context = SetupTemplatesContext(_class);
16399 member->dataType = ProcessTypeString(member->dataTypeString, 0);
16400 FinishTemplatesContext(context);
16402 exp->expType = member->dataType;
16403 if(member->dataType)
16404 member->dataType->refCount++;
16406 else if(revConvert)
16408 exp->__anon1.member.memberType = 4;
16409 exp->expType = MkClassType(revConvert->_class->fullName);
16414 exp->__anon1.member.memberType = 2;
16416 if(!method->dataType)
16417 ProcessMethodType(method);
16418 exp->expType = __extension__ ({
16419 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16421 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 16, __ecereInstance1->__anon1.__anon3.method = method, __ecereInstance1;
16423 exp->expType->__anon1.__anon3.methodClass = (id && id->_class) ? _class : (((void *)0));
16424 exp->expType->__anon1.__anon3.usedClass = _class;
16426 else if(!classProp)
16428 if(exp->__anon1.member.exp->expType->classObjectType == 2 && !strcmp(exp->__anon1.member.member->string, "_class"))
16430 FreeExpContents(exp);
16432 exp->__anon1.__anon1.identifier = MkIdentifier("class");
16433 FreeType(exp->expType);
16434 exp->expType = MkClassType("ecere::com::Class");
16437 yylloc = exp->__anon1.member.member->loc;
16438 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't find member %s in class %s\n", (((void *)0))), id->string, _class->fullName);
16440 __ecereNameSpace__ecere__com__eClass_AddDataMember(_class, id->string, "int", 0, 0, 1);
16442 if(_class && exp->expType)
16444 struct __ecereNameSpace__ecere__com__Class * tClass;
16446 tClass = type->__anon1._class && type->__anon1._class->__anon1.registered ? type->__anon1._class->__anon1.registered : _class;
16447 while(tClass && !tClass->templateClass)
16448 tClass = tClass->base;
16449 if(tClass && exp->expType->kind == 20 && exp->expType->__anon1.templateParameter->type == 0)
16452 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16453 struct __ecereNameSpace__ecere__com__Class * sClass;
16455 for(sClass = tClass; sClass; sClass = sClass->base)
16458 if(sClass->templateClass)
16459 sClass = sClass->templateClass;
16460 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16462 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.templateParameter->identifier->string, curParam->name))
16464 for(sClass = sClass->base; sClass; sClass = sClass->base)
16465 id += sClass->templateParams.count;
16473 if(curParam && tClass->templateArgs[id].__anon1.__anon1.dataTypeString)
16475 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16476 struct Context * context = SetupTemplatesContext(tClass);
16477 unsigned int constant = exp->expType->constant;
16479 FreeType(exp->expType);
16480 exp->expType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16481 if(exp->expType->kind == 8 && constant)
16482 exp->expType->constant = 1;
16483 else if(exp->expType->kind == 13)
16485 struct Type * t = exp->expType->__anon1.type;
16487 while(t->kind == 13)
16488 t = t->__anon1.type;
16490 t->constant = constant;
16494 if(exp->expType->kind == 21)
16496 FreeType(exp->expType);
16497 exp->expType = ReplaceThisClassType(_class);
16499 if(tClass->templateClass && (exp->expType->kind != 20 || (!exp->expType->__anon1.templateParameter || (!exp->expType->__anon1.templateParameter->dataTypeString && !exp->expType->__anon1.templateParameter->__anon1.dataType))))
16500 exp->expType->passAsTemplate = 1;
16503 exp->destType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16504 if(exp->destType->kind == 8 && constant)
16505 exp->destType->constant = 1;
16506 else if(exp->destType->kind == 13)
16508 struct Type * t = exp->destType->__anon1.type;
16510 while(t->kind == 13)
16511 t = t->__anon1.type;
16513 t->constant = constant;
16515 if(exp->destType->kind == 21)
16517 FreeType(exp->destType);
16518 exp->destType = ReplaceThisClassType(_class);
16522 FinishTemplatesContext(context);
16525 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)
16528 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * curParam = (((void *)0));
16529 struct __ecereNameSpace__ecere__com__Class * sClass;
16531 for(sClass = tClass; sClass; sClass = sClass->base)
16534 if(sClass->templateClass)
16535 sClass = sClass->templateClass;
16536 for(curParam = sClass->templateParams.first; curParam; curParam = curParam->next)
16538 if(curParam->type == 0 && !strcmp(exp->expType->__anon1.type->__anon1.templateParameter->identifier->string, curParam->name))
16540 for(sClass = sClass->base; sClass; sClass = sClass->base)
16541 id += sClass->templateParams.count;
16551 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg = tClass->templateArgs[id];
16552 struct Context * context = SetupTemplatesContext(tClass);
16553 struct Type * basicType;
16555 basicType = ProcessTypeString(arg.__anon1.__anon1.dataTypeString, 0);
16558 if(basicType->kind == 21)
16560 FreeType(basicType);
16561 basicType = ReplaceThisClassType(_class);
16563 FreeType(exp->expType);
16564 exp->expType = __extension__ ({
16565 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16567 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 13, __ecereInstance1->__anon1.type = basicType, __ecereInstance1;
16571 exp->destType = exp->expType;
16572 exp->destType->refCount++;
16575 struct Expression * newExp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
16576 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16577 struct Declarator * decl;
16579 decl = SpecDeclFromString(arg.__anon1.__anon1.dataTypeString, specs, (((void *)0)));
16582 exp->destType->refCount++;
16584 exp->expType->refCount++;
16586 exp->__anon1.cast.typeName = MkTypeName(specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl));
16587 exp->__anon1.cast.exp = newExp;
16590 FinishTemplatesContext(context);
16593 else if(tClass && exp->expType->kind == 8 && exp->expType->__anon1._class && strchr(exp->expType->__anon1._class->string, '<'))
16595 struct __ecereNameSpace__ecere__com__Class * expClass = exp->expType->__anon1._class->__anon1.registered;
16599 struct __ecereNameSpace__ecere__com__Class * cClass = (((void *)0));
16601 int paramCount = 0;
16602 int lastParam = -1;
16603 char templateString[1024];
16604 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * param;
16606 sprintf(templateString, "%s<", expClass->templateClass->fullName);
16607 while(cClass != expClass)
16609 struct __ecereNameSpace__ecere__com__Class * sClass;
16611 for(sClass = expClass; sClass && sClass->base != cClass; sClass = sClass->base)
16614 for(param = cClass->templateParams.first; param; param = param->next)
16616 struct __ecereNameSpace__ecere__com__Class * cClassCur = (((void *)0));
16618 struct __ecereNameSpace__ecere__com__ClassTemplateParameter * paramCur = (((void *)0));
16619 struct __ecereNameSpace__ecere__com__ClassTemplateArgument arg;
16621 while(cClassCur != tClass && !paramCur)
16623 struct __ecereNameSpace__ecere__com__Class * sClassCur;
16625 for(sClassCur = tClass; sClassCur && sClassCur->base != cClassCur; sClassCur = sClassCur->base)
16627 cClassCur = sClassCur;
16628 for(paramCur = cClassCur->templateParams.first; paramCur; paramCur = paramCur->next)
16630 if(!strcmp(paramCur->name, param->name))
16637 if(paramCur && paramCur->type == 0)
16638 arg = tClass->templateArgs[cp];
16640 arg = expClass->templateArgs[p];
16642 char argument[256];
16644 argument[0] = '\0';
16645 switch(param->type)
16649 char expString[1024];
16650 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
16651 struct Declarator * decl = SpecDeclFromString(param->__anon1.dataTypeString, specs, (((void *)0)));
16652 struct Expression * exp;
16653 char * string = PrintHexUInt64(arg.__anon1.expression.__anon1.ui64);
16655 exp = MkExpCast(MkTypeName(specs, decl), MkExpConstant(string));
16656 (__ecereNameSpace__ecere__com__eSystem_Delete(string), string = 0);
16657 ProcessExpressionType(exp);
16658 ComputeExpression(exp);
16659 expString[0] = '\0';
16660 PrintExpression(exp, expString);
16661 strcat(argument, expString);
16662 FreeExpression(exp);
16667 strcat(argument, arg.__anon1.__anon2.__anon1.member->name);
16672 if(arg.__anon1.__anon1.dataTypeString && (!param->defaultArg.__anon1.__anon1.dataTypeString || strcmp(arg.__anon1.__anon1.dataTypeString, param->defaultArg.__anon1.__anon1.dataTypeString)))
16673 strcat(argument, arg.__anon1.__anon1.dataTypeString);
16680 strcat(templateString, ", ");
16681 if(lastParam != p - 1)
16683 strcat(templateString, param->name);
16684 strcat(templateString, " = ");
16686 strcat(templateString, argument);
16695 int len = strlen(templateString);
16697 if(templateString[len - 1] == '>')
16698 templateString[len++] = ' ';
16699 templateString[len++] = '>';
16700 templateString[len++] = '\0';
16702 FreeType(exp->expType);
16704 struct Context * context = SetupTemplatesContext(tClass);
16706 exp->expType = ProcessTypeString(templateString, 0);
16707 FinishTemplatesContext(context);
16714 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)");
16716 else if(type && (type->kind == 9 || type->kind == 10))
16718 struct Type * memberType = exp->__anon1.member.member ? FindMember(type, exp->__anon1.member.member->string) : (((void *)0));
16722 exp->expType = memberType;
16724 memberType->refCount++;
16729 char expString[10240];
16731 expString[0] = '\0';
16734 PrintExpression(exp, expString);
16735 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
16737 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "member operator on non-structure type expression %s\n", (((void *)0))), expString);
16739 if(exp->expType && exp->expType->kind == 21 && (!exp->destType || exp->destType->kind != 21))
16741 if(type && (type->kind == 8 || type->kind == 19 || type->kind == 3 || type->kind == 15))
16743 struct Identifier * id = exp->__anon1.member.member;
16744 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));
16748 FreeType(exp->expType);
16749 exp->expType = ReplaceThisClassType(_class);
16753 yylloc = oldyylloc;
16758 struct Type * destType = exp->destType;
16760 if(exp->__anon1.member.member && exp->__anon1.member.member->_class && exp->__anon1.member.member->_class->__anon1.__anon1.name)
16762 exp->__anon1.member.member->classSym = exp->__anon1.member.member->_class->__anon1.__anon1.symbol;
16764 exp->__anon1.member.exp = MkExpBrackets(MkListOne(MkExpOp((((void *)0)), '*', exp->__anon1.member.exp)));
16768 ProcessExpressionType(exp);
16775 struct Symbol * classSym = exp->__anon1._class->__anon1.__anon1.symbol;
16777 if(classSym && classSym->__anon1.registered)
16779 if(classSym->__anon1.registered->type == 5)
16784 DeclareStruct(classSym->string, 0);
16785 FreeSpecifier(exp->__anon1._class);
16787 FullClassNameCat(name, classSym->string, 0);
16788 exp->__anon1.typeName = MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(name), (((void *)0)))), (((void *)0)));
16792 if(classSym->__anon1.registered->fixed)
16794 FreeSpecifier(exp->__anon1._class);
16795 exp->__anon1.__anon1.constant = PrintUInt(classSym->__anon1.registered->templateClass ? classSym->__anon1.registered->templateClass->structSize : classSym->__anon1.registered->structSize);
16800 char className[1024];
16802 strcpy(className, "__ecereClass_");
16803 FullClassNameCat(className, classSym->string, 1);
16804 DeclareClass(classSym, className);
16805 FreeExpContents(exp);
16807 exp->__anon1.member.exp = MkExpIdentifier(MkIdentifier(className));
16808 exp->__anon1.member.member = MkIdentifier("structSize");
16812 exp->expType = __extension__ ({
16813 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16815 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16821 struct Type * type = ProcessType(exp->__anon1.typeName->qualifiers, exp->__anon1.typeName->declarator);
16823 exp->expType = __extension__ ({
16824 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
16826 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 23, __ecereInstance1;
16828 exp->isConstant = 1;
16829 DeclareType(type, 0, 0);
16835 struct Type * type = ProcessType(exp->__anon1.cast.typeName->qualifiers, exp->__anon1.cast.typeName->declarator);
16838 FreeType(exp->__anon1.cast.exp->destType);
16839 exp->__anon1.cast.exp->destType = type;
16842 ProcessExpressionType(exp->__anon1.cast.exp);
16845 exp->expType = type;
16846 if(!exp->__anon1.cast.exp->needCast && !NeedCast(exp->__anon1.cast.exp->expType, type))
16848 void * prev = exp->prev, * next = exp->next;
16849 struct Type * expType = exp->__anon1.cast.exp->destType;
16850 struct Expression * castExp = exp->__anon1.cast.exp;
16851 struct Type * destType = exp->destType;
16854 expType->refCount++;
16855 FreeType(exp->expType);
16856 FreeTypeName(exp->__anon1.cast.typeName);
16858 FreeType(exp->expType);
16859 FreeType(exp->destType);
16860 exp->expType = expType;
16861 exp->destType = destType;
16862 ((castExp ? (__ecereClass_Expression->Destructor ? __ecereClass_Expression->Destructor((void *)castExp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(castExp)) : 0), castExp = 0);
16868 exp->isConstant = exp->__anon1.cast.exp->isConstant;
16874 struct Type * type = ProcessType(exp->__anon1.initializer.typeName->qualifiers, exp->__anon1.initializer.typeName->declarator);
16876 exp->expType = type;
16881 struct Type * type = ProcessType(exp->__anon1.vaArg.typeName->qualifiers, exp->__anon1.vaArg.typeName->declarator);
16883 ProcessExpressionType(exp->__anon1.vaArg.exp);
16884 exp->expType = type;
16889 struct Expression * e;
16891 exp->isConstant = 1;
16892 FreeType(exp->__anon1.cond.cond->destType);
16893 exp->__anon1.cond.cond->destType = MkClassType("bool");
16894 exp->__anon1.cond.cond->destType->truth = 1;
16895 ProcessExpressionType(exp->__anon1.cond.cond);
16896 if(!exp->__anon1.cond.cond->isConstant)
16897 exp->isConstant = 0;
16898 for(e = (*exp->__anon1.cond.exp).first; e; e = e->next)
16902 FreeType(e->destType);
16903 e->destType = exp->destType;
16905 e->destType->refCount++;
16907 ProcessExpressionType(e);
16910 exp->expType = e->expType;
16912 e->expType->refCount++;
16915 exp->isConstant = 0;
16917 FreeType(exp->__anon1.cond.elseExp->destType);
16918 exp->__anon1.cond.elseExp->destType = exp->destType ? exp->destType : exp->expType;
16919 if(exp->__anon1.cond.elseExp->destType)
16920 exp->__anon1.cond.elseExp->destType->refCount++;
16921 ProcessExpressionType(exp->__anon1.cond.elseExp);
16922 if(!exp->__anon1.cond.elseExp->isConstant)
16923 exp->isConstant = 0;
16928 if(exp->__anon1.compound && exp->__anon1.compound->__anon1.compound.statements && (*exp->__anon1.compound->__anon1.compound.statements).last)
16930 struct Statement * last = (*exp->__anon1.compound->__anon1.compound.statements).last;
16932 if(last->type == 3 && last->__anon1.expressions && (*last->__anon1.expressions).last)
16934 ((struct Expression *)(*last->__anon1.expressions).last)->destType = exp->destType;
16936 exp->destType->refCount++;
16938 ProcessStatement(exp->__anon1.compound);
16939 exp->expType = (last->__anon1.expressions && (*last->__anon1.expressions).last) ? ((struct Expression *)(*last->__anon1.expressions).last)->expType : (((void *)0));
16941 exp->expType->refCount++;
16947 struct Specifier * spec = (*exp->__anon1._classExp.specifiers).first;
16949 if(spec && spec->type == 1)
16951 exp->expType = MkClassType(spec->__anon1.__anon1.name);
16952 exp->expType->kind = 19;
16953 exp->byReference = 1;
16957 exp->expType = MkClassType("ecere::com::Class");
16958 exp->byReference = 1;
16964 struct __ecereNameSpace__ecere__com__Class * _class = thisClass ? thisClass : currentClass;
16968 struct Identifier * id = exp->__anon1.classData.id;
16969 char structName[1024];
16970 struct Expression * classExp;
16972 strcpy(structName, "__ecereClassData_");
16973 FullClassNameCat(structName, _class->fullName, 0);
16975 exp->__anon1.member.member = id;
16976 if(curCompound && FindSymbol("this", curContext, curCompound->__anon1.compound.context, 0, 0))
16977 classExp = MkExpMember(MkExpIdentifier(MkIdentifier("this")), MkIdentifier("_class"));
16979 classExp = MkExpIdentifier(MkIdentifier("class"));
16980 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"))))))));
16981 ProcessExpressionType(exp);
16988 struct Type * type = (((void *)0));
16989 const char * typeString = (((void *)0));
16990 char typeStringBuf[1024];
16992 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))
16994 struct __ecereNameSpace__ecere__com__Class * templateClass = exp->destType->__anon1._class->__anon1.registered;
16996 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
16998 else if(exp->__anon1.list)
17000 struct Expression * e;
17002 for(e = (*exp->__anon1.list).first; e; e = e->next)
17004 ProcessExpressionType(e);
17014 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17018 e->expType = (((void *)0));
17019 e = (*exp->__anon1.list).first;
17020 ProcessExpressionType(e);
17023 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
17025 FreeType(e->expType);
17026 e->expType = (((void *)0));
17028 type = (((void *)0));
17036 FreeType(e->expType);
17037 e->expType = (((void *)0));
17043 typeStringBuf[0] = '\0';
17044 PrintTypeNoConst(type, typeStringBuf, 0, 1);
17045 typeString = typeStringBuf;
17047 type = (((void *)0));
17052 char templateString[1024];
17053 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
17054 struct __ecereNameSpace__ecere__sys__OldList * structInitializers = MkList();
17055 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17056 struct Expression * expExt;
17057 struct Declarator * decl = SpecDeclFromString(typeString, specs, (((void *)0)));
17059 sprintf(templateString, "Container<%s>", typeString);
17060 if(exp->__anon1.list)
17062 struct Expression * e;
17064 type = ProcessTypeString(typeString, 0);
17065 while((e = (*exp->__anon1.list).first))
17067 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*exp->__anon1.list), e);
17068 e->destType = type;
17070 ProcessExpressionType(e);
17071 ListAdd(initializers, MkInitializerAssignment(e));
17074 (__ecereNameSpace__ecere__com__eSystem_Delete(exp->__anon1.list), exp->__anon1.list = 0);
17076 DeclareStruct("ecere::com::BuiltInContainer", 0);
17077 ListAdd(structInitializers, MkInitializerAssignment(MkExpMember(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkIdentifier("_vTbl"))));
17078 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17079 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0)))));
17080 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17081 ListAdd(structInitializers, MkInitializerAssignment(MkExpConstant("0")));
17082 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17083 ListAdd(structInitializers, MkInitializerAssignment(MkExpExtensionInitializer(MkTypeName(specs, MkDeclaratorArray(decl, (((void *)0)))), MkInitializerList(initializers))));
17084 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17085 ListAdd(structInitializers, MkInitializerAssignment(__extension__ ({
17086 struct Expression * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Expression);
17088 __ecereInstance1->type = 2, __ecereInstance1->__anon1.__anon1.constant = __ecereNameSpace__ecere__com__PrintString(__ecereClass_int, (void *)&(*initializers).count, (void *)0), __ecereInstance1;
17090 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17091 ListAdd(structInitializers, MkInitializerAssignment(MkExpClass(CopyList(specs, (void *)(CopySpecifier)), CopyDeclarator(decl))));
17092 ProcessExpressionType(((struct Initializer *)(*structInitializers).last)->__anon1.exp);
17093 exp->expType = ProcessTypeString(templateString, 0);
17095 exp->__anon1.list = MkListOne(MkExpCast(MkTypeName(MkListOne(MkSpecifierName(templateString)), (((void *)0))), MkExpOp((((void *)0)), '&', expExt = MkExpExtensionInitializer(MkTypeName(MkListOne(MkSpecifierName("BuiltInContainer")), (((void *)0))), MkInitializerList(structInitializers)))));
17096 ProcessExpressionType(expExt);
17100 exp->expType = ProcessTypeString("Container", 0);
17101 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
17106 if(exp->expType && exp->expType->kind == 21 && thisClass && (!exp->destType || exp->destType->kind != 21))
17108 FreeType(exp->expType);
17109 exp->expType = ReplaceThisClassType(thisClass);
17111 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)
17113 struct Symbol * symbol = FindSymbol(exp->expType->__anon1.__anon1.enumName, curContext, globalContext, 1, 0);
17117 if(exp->expType->kind != 15)
17119 struct Type * member;
17120 char * enumName = __ecereNameSpace__ecere__sys__CopyString(exp->expType->__anon1.__anon1.enumName);
17122 FreeType(exp->expType);
17123 exp->expType = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
17124 exp->expType->kind = symbol->type->kind;
17125 exp->expType->refCount++;
17126 exp->expType->__anon1.__anon1.enumName = enumName;
17127 exp->expType->__anon1.__anon1.members = symbol->type->__anon1.__anon1.members;
17128 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17129 member->refCount++;
17133 struct __ecereNameSpace__ecere__sys__NamedLink64 * member;
17135 for(member = symbol->type->__anon1.__anon1.members.first; member; member = member->next)
17137 struct __ecereNameSpace__ecere__sys__NamedLink64 * value = (value = __ecereNameSpace__ecere__com__eSystem_New0(structSize_NamedLink64), value->name = __ecereNameSpace__ecere__sys__CopyString(member->name), value);
17139 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&exp->expType->__anon1.__anon1.members, value);
17145 if(exp->destType && (exp->destType->kind == 18))
17147 else if(exp->destType && !exp->destType->keepCast)
17149 if(!exp->needTemplateCast && exp->expType && (exp->expType->kind == 20 || exp->expType->passAsTemplate))
17150 exp->needTemplateCast = 1;
17151 if(exp->destType->kind == 0)
17153 else if(!CheckExpressionType(exp, exp->destType, 0, !exp->destType->casted))
17155 if(!exp->destType->count || unresolved)
17160 if(exp->destType->kind != 14)
17167 char expString[10240];
17169 expString[0] = '\0';
17170 PrintType(exp->destType, type2, 0, 1);
17173 PrintExpression(exp, expString);
17174 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17177 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s; expected %s\n", (((void *)0))), expString, type2);
17178 else if(exp->type != 16)
17179 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s; expected %s\n", (((void *)0))), expString, type2);
17184 char expString[10240];
17186 expString[0] = '\0';
17189 PrintExpression(exp, expString);
17190 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17193 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), expString);
17194 else if(exp->type != 16)
17195 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17207 PrintType(exp->expType, type1, 0, 1);
17208 PrintType(exp->destType, type2, 0, 1);
17210 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)))
17214 char expString[10240];
17216 expString[0] = '\0';
17219 PrintExpression(exp, expString);
17220 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17222 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")))
17223 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString("ec", "incompatible expression %s (%s); expected %s\n", (((void *)0))), expString, type1, type2);
17224 FreeType(exp->expType);
17225 exp->destType->refCount++;
17226 exp->expType = exp->destType;
17231 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))
17233 struct Expression * nbExp = GetNonBracketsExp(exp);
17235 if(nbExp->type != 11 || !IsVoidPtrCast(nbExp->__anon1.cast.typeName))
17237 struct Expression * e = MoveExpContents(exp);
17239 exp->__anon1.cast.exp = MkExpBrackets(MkListOne(e));
17241 exp->__anon1.cast.exp->destType = exp->destType;
17243 exp->destType->refCount++;
17244 exp->__anon1.cast.typeName = MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0))));
17248 else if(unresolved)
17250 if(exp->__anon1.__anon1.identifier->_class && exp->__anon1.__anon1.identifier->_class->__anon1.__anon1.name)
17251 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);
17252 else if(exp->__anon1.__anon1.identifier->string && exp->__anon1.__anon1.identifier->string[0])
17253 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "unresolved identifier %s\n", (((void *)0))), exp->__anon1.__anon1.identifier->string);
17255 else if(!exp->expType && exp->type != 16)
17257 char expString[10240];
17259 expString[0] = '\0';
17262 PrintExpression(exp, expString);
17263 __ecereNameSpace__ecere__sys__ChangeCh(expString, '\n', ' ');
17265 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "couldn't determine type of %s\n", (((void *)0))), expString);
17268 ApplyAnyObjectLogic(exp);
17269 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)))
17271 exp->byReference = 1;
17273 yylloc = oldyylloc;
17276 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)
17280 *curMember = (*curMember)->next;
17281 if(subMemberStackPos && *subMemberStackPos > 0 && subMemberStack[*subMemberStackPos - 1]->type == 1)
17283 *curMember = subMemberStack[--(*subMemberStackPos)];
17284 *curMember = (*curMember)->next;
17286 while((*curMember) && (*curMember)->isProperty)
17287 *curMember = (*curMember)->next;
17288 if(subMemberStackPos)
17290 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17292 subMemberStack[(*subMemberStackPos)++] = *curMember;
17293 *curMember = (*curMember)->members.first;
17294 while(*curMember && (*curMember)->isProperty)
17295 *curMember = (*curMember)->next;
17303 if(subMemberStackPos && *subMemberStackPos)
17305 *curMember = subMemberStack[--(*subMemberStackPos)];
17306 *curMember = (*curMember)->next;
17310 struct __ecereNameSpace__ecere__com__Class * lastCurClass = *curClass;
17312 if(*curClass == _class)
17314 for(*curClass = _class; (*curClass)->base != lastCurClass && (*curClass)->base->type != 1000; *curClass = (*curClass)->base)
17316 *curMember = (*curClass)->membersAndProperties.first;
17318 while((*curMember) && (*curMember)->isProperty)
17319 *curMember = (*curMember)->next;
17320 if(subMemberStackPos)
17322 while((*curMember) && !(*curMember)->isProperty && !(*curMember)->name && ((*curMember)->type == 2 || (*curMember)->type == 1))
17324 subMemberStack[(*subMemberStackPos)++] = *curMember;
17325 *curMember = (*curMember)->members.first;
17326 while(*curMember && (*curMember)->isProperty)
17327 *curMember = (*curMember)->next;
17334 static void ProcessInitializer(struct Initializer * init, struct Type * type)
17339 if(!init->__anon1.exp || init->__anon1.exp->type != 1 || !init->__anon1.exp->__anon1.instance || init->__anon1.exp->__anon1.instance->_class || !type || type->kind == 8)
17341 if(init->__anon1.exp && !init->__anon1.exp->destType)
17343 FreeType(init->__anon1.exp->destType);
17344 init->__anon1.exp->destType = type;
17348 if(init->__anon1.exp)
17350 ProcessExpressionType(init->__anon1.exp);
17351 init->isConstant = init->__anon1.exp->isConstant;
17357 struct Expression * exp = init->__anon1.exp;
17358 struct Instantiation * inst = exp->__anon1.instance;
17359 struct MembersInit * members;
17362 init->__anon1.list = MkList();
17365 for(members = (*inst->members).first; members; members = members->next)
17367 if(members->type == 0)
17369 struct MemberInit * member;
17371 for(member = (*members->__anon1.dataMembers).first; member; member = member->next)
17373 ListAdd(init->__anon1.list, member->initializer);
17374 member->initializer = (((void *)0));
17379 FreeExpression(exp);
17383 struct Initializer * i;
17384 struct Type * initializerType = (((void *)0));
17385 struct __ecereNameSpace__ecere__com__Class * curClass = (((void *)0));
17386 struct __ecereNameSpace__ecere__com__DataMember * curMember = (((void *)0));
17387 struct __ecereNameSpace__ecere__com__DataMember * subMemberStack[256];
17388 int subMemberStackPos = 0;
17390 if(type && type->kind == 12)
17391 initializerType = Dereference(type);
17392 else if(type && (type->kind == 9 || type->kind == 10))
17393 initializerType = type->__anon1.__anon1.members.first;
17394 for(i = (*init->__anon1.list).first; i; i = i->next)
17396 if(type && type->kind == 8 && type->__anon1._class && type->__anon1._class->__anon1.registered)
17398 FindNextDataMember(type->__anon1._class->__anon1.registered, &curClass, &curMember, subMemberStack, &subMemberStackPos);
17401 if(!curMember->dataType)
17402 curMember->dataType = ProcessTypeString(curMember->dataTypeString, 0);
17403 initializerType = curMember->dataType;
17406 ProcessInitializer(i, initializerType);
17407 if(initializerType && type && (type->kind == 9 || type->kind == 10))
17408 initializerType = initializerType->next;
17410 init->isConstant = 0;
17412 if(type && type->kind == 12)
17413 FreeType(initializerType);
17414 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))
17416 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Assigning list initializer to non list\n", (((void *)0))));
17423 extern struct Symbol * FindType(struct Context * ctx, const char * name);
17425 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol);
17427 static void ProcessSpecifier(struct Specifier * spec, unsigned int declareStruct)
17433 if(spec->__anon1.specifier == THISCLASS)
17438 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17439 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17440 ProcessSpecifier(spec, declareStruct);
17447 struct Symbol * symbol = FindType(curContext, spec->__anon1.__anon1.name);
17450 DeclareType(symbol->type, 1, 1);
17451 else if((symbol = spec->__anon1.__anon1.symbol) && symbol->__anon1.registered && symbol->__anon1.registered->type == 1 && declareStruct)
17452 DeclareStruct(spec->__anon1.__anon1.name, 0);
17457 struct Enumerator * e;
17459 if(spec->__anon1.__anon2.list)
17461 for(e = (*spec->__anon1.__anon2.list).first; e; e = e->next)
17464 ProcessExpressionType(e->exp);
17473 if(spec->__anon1.__anon2.definitions)
17475 struct Symbol * symbol = spec->__anon1.__anon2.id ? FindClass(spec->__anon1.__anon2.id->string) : (((void *)0));
17477 ProcessClass(spec->__anon1.__anon2.definitions, symbol);
17484 static void ProcessDeclarator(struct Declarator * decl)
17489 if(decl->__anon1.identifier->classSym)
17491 FreeSpecifier(decl->__anon1.identifier->_class);
17492 decl->__anon1.identifier->_class = (((void *)0));
17496 if(decl->__anon1.array.exp)
17497 ProcessExpressionType(decl->__anon1.array.exp);
17504 if(decl->declarator)
17505 ProcessDeclarator(decl->declarator);
17506 if(decl->type == 4)
17508 struct Identifier * id = GetDeclId(decl);
17510 if(id && id->_class)
17512 struct TypeName * param = (param = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName), param->qualifiers = MkListOne(id->_class), param->declarator = (((void *)0)), param);
17514 if(!decl->__anon1.function.parameters)
17515 decl->__anon1.function.parameters = MkList();
17516 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), (((void *)0)), param);
17517 id->_class = (((void *)0));
17519 if(decl->__anon1.function.parameters)
17521 struct TypeName * param;
17523 for(param = (*decl->__anon1.function.parameters).first; param; param = param->next)
17525 if(param->qualifiers && (*param->qualifiers).first)
17527 struct Specifier * spec = (*param->qualifiers).first;
17529 if(spec && spec->__anon1.specifier == TYPED_OBJECT)
17531 struct Declarator * d = param->declarator;
17532 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);
17535 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*newParam->qualifiers), (((void *)0)), MkSpecifier(CONST));
17536 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17537 param->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0))));
17538 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class")));
17539 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*decl->__anon1.function.parameters), param, newParam);
17542 else if(spec && spec->__anon1.specifier == ANY_OBJECT)
17544 struct Declarator * d = param->declarator;
17546 FreeList(param->qualifiers, (void *)(FreeSpecifier));
17547 param->qualifiers = MkListOne(MkSpecifier(VOID));
17549 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*param->qualifiers), (((void *)0)), MkSpecifier(CONST));
17550 param->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), d);
17552 else if(spec->__anon1.specifier == THISCLASS)
17557 spec->__anon1.__anon1.name = ReplaceThisClass(thisClass);
17558 spec->__anon1.__anon1.symbol = FindClass(spec->__anon1.__anon1.name);
17559 ProcessSpecifier(spec, 0);
17563 if(param->declarator)
17564 ProcessDeclarator(param->declarator);
17572 extern struct Identifier * CopyIdentifier(struct Identifier * id);
17574 extern void FreeInitDeclarator(struct InitDeclarator * decl);
17576 static void ProcessDeclaration(struct Declaration * decl)
17578 yylloc = decl->loc;
17583 unsigned int declareStruct = 0;
17585 if(decl->__anon1.__anon1.declarators)
17587 struct InitDeclarator * d;
17589 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17591 struct Type * type, * subType;
17593 ProcessDeclarator(d->declarator);
17594 type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17597 ProcessInitializer(d->initializer, type);
17598 if((*decl->__anon1.__anon1.declarators).count == 1 && d->initializer->type == 0 && d->initializer->__anon1.exp->type == 1)
17600 if(type->kind == 8 && type->__anon1._class == d->initializer->__anon1.exp->expType->__anon1._class)
17602 struct Instantiation * inst = d->initializer->__anon1.exp->__anon1.instance;
17604 inst->exp = MkExpIdentifier(CopyIdentifier(GetDeclId(d->declarator)));
17605 d->initializer->__anon1.exp->__anon1.instance = (((void *)0));
17606 if(decl->__anon1.__anon1.specifiers)
17607 FreeList(decl->__anon1.__anon1.specifiers, (void *)(FreeSpecifier));
17608 FreeList(decl->__anon1.__anon1.declarators, (void *)(FreeInitDeclarator));
17611 decl->__anon1.inst = inst;
17615 for(subType = type; subType; )
17617 if(subType->kind == 8)
17622 else if(subType->kind == 13)
17624 else if(subType->kind == 12)
17625 subType = subType->__anon1.__anon4.arrayType;
17634 if(decl->__anon1.__anon1.specifiers)
17636 struct Specifier * s;
17638 for(s = (*decl->__anon1.__anon1.specifiers).first; s; s = s->next)
17640 ProcessSpecifier(s, declareStruct);
17647 ProcessInstantiationType(decl->__anon1.inst);
17652 struct Specifier * spec;
17653 struct Declarator * d;
17654 unsigned int declareStruct = 0;
17656 if(decl->__anon1.__anon1.declarators)
17658 for(d = (*decl->__anon1.__anon1.declarators).first; d; d = d->next)
17660 struct Type * type = ProcessType(decl->__anon1.__anon1.specifiers, d->declarator);
17661 struct Type * subType;
17663 ProcessDeclarator(d);
17664 for(subType = type; subType; )
17666 if(subType->kind == 8)
17671 else if(subType->kind == 13)
17673 else if(subType->kind == 12)
17674 subType = subType->__anon1.__anon4.arrayType;
17681 if(decl->__anon1.__anon1.specifiers)
17683 for(spec = (*decl->__anon1.__anon1.specifiers).first; spec; spec = spec->next)
17684 ProcessSpecifier(spec, declareStruct);
17691 static struct FunctionDefinition * curFunction;
17693 static void CreateFireWatcher(struct __ecereNameSpace__ecere__com__Property * prop, struct Expression * object, struct Statement * stmt)
17695 char propName[1024], propNameM[1024];
17696 char getName[1024], setName[1024];
17697 struct __ecereNameSpace__ecere__sys__OldList * args;
17699 DeclareProperty(prop, setName, getName);
17700 strcpy(propName, "__ecereProp_");
17701 FullClassNameCat(propName, prop->_class->fullName, 0);
17702 strcat(propName, "_");
17703 FullClassNameCat(propName, prop->name, 1);
17704 strcpy(propNameM, "__ecerePropM_");
17705 FullClassNameCat(propNameM, prop->_class->fullName, 0);
17706 strcat(propNameM, "_");
17707 FullClassNameCat(propNameM, prop->name, 1);
17708 if(prop->isWatchable)
17711 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17712 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17713 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17715 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17716 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17717 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireWatchers")), args));
17721 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17722 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
17723 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17725 ListAdd(args, object ? CopyExpression(object) : MkExpIdentifier(MkIdentifier("this")));
17726 ListAdd(args, MkExpIdentifier(MkIdentifier(propNameM)));
17727 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_FireSelfWatchers")), args));
17729 if(curFunction->propSet && !strcmp(curFunction->propSet->string, prop->name) && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
17730 curFunction->propSet->fireWatchersDone = 1;
17733 extern struct Declaration * MkDeclarationInst(struct Instantiation * inst);
17735 extern struct Instantiation * MkInstantiationNamed(struct __ecereNameSpace__ecere__sys__OldList * specs, struct Expression * exp, struct __ecereNameSpace__ecere__sys__OldList * members);
17737 extern struct Statement * MkIfStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement, struct Statement * elseStmt);
17739 extern struct Statement * MkForStmt(struct Statement * init, struct Statement * check, struct __ecereNameSpace__ecere__sys__OldList * inc, struct Statement * statement);
17741 extern struct Statement * MkWhileStmt(struct __ecereNameSpace__ecere__sys__OldList * exp, struct Statement * statement);
17743 extern struct ClassFunction * MkClassFunction(struct __ecereNameSpace__ecere__sys__OldList * specifiers, struct Specifier * _class, struct Declarator * decl, struct __ecereNameSpace__ecere__sys__OldList * declList);
17745 extern void ProcessClassFunctionBody(struct ClassFunction * func, struct Statement * body);
17747 extern void FreePropertyWatch(struct PropertyWatch * watcher);
17749 static void ProcessStatement(struct Statement * stmt)
17751 yylloc = stmt->loc;
17755 ProcessStatement(stmt->__anon1.labeled.stmt);
17758 if(stmt->__anon1.caseStmt.exp)
17760 FreeType(stmt->__anon1.caseStmt.exp->destType);
17761 stmt->__anon1.caseStmt.exp->destType = curSwitchType;
17763 curSwitchType->refCount++;
17764 ProcessExpressionType(stmt->__anon1.caseStmt.exp);
17765 ComputeExpression(stmt->__anon1.caseStmt.exp);
17767 if(stmt->__anon1.caseStmt.stmt)
17768 ProcessStatement(stmt->__anon1.caseStmt.stmt);
17772 if(stmt->__anon1.compound.context)
17774 struct Declaration * decl;
17775 struct Statement * s;
17776 struct Statement * prevCompound = curCompound;
17777 struct Context * prevContext = curContext;
17779 if(!stmt->__anon1.compound.isSwitch)
17780 curCompound = stmt;
17781 curContext = stmt->__anon1.compound.context;
17782 if(stmt->__anon1.compound.declarations)
17784 for(decl = (*stmt->__anon1.compound.declarations).first; decl; decl = decl->next)
17785 ProcessDeclaration(decl);
17787 if(stmt->__anon1.compound.statements)
17789 for(s = (*stmt->__anon1.compound.statements).first; s; s = s->next)
17790 ProcessStatement(s);
17792 curContext = prevContext;
17793 curCompound = prevCompound;
17799 struct Expression * exp;
17801 if(stmt->__anon1.expressions)
17803 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
17804 ProcessExpressionType(exp);
17810 struct Expression * exp;
17812 FreeType(((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType);
17813 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType = MkClassType("bool");
17814 ((struct Expression *)(*stmt->__anon1.ifStmt.exp).last)->destType->truth = 1;
17815 for(exp = (*stmt->__anon1.ifStmt.exp).first; exp; exp = exp->next)
17817 ProcessExpressionType(exp);
17819 if(stmt->__anon1.ifStmt.stmt)
17820 ProcessStatement(stmt->__anon1.ifStmt.stmt);
17821 if(stmt->__anon1.ifStmt.elseStmt)
17822 ProcessStatement(stmt->__anon1.ifStmt.elseStmt);
17827 struct Type * oldSwitchType = curSwitchType;
17829 if(stmt->__anon1.switchStmt.exp)
17831 struct Expression * exp;
17833 for(exp = (*stmt->__anon1.switchStmt.exp).first; exp; exp = exp->next)
17837 ProcessExpressionType(exp);
17840 curSwitchType = exp->expType;
17843 ProcessStatement(stmt->__anon1.switchStmt.stmt);
17844 curSwitchType = oldSwitchType;
17849 if(stmt->__anon1.whileStmt.exp)
17851 struct Expression * exp;
17853 FreeType(((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType);
17854 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType = MkClassType("bool");
17855 ((struct Expression *)(*stmt->__anon1.whileStmt.exp).last)->destType->truth = 1;
17856 for(exp = (*stmt->__anon1.whileStmt.exp).first; exp; exp = exp->next)
17858 ProcessExpressionType(exp);
17861 if(stmt->__anon1.whileStmt.stmt)
17862 ProcessStatement(stmt->__anon1.whileStmt.stmt);
17867 if(stmt->__anon1.doWhile.exp)
17869 struct Expression * exp;
17871 if((*stmt->__anon1.doWhile.exp).last)
17873 FreeType(((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType);
17874 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType = MkClassType("bool");
17875 ((struct Expression *)(*stmt->__anon1.doWhile.exp).last)->destType->truth = 1;
17877 for(exp = (*stmt->__anon1.doWhile.exp).first; exp; exp = exp->next)
17879 ProcessExpressionType(exp);
17882 if(stmt->__anon1.doWhile.stmt)
17883 ProcessStatement(stmt->__anon1.doWhile.stmt);
17888 struct Expression * exp;
17890 if(stmt->__anon1.forStmt.init)
17891 ProcessStatement(stmt->__anon1.forStmt.init);
17892 if(stmt->__anon1.forStmt.check && stmt->__anon1.forStmt.check->__anon1.expressions)
17894 FreeType(((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType);
17895 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType = MkClassType("bool");
17896 ((struct Expression *)(*stmt->__anon1.forStmt.check->__anon1.expressions).last)->destType->truth = 1;
17898 if(stmt->__anon1.forStmt.check)
17899 ProcessStatement(stmt->__anon1.forStmt.check);
17900 if(stmt->__anon1.forStmt.increment)
17902 for(exp = (*stmt->__anon1.forStmt.increment).first; exp; exp = exp->next)
17903 ProcessExpressionType(exp);
17905 if(stmt->__anon1.forStmt.stmt)
17906 ProcessStatement(stmt->__anon1.forStmt.stmt);
17911 struct Identifier * id = stmt->__anon1.forEachStmt.id;
17912 struct __ecereNameSpace__ecere__sys__OldList * exp = stmt->__anon1.forEachStmt.exp;
17913 struct __ecereNameSpace__ecere__sys__OldList * filter = stmt->__anon1.forEachStmt.filter;
17914 struct Statement * block = stmt->__anon1.forEachStmt.stmt;
17915 char iteratorType[1024];
17916 struct Type * source;
17917 struct Expression * e;
17918 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));
17919 struct Expression * arrayExp;
17920 const char * typeString = (((void *)0));
17921 int builtinCount = 0;
17923 for(e = exp ? (*exp).first : (((void *)0)); e; e = e->next)
17927 FreeType(e->destType);
17928 e->destType = ProcessTypeString("Container", 0);
17930 if(!isBuiltin || e->next)
17931 ProcessExpressionType(e);
17933 source = (exp && (*exp).last) ? ((struct Expression *)(*exp).last)->expType : (((void *)0));
17934 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)))
17936 struct __ecereNameSpace__ecere__com__Class * _class = source ? source->__anon1._class->__anon1.registered : (((void *)0));
17937 struct Symbol * symbol;
17938 struct Expression * expIt = (((void *)0));
17939 unsigned int isMap = 0, isArray = 0, isLinkList = 0, isList = 0, isCustomAVLTree = 0;
17940 struct __ecereNameSpace__ecere__com__Class * arrayClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Array");
17941 struct __ecereNameSpace__ecere__com__Class * linkListClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "LinkList");
17942 struct __ecereNameSpace__ecere__com__Class * customAVLTreeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "CustomAVLTree");
17947 stmt->__anon1.compound.context = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Context);
17948 stmt->__anon1.compound.context->parent = curContext;
17949 curContext = stmt->__anon1.compound.context;
17951 if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, customAVLTreeClass))
17953 struct __ecereNameSpace__ecere__com__Class * mapClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "Map");
17955 isCustomAVLTree = 1;
17956 if(__ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, mapClass))
17959 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, arrayClass))
17961 else if(source && __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, linkListClass))
17963 struct __ecereNameSpace__ecere__com__Class * listClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, "List");
17966 isList = __ecereNameSpace__ecere__com__eClass_IsDerived(source->__anon1._class->__anon1.registered, listClass);
17968 if(inCompiler && isArray)
17970 struct Declarator * decl;
17971 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
17973 decl = SpecDeclFromString(_class->templateArgs[2].__anon1.__anon1.dataTypeString, specs, MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(id)));
17974 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
17975 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), MkInitializerAssignment(MkExpBrackets(exp))))));
17979 struct Type * type = (((void *)0));
17980 char typeStringBuf[1024];
17982 arrayExp = (((struct Expression *)(*exp).last)->type == 35) ? (struct Expression *)(*exp).last : ((struct Expression *)(*exp).last)->__anon1.cast.exp;
17983 if(((struct Expression *)(*exp).last)->type == 11)
17985 struct TypeName * typeName = ((struct Expression *)(*exp).last)->__anon1.cast.typeName;
17988 arrayExp->destType = ProcessType(typeName->qualifiers, typeName->declarator);
17990 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)
17992 struct __ecereNameSpace__ecere__com__Class * templateClass = arrayExp->destType->__anon1._class->__anon1.registered;
17994 typeString = templateClass->templateArgs[2].__anon1.__anon1.dataTypeString;
17996 else if(arrayExp->__anon1.list)
17998 struct Expression * e;
18000 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
18002 ProcessExpressionType(e);
18012 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18016 e->expType = (((void *)0));
18017 e = (*arrayExp->__anon1.list).first;
18018 ProcessExpressionType(e);
18021 if(!MatchTypeExpression(e, type, (((void *)0)), 0, 1))
18023 FreeType(e->expType);
18024 e->expType = (((void *)0));
18026 type = (((void *)0));
18034 FreeType(e->expType);
18035 e->expType = (((void *)0));
18041 typeStringBuf[0] = '\0';
18042 PrintType(type, typeStringBuf, 0, 1);
18043 typeString = typeStringBuf;
18051 struct __ecereNameSpace__ecere__sys__OldList * initializers = MkList();
18052 struct Declarator * decl;
18053 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18055 if(arrayExp->__anon1.list)
18057 struct Expression * e;
18059 builtinCount = (*arrayExp->__anon1.list).count;
18060 type = ProcessTypeString(typeString, 0);
18061 while((e = (*arrayExp->__anon1.list).first))
18063 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*arrayExp->__anon1.list), e);
18064 e->destType = type;
18066 ProcessExpressionType(e);
18068 ListAdd(initializers, MkInitializerAssignment(e));
18071 (__ecereNameSpace__ecere__com__eSystem_Delete(arrayExp->__anon1.list), arrayExp->__anon1.list = 0);
18073 decl = SpecDeclFromString(typeString, specs, MkDeclaratorIdentifier(id));
18074 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(CopyList(specs, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), decl), (((void *)0))))));
18075 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(specs, MkListOne(MkInitDeclarator(PlugDeclarator(decl, MkDeclaratorArray(MkDeclaratorIdentifier(MkIdentifier("__internalArray")), (((void *)0)))), MkInitializerList(initializers)))));
18076 FreeList(exp, (void *)(FreeExpression));
18078 else if(arrayExp->__anon1.list)
18080 struct Expression * e;
18082 type = ProcessTypeString(typeString, 0);
18083 for(e = (*arrayExp->__anon1.list).first; e; e = e->next)
18085 e->destType = type;
18087 ProcessExpressionType(e);
18094 arrayExp->expType = ProcessTypeString("Container", 0);
18095 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Couldn't determine type of array elements\n", (((void *)0))));
18098 else if(inCompiler && isLinkList && !isList)
18100 struct Declarator * decl;
18101 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18103 decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, MkDeclaratorIdentifier(id));
18104 stmt->__anon1.compound.declarations = MkListOne(MkDeclaration(specs, MkListOne(MkInitDeclarator(decl, (((void *)0))))));
18105 ListAdd(stmt->__anon1.compound.declarations, MkDeclaration(MkListOne(MkSpecifierName(source->__anon1._class->__anon1.registered->fullName)), MkListOne(MkInitDeclarator(MkDeclaratorIdentifier(MkIdentifier("__internalLinkList")), MkInitializerAssignment(MkExpBrackets(exp))))));
18107 else if(inCompiler && _class->templateArgs)
18110 sprintf(iteratorType, "MapIterator<%s, %s >", _class->templateArgs[5].__anon1.__anon1.dataTypeString, _class->templateArgs[6].__anon1.__anon1.dataTypeString);
18112 sprintf(iteratorType, "Iterator<%s, %s >", _class->templateArgs[2].__anon1.__anon1.dataTypeString, _class->templateArgs[1].__anon1.__anon1.dataTypeString);
18113 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)))))))));
18117 symbol = FindSymbol(id->string, curContext, curContext, 0, 0);
18120 switch(block->type)
18123 if(block->__anon1.compound.context)
18124 block->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18127 if(block->__anon1.ifStmt.stmt && block->__anon1.ifStmt.stmt->type == 2 && block->__anon1.ifStmt.stmt->__anon1.compound.context)
18128 block->__anon1.ifStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18129 if(block->__anon1.ifStmt.elseStmt && block->__anon1.ifStmt.elseStmt->type == 2 && block->__anon1.ifStmt.elseStmt->__anon1.compound.context)
18130 block->__anon1.ifStmt.elseStmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18133 if(block->__anon1.switchStmt.stmt && block->__anon1.switchStmt.stmt->type == 2 && block->__anon1.switchStmt.stmt->__anon1.compound.context)
18134 block->__anon1.switchStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18137 if(block->__anon1.whileStmt.stmt && block->__anon1.whileStmt.stmt->type == 2 && block->__anon1.whileStmt.stmt->__anon1.compound.context)
18138 block->__anon1.whileStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18141 if(block->__anon1.doWhile.stmt && block->__anon1.doWhile.stmt->type == 2 && block->__anon1.doWhile.stmt->__anon1.compound.context)
18142 block->__anon1.doWhile.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18145 if(block->__anon1.forStmt.stmt && block->__anon1.forStmt.stmt->type == 2 && block->__anon1.forStmt.stmt->__anon1.compound.context)
18146 block->__anon1.forStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18149 if(block->__anon1.forEachStmt.stmt && block->__anon1.forEachStmt.stmt->type == 2 && block->__anon1.forEachStmt.stmt->__anon1.compound.context)
18150 block->__anon1.forEachStmt.stmt->__anon1.compound.context->parent = stmt->__anon1.compound.context;
18156 block = MkIfStmt(filter, block, (((void *)0)));
18160 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));
18161 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18162 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18163 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18169 sprintf(count, "%d", builtinCount);
18170 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));
18171 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18172 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18173 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18175 else if(isLinkList && !isList)
18177 struct __ecereNameSpace__ecere__com__Class * typeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, _class->templateArgs[3].__anon1.__anon1.dataTypeString);
18178 struct __ecereNameSpace__ecere__com__Class * listItemClass = __ecereNameSpace__ecere__com__eSystem_FindClass(_class->module, "ListItem");
18180 if(typeClass && __ecereNameSpace__ecere__com__eClass_IsDerived(typeClass, listItemClass) && _class->templateArgs[5].__anon1.__anon1.dataTypeString && !strcmp(_class->templateArgs[5].__anon1.__anon1.dataTypeString, "LT::link"))
18182 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));
18186 struct __ecereNameSpace__ecere__sys__OldList * specs = MkList();
18187 struct Declarator * decl = SpecDeclFromString(_class->templateArgs[3].__anon1.__anon1.dataTypeString, specs, (((void *)0)));
18189 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));
18191 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.init);
18192 ProcessStatement(((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.check);
18193 ProcessExpressionType((*((struct Statement *)(*stmt->__anon1.compound.statements).first)->__anon1.forStmt.increment).first);
18197 stmt->__anon1.compound.statements = MkListOne(MkWhileStmt(MkListOne(MkExpCall(MkExpMember(expIt = MkExpIdentifier(CopyIdentifier(id)), MkIdentifier("Next")), (((void *)0)))), block));
18199 ProcessExpressionType(expIt);
18200 if((*stmt->__anon1.compound.declarations).first)
18201 ProcessDeclaration((*stmt->__anon1.compound.declarations).first);
18203 symbol->isIterator = isMap ? 2 : ((isArray || isBuiltin) ? 3 : (isLinkList ? (isList ? 5 : 4) : (isCustomAVLTree ? 6 : 1)));
18204 ProcessStatement(stmt);
18207 ProcessStatement(stmt->__anon1.forEachStmt.stmt);
18209 curContext = stmt->__anon1.compound.context->parent;
18214 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Expression is not a container\n", (((void *)0))));
18226 struct Expression * exp;
18228 if(stmt->__anon1.expressions)
18230 for(exp = (*stmt->__anon1.expressions).first; exp; exp = exp->next)
18234 if(curFunction && !curFunction->type)
18235 curFunction->type = ProcessType(curFunction->specifiers, curFunction->declarator);
18236 FreeType(exp->destType);
18237 exp->destType = (curFunction && curFunction->type && curFunction->type->kind == 11) ? curFunction->type->__anon1.__anon2.returnType : (((void *)0));
18239 exp->destType->refCount++;
18241 ProcessExpressionType(exp);
18248 ProcessDeclaration(stmt->__anon1.decl);
18253 struct AsmField * field;
18255 if(stmt->__anon1.asmStmt.inputFields)
18257 for(field = (*stmt->__anon1.asmStmt.inputFields).first; field; field = field->next)
18258 if(field->expression)
18259 ProcessExpressionType(field->expression);
18261 if(stmt->__anon1.asmStmt.outputFields)
18263 for(field = (*stmt->__anon1.asmStmt.outputFields).first; field; field = field->next)
18264 if(field->expression)
18265 ProcessExpressionType(field->expression);
18267 if(stmt->__anon1.asmStmt.clobberedFields)
18269 for(field = (*stmt->__anon1.asmStmt.clobberedFields).first; field; field = field->next)
18271 if(field->expression)
18272 ProcessExpressionType(field->expression);
18279 struct PropertyWatch * propWatch;
18280 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18281 struct Expression * object = stmt->__anon1._watch.object;
18282 struct Expression * watcher = stmt->__anon1._watch.watcher;
18285 ProcessExpressionType(watcher);
18287 ProcessExpressionType(object);
18290 if(watcher || thisClass)
18292 struct External * external = curExternal;
18293 struct Context * context = curContext;
18296 stmt->__anon1.expressions = MkList();
18297 curExternal = external->prev;
18298 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18300 struct ClassFunction * func;
18301 char watcherName[1024];
18302 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;
18303 struct External * createdExternal;
18304 struct External * externalDecl = MkExternalDeclaration((((void *)0)));
18306 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), curExternal->prev, externalDecl);
18307 sprintf(watcherName, "__ecerePropertyWatcher_%d", propWatcherID++);
18308 if(propWatch->deleteWatch)
18309 strcat(watcherName, "_delete");
18312 struct Identifier * propID;
18314 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18316 strcat(watcherName, "_");
18317 strcat(watcherName, propID->string);
18320 if(object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class && object->expType->__anon1._class->__anon1.registered)
18322 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)));
18323 ProcessClassFunctionBody(func, propWatch->compound);
18324 propWatch->compound = (((void *)0));
18325 createdExternal = ProcessClassFunction(watcherClass, func, ast, curExternal, 1);
18326 createdExternal->symbol->idCode = external->symbol->idCode;
18327 curExternal = createdExternal;
18328 ProcessFunction(createdExternal->__anon1.function);
18330 struct Declaration * decl = MkDeclaration(CopyList(createdExternal->__anon1.function->specifiers, (void *)(CopySpecifier)), MkListOne(MkInitDeclarator(CopyDeclarator(createdExternal->__anon1.function->declarator), (((void *)0)))));
18332 externalDecl->__anon1.declaration = decl;
18333 if(decl->symbol && !decl->symbol->__anon2.__anon1.pointerExternal)
18334 decl->symbol->__anon2.__anon1.pointerExternal = externalDecl;
18336 if(propWatch->deleteWatch)
18338 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18340 ListAdd(args, CopyExpression(object));
18341 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18342 ListAdd(args, MkExpIdentifier(MkIdentifier(watcherName)));
18343 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_WatchDestruction")), args));
18347 struct __ecereNameSpace__ecere__com__Class * _class = object->expType->__anon1._class->__anon1.registered;
18348 struct Identifier * propID;
18350 for(propID = (*propWatch->properties).first; propID; propID = propID->next)
18352 char propName[1024];
18353 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18357 char getName[1024], setName[1024];
18358 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18360 DeclareProperty(prop, setName, getName);
18361 strcpy(propName, "__ecereProp_");
18362 FullClassNameCat(propName, prop->_class->fullName, 0);
18363 strcat(propName, "_");
18364 FullClassNameCat(propName, prop->name, 1);
18365 ListAdd(args, CopyExpression(object));
18366 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18367 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18368 ListAdd(args, MkExpCast(MkTypeName(MkListOne(MkSpecifier(VOID)), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), MkExpIdentifier(MkIdentifier(watcherName))));
18369 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_Watch")), args));
18372 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18377 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid watched object\n", (((void *)0))));
18379 curExternal = external;
18380 curContext = context;
18382 FreeExpression(watcher);
18384 FreeExpression(object);
18385 FreeList(watches, (void *)(FreePropertyWatch));
18388 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a _class\n", (((void *)0))));
18392 for(propWatch = (*watches).first; propWatch; propWatch = propWatch->next)
18394 ProcessStatement(propWatch->compound);
18401 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18402 struct Expression * object = stmt->__anon1._watch.object;
18403 struct __ecereNameSpace__ecere__com__Class * _class;
18406 ProcessExpressionType(object);
18409 _class = object ? ((object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0))) : thisClass;
18412 struct Identifier * propID;
18415 stmt->__anon1.expressions = MkList();
18416 if(!watches && curFunction->propSet && (!object || (object->type == 0 && !strcmp(object->__anon1.__anon1.identifier->string, "this"))))
18418 watches = MkListOne(MkIdentifier(curFunction->propSet->string));
18425 for(propID = (*watches).first; propID; propID = propID->next)
18427 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18431 CreateFireWatcher(prop, object, stmt);
18434 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18439 struct __ecereNameSpace__ecere__com__Property * prop;
18440 struct __ecereNameSpace__ecere__com__Class * base;
18442 for(base = _class; base; base = base->base)
18444 for(prop = base->membersAndProperties.first; prop; prop = prop->next)
18446 if(prop->isProperty && prop->isWatchable)
18448 CreateFireWatcher(prop, object, stmt);
18454 FreeExpression(object);
18455 FreeList(watches, (void *)(FreeIdentifier));
18458 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18464 struct __ecereNameSpace__ecere__sys__OldList * watches = stmt->__anon1._watch.watches;
18465 struct Expression * object = stmt->__anon1._watch.object;
18466 struct Expression * watcher = stmt->__anon1._watch.watcher;
18467 struct __ecereNameSpace__ecere__com__Class * _class;
18470 ProcessExpressionType(object);
18472 ProcessExpressionType(watcher);
18475 _class = (object && object->expType && object->expType->kind == 8 && object->expType->__anon1._class) ? object->expType->__anon1._class->__anon1.registered : (((void *)0));
18476 if(watcher || thisClass)
18480 struct Identifier * propID;
18483 stmt->__anon1.expressions = MkList();
18486 struct __ecereNameSpace__ecere__sys__OldList * args;
18489 ListAdd(args, CopyExpression(object));
18490 ListAdd(args, MkExpConstant("0"));
18491 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18492 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18496 for(propID = (*watches).first; propID; propID = propID->next)
18498 char propName[1024];
18499 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_FindProperty(_class, propID->string, privateModule);
18503 char getName[1024], setName[1024];
18504 struct __ecereNameSpace__ecere__sys__OldList * args = MkList();
18506 DeclareProperty(prop, setName, getName);
18507 strcpy(propName, "__ecereProp_");
18508 FullClassNameCat(propName, prop->_class->fullName, 0);
18509 strcat(propName, "_");
18510 FullClassNameCat(propName, prop->name, 1);
18511 ListAdd(args, CopyExpression(object));
18512 ListAdd(args, MkExpIdentifier(MkIdentifier(propName)));
18513 ListAdd(args, watcher ? CopyExpression(watcher) : MkExpIdentifier(MkIdentifier("this")));
18514 ListAdd(stmt->__anon1.expressions, MkExpCall(MkExpIdentifier(MkIdentifier("ecere::com::eInstance_StopWatching")), args));
18517 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Property %s not found in class %s\n", (((void *)0))), propID->string, _class->fullName);
18521 FreeExpression(object);
18523 FreeExpression(watcher);
18524 FreeList(watches, (void *)(FreeIdentifier));
18527 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "Invalid object specified and not inside a class\n", (((void *)0))));
18530 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString("ec", "No observer specified and not inside a class\n", (((void *)0))));
18537 extern struct Expression * QBrackets(struct Expression * exp);
18539 extern struct TypeName * QMkType(const char * spec, struct Declarator * decl);
18541 extern struct Declarator * QMkPtrDecl(const char * id);
18543 extern struct Expression * MkExpPointer(struct Expression * expression, struct Identifier * member);
18545 extern struct Expression * QMkExpCond(struct Expression * cond, struct Expression * exp, struct Expression * elseExp);
18547 extern struct Statement * MkFireWatchersStmt(struct Expression * object, struct __ecereNameSpace__ecere__sys__OldList * watches);
18549 static void ProcessFunction(struct FunctionDefinition * function)
18551 struct Identifier * id = GetDeclId(function->declarator);
18552 struct Symbol * symbol = function->declarator ? function->declarator->symbol : (((void *)0));
18553 struct Type * type = symbol ? symbol->type : (((void *)0));
18554 struct __ecereNameSpace__ecere__com__Class * oldThisClass = thisClass;
18555 struct Context * oldTopContext = topContext;
18557 yylloc = function->loc;
18558 if(type && type->__anon1.__anon2.thisClass)
18560 struct Symbol * classSym = type->__anon1.__anon2.thisClass;
18561 struct __ecereNameSpace__ecere__com__Class * _class = type->__anon1.__anon2.thisClass->__anon1.registered;
18562 char className[1024];
18563 char structName[1024];
18564 struct Declarator * funcDecl;
18565 struct Symbol * thisSymbol;
18566 unsigned int typedObject = 0;
18568 if(_class && !_class->base)
18570 _class = currentClass;
18571 if(_class && !_class->symbol)
18572 _class->symbol = FindClass(_class->fullName);
18573 classSym = _class ? _class->symbol : (((void *)0));
18576 thisClass = _class;
18577 if(inCompiler && _class)
18579 if(type->kind == 11)
18581 if(symbol->type->__anon1.__anon2.params.count == 1 && ((struct Type *)symbol->type->__anon1.__anon2.params.first)->kind == 0)
18583 struct Type * param = symbol->type->__anon1.__anon2.params.first;
18585 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove(&symbol->type->__anon1.__anon2.params, param);
18588 if(type->classObjectType != 1)
18590 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert(&symbol->type->__anon1.__anon2.params, (((void *)0)), MkClassType(_class->fullName));
18591 symbol->type->__anon1.__anon2.staticMethod = 1;
18592 symbol->type->__anon1.__anon2.thisClass = (((void *)0));
18593 symbol->type->extraParam = 0;
18596 strcpy(className, "__ecereClass_");
18597 FullClassNameCat(className, _class->fullName, 1);
18598 structName[0] = (char)0;
18599 FullClassNameCat(structName, _class->fullName, 0);
18600 funcDecl = GetFuncDecl(function->declarator);
18603 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18605 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18607 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18609 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18610 FreeTypeName(param);
18613 if(!function->propertyNoThis)
18615 struct TypeName * thisParam = (((void *)0));
18617 if(type->classObjectType != 1)
18619 thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18620 if(!funcDecl->__anon1.function.parameters)
18621 funcDecl->__anon1.function.parameters = MkList();
18622 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18626 if(type->classObjectType != 1)
18628 if(type->byReference || _class->type == 3 || _class->type == 1000 || _class->type == 4 || _class->type == 2)
18629 thisParam->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), thisParam->declarator);
18631 thisParam = __extension__ ({
18632 struct TypeName * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_TypeName);
18634 __ecereInstance1->declarator = MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), MkDeclaratorIdentifier(MkIdentifier("class"))), __ecereInstance1->qualifiers = MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Class"), (((void *)0)))), __ecereInstance1;
18636 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18640 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18642 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18644 funcDecl = GetFuncDecl(initDecl->declarator);
18647 if(funcDecl->__anon1.function.parameters && (*funcDecl->__anon1.function.parameters).count == 1)
18649 struct TypeName * param = (*funcDecl->__anon1.function.parameters).first;
18651 if(param->qualifiers && (*param->qualifiers).count == 1 && ((struct Specifier *)(*param->qualifiers).first)->__anon1.specifier == VOID && !param->declarator)
18653 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*funcDecl->__anon1.function.parameters), param);
18654 FreeTypeName(param);
18657 if(type->classObjectType != 1)
18659 if((_class->type != 2 && _class->type != 3 && _class->type != 4) || function != (struct FunctionDefinition *)symbol->__anon2.__anon2.externalSet)
18661 struct TypeName * thisParam = QMkClass(_class->fullName, MkDeclaratorIdentifier(MkIdentifier("this")));
18663 if(!funcDecl->__anon1.function.parameters)
18664 funcDecl->__anon1.function.parameters = MkList();
18665 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*funcDecl->__anon1.function.parameters), (((void *)0)), thisParam);
18673 if(type->classObjectType != 1)
18675 thisSymbol = __extension__ ({
18676 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
18678 __ecereInstance1->string = __ecereNameSpace__ecere__sys__CopyString("this"), __ecereInstance1->type = classSym ? MkClassType(classSym->string) : (((void *)0)), __ecereInstance1;
18680 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&function->body->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18681 if(typedObject && thisSymbol->type)
18683 thisSymbol->type->classObjectType = 2;
18684 thisSymbol->type->byReference = type->byReference;
18685 thisSymbol->type->typedByReference = type->byReference;
18689 if(inCompiler && _class && (_class->type == 0) && type->classObjectType != 1)
18691 struct __ecereNameSpace__ecere__com__DataMember * member = (((void *)0));
18694 struct __ecereNameSpace__ecere__com__Class * base;
18696 for(base = _class; base && base->type != 1000; base = base->next)
18698 for(member = base->membersAndProperties.first; member; member = member->next)
18699 if(!member->isProperty)
18705 for(member = _class->membersAndProperties.first; member; member = member->next)
18706 if(!member->isProperty)
18710 char pointerName[1024];
18711 struct Declaration * decl;
18712 struct Initializer * initializer;
18713 struct Expression * exp, * bytePtr;
18715 strcpy(pointerName, "__ecerePointer_");
18716 FullClassNameCat(pointerName, _class->fullName, 0);
18718 char className[1024];
18720 strcpy(className, "__ecereClass_");
18721 FullClassNameCat(className, classSym->string, 1);
18722 DeclareClass(classSym, className);
18724 bytePtr = QBrackets(MkExpCast(QMkType("char", QMkPtrDecl((((void *)0)))), QMkExpId("this")));
18729 sprintf(string, "%d", _class->offset);
18730 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpConstant(string)));
18734 exp = QBrackets(MkExpOp(bytePtr, '+', MkExpPointer(QMkExpId(className), MkIdentifier("offset"))));
18736 exp = QBrackets(QMkExpCond(QMkExpId("this"), exp, MkExpConstant("0")));
18737 exp->expType = __extension__ ({
18738 struct Type * __ecereInstance2 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18740 __ecereInstance2->refCount = 1, __ecereInstance2->kind = 13, __ecereInstance2->__anon1.type = __extension__ ({
18741 struct Type * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Type);
18743 __ecereInstance1->refCount = 1, __ecereInstance1->kind = 0, __ecereInstance1;
18744 }), __ecereInstance2;
18748 yylloc = function->body->loc;
18749 initializer = MkInitializerAssignment(MkExpCast(MkTypeName(MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0)))), MkDeclaratorPointer(MkPointer((((void *)0)), (((void *)0))), (((void *)0)))), exp));
18751 struct Context * prevContext = curContext;
18752 struct __ecereNameSpace__ecere__sys__OldList * list;
18754 curContext = function->body->__anon1.compound.context;
18755 decl = MkDeclaration((list = MkListOne(MkStructOrUnion(3, MkIdentifier(structName), (((void *)0))))), MkListOne(MkInitDeclarator(QMkPtrDecl(pointerName), initializer)));
18756 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*list), (((void *)0)), MkSpecifierExtended(MkExtDeclAttrib(MkAttrib(ATTRIB, MkListOne(MkAttribute(__ecereNameSpace__ecere__sys__CopyString("unused"), (((void *)0))))))));
18757 curContext = prevContext;
18759 decl->symbol = (((void *)0));
18760 if(!function->body->__anon1.compound.declarations)
18761 function->body->__anon1.compound.declarations = MkList();
18762 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*function->body->__anon1.compound.declarations), (((void *)0)), decl);
18768 thisClass = (((void *)0));
18771 FreeSpecifier(id->_class);
18772 id->_class = (((void *)0));
18773 if(symbol && symbol->__anon2.__anon1.pointerExternal && symbol->__anon2.__anon1.pointerExternal->type == 1)
18775 struct InitDeclarator * initDecl = (*symbol->__anon2.__anon1.pointerExternal->__anon1.declaration->__anon1.__anon1.declarators).first;
18777 id = GetDeclId(initDecl->declarator);
18778 FreeSpecifier(id->_class);
18779 id->_class = (((void *)0));
18783 topContext = function->body->__anon1.compound.context;
18785 struct FunctionDefinition * oldFunction = curFunction;
18787 curFunction = function;
18789 ProcessStatement(function->body);
18790 if(inCompiler && function->propSet && !function->propSet->fireWatchersDone)
18792 struct Statement * prevCompound = curCompound;
18793 struct Context * prevContext = curContext;
18794 struct Statement * fireWatchers = MkFireWatchersStmt((((void *)0)), (((void *)0)));
18796 if(!function->body->__anon1.compound.statements)
18797 function->body->__anon1.compound.statements = MkList();
18798 ListAdd(function->body->__anon1.compound.statements, fireWatchers);
18799 curCompound = function->body;
18800 curContext = function->body->__anon1.compound.context;
18801 ProcessStatement(fireWatchers);
18802 curContext = prevContext;
18803 curCompound = prevCompound;
18805 curFunction = oldFunction;
18807 if(function->declarator)
18809 ProcessDeclarator(function->declarator);
18811 topContext = oldTopContext;
18812 thisClass = oldThisClass;
18815 extern void FreeSymbol(struct Symbol * symbol);
18817 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
18819 static void ProcessClass(struct __ecereNameSpace__ecere__sys__OldList * definitions, struct Symbol * symbol)
18821 struct ClassDef * def;
18822 struct External * external = curExternal;
18823 struct __ecereNameSpace__ecere__com__Class * regClass = symbol ? symbol->__anon1.registered : (((void *)0));
18825 for(def = definitions->first; def; def = def->next)
18829 if(def->__anon1.function->declarator)
18830 curExternal = def->__anon1.function->declarator->symbol->__anon2.__anon1.pointerExternal;
18832 curExternal = external;
18833 ProcessFunction((struct FunctionDefinition *)def->__anon1.function);
18835 else if(def->type == 2)
18837 if(def->__anon1.decl->type == 2)
18839 thisClass = regClass;
18840 ProcessInstantiationType(def->__anon1.decl->__anon1.inst);
18841 thisClass = (((void *)0));
18845 struct __ecereNameSpace__ecere__com__Class * backThisClass = thisClass;
18848 thisClass = regClass;
18849 ProcessDeclaration(def->__anon1.decl);
18850 thisClass = backThisClass;
18853 else if(def->type == 1 && def->__anon1.defProperties)
18855 struct MemberInit * defProperty;
18856 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);
18858 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18859 for(defProperty = (*def->__anon1.defProperties).first; defProperty; defProperty = defProperty->next)
18861 thisClass = regClass;
18862 ProcessMemberInitData(defProperty, regClass, (((void *)0)), (((void *)0)), (((void *)0)), (((void *)0)));
18863 thisClass = (((void *)0));
18865 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalContext->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18866 FreeSymbol(thisSymbol);
18868 else if(def->type == 3 && def->__anon1.propertyDef)
18870 struct PropertyDef * prop = def->__anon1.propertyDef;
18872 thisClass = regClass;
18877 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18879 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->setStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18881 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalSet : (((void *)0));
18882 ProcessStatement(prop->setStmt);
18888 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18890 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->getStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18892 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalGet : (((void *)0));
18893 ProcessStatement(prop->getStmt);
18895 if(prop->issetStmt)
18899 struct Symbol * thisSymbol = (thisSymbol = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol), thisSymbol->string = __ecereNameSpace__ecere__sys__CopyString("this"), thisSymbol->type = MkClassType(regClass->fullName), thisSymbol);
18901 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&prop->issetStmt->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18903 curExternal = prop->symbol ? prop->symbol->__anon2.__anon2.externalIsSet : (((void *)0));
18904 ProcessStatement(prop->issetStmt);
18906 thisClass = (((void *)0));
18908 else if(def->type == 4 && def->__anon1.propertyWatch)
18910 struct PropertyWatch * propertyWatch = def->__anon1.propertyWatch;
18912 thisClass = regClass;
18913 if(propertyWatch->compound)
18915 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);
18917 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&propertyWatch->compound->__anon1.compound.context->symbols, (struct __ecereNameSpace__ecere__sys__BTNode *)thisSymbol);
18918 curExternal = (((void *)0));
18919 ProcessStatement(propertyWatch->compound);
18921 thisClass = (((void *)0));
18926 void DeclareFunctionUtil(const char * s)
18928 struct __ecereNameSpace__ecere__com__GlobalFunction * function = __ecereNameSpace__ecere__com__eSystem_FindFunction(privateModule, s);
18935 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)function->module + structSize_Instance)))->importType != 1 && (!function->dataType || !function->dataType->dllExport))
18936 strcpy(name, "__ecereFunction_");
18937 FullClassNameCat(name, s, 0);
18938 DeclareFunction(function, name);
18942 extern struct __ecereNameSpace__ecere__com__Instance * GetPrivateModule(void);
18944 extern unsigned int memoryGuard;
18946 void ComputeDataTypes()
18948 struct External * external;
18949 struct External * temp = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_External);
18950 struct External * after = (((void *)0));
18952 currentClass = (((void *)0));
18953 containerClass = __ecereNameSpace__ecere__com__eSystem_FindClass(GetPrivateModule(), "Container");
18954 for(external = (*ast).first; external; external = external->next)
18956 if(external->type == 1)
18958 struct Declaration * decl = external->__anon1.declaration;
18962 struct __ecereNameSpace__ecere__sys__OldList * decls = decl->__anon1.__anon1.declarators;
18966 struct InitDeclarator * initDecl = (*decls).first;
18970 struct Declarator * declarator = initDecl->declarator;
18972 if(declarator && declarator->type == 1)
18974 struct Identifier * id = declarator->__anon1.identifier;
18976 if(id && id->string)
18978 if(!strcmp(id->string, "uintptr_t") || !strcmp(id->string, "intptr_t") || !strcmp(id->string, "size_t") || !strcmp(id->string, "ssize_t"))
18980 external->symbol->id = -1001, external->symbol->idCode = -1001;
18991 struct External * e = MkExternalDeclaration(MkDeclaration(MkListOne(MkStructOrUnion(3, MkIdentifier("__ecereNameSpace__ecere__com__Instance"), (((void *)0)))), (((void *)0))));
18993 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, e);
18996 temp->symbol = __extension__ ({
18997 struct Symbol * __ecereInstance1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_Symbol);
18999 __ecereInstance1->id = -1000, __ecereInstance1->idCode = -1000, __ecereInstance1;
19001 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Insert((&*ast), after, temp);
19002 curExternal = temp;
19003 DeclareFunctionUtil("eSystem_New");
19004 DeclareFunctionUtil("eSystem_New0");
19005 DeclareFunctionUtil("eSystem_Renew");
19006 DeclareFunctionUtil("eSystem_Renew0");
19007 DeclareFunctionUtil("eSystem_Delete");
19008 DeclareFunctionUtil("eClass_GetProperty");
19009 DeclareFunctionUtil("eClass_SetProperty");
19010 DeclareFunctionUtil("eInstance_FireSelfWatchers");
19011 DeclareFunctionUtil("eInstance_SetMethod");
19012 DeclareFunctionUtil("eInstance_IncRef");
19013 DeclareFunctionUtil("eInstance_StopWatching");
19014 DeclareFunctionUtil("eInstance_Watch");
19015 DeclareFunctionUtil("eInstance_FireWatchers");
19018 DeclareFunctionUtil("MemoryGuard_PushLoc");
19019 DeclareFunctionUtil("MemoryGuard_PopLoc");
19021 DeclareStruct("ecere::com::Class", 0);
19022 DeclareStruct("ecere::com::Instance", 0);
19023 DeclareStruct("ecere::com::Property", 0);
19024 DeclareStruct("ecere::com::DataMember", 0);
19025 DeclareStruct("ecere::com::Method", 0);
19026 DeclareStruct("ecere::com::SerialBuffer", 0);
19027 DeclareStruct("ecere::com::ClassTemplateArgument", 0);
19028 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), temp);
19029 for(external = (*ast).first; external; external = external->next)
19031 afterExternal = curExternal = external;
19032 if(external->type == 0)
19034 currentClass = external->__anon1.function->_class;
19035 ProcessFunction(external->__anon1.function);
19037 else if(external->type == 1)
19039 currentClass = (((void *)0));
19040 if(external->__anon1.declaration)
19041 ProcessDeclaration(external->__anon1.declaration);
19043 else if(external->type == 2)
19045 struct ClassDefinition * _class = external->__anon1._class;
19047 currentClass = external->symbol->__anon1.registered;
19048 if(_class->definitions)
19050 ProcessClass(_class->definitions, _class->symbol);
19054 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Remove((&*ast), external);
19055 ((external ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)external) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(external)) : 0), external = 0);
19058 else if(external->type == 4)
19060 thisNameSpace = external->__anon1.id->string;
19063 currentClass = (((void *)0));
19064 thisNameSpace = (((void *)0));
19065 curExternal = (((void *)0));
19066 ((temp->symbol ? (__ecereClass_Symbol->Destructor ? __ecereClass_Symbol->Destructor((void *)temp->symbol) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp->symbol)) : 0), temp->symbol = 0);
19067 ((temp ? (__ecereClass_External->Destructor ? __ecereClass_External->Destructor((void *)temp) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(temp)) : 0), temp = 0);
19070 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);
19072 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);
19074 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
19076 void __ecereRegisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)
19078 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
19080 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetYydebug", "void SetYydebug(bool b)", SetYydebug, module, 1);
19081 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetThisClass", "void SetThisClass(ecere::com::Class c)", SetThisClass, module, 1);
19082 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetThisClass", "ecere::com::Class GetThisClass(void)", GetThisClass, module, 1);
19083 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintExpression", "void PrintExpression(Expression exp, char * string)", PrintExpression, module, 1);
19084 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessTemplateParameterType", "Type ProcessTemplateParameterType(TemplateParameter param)", ProcessTemplateParameterType, module, 2);
19085 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("NeedCast", "bool NeedCast(Type type1, Type type2)", NeedCast, module, 2);
19086 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt", "char * PrintInt(int64 result)", PrintInt, module, 1);
19087 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt", "char * PrintUInt(uint64 result)", PrintUInt, module, 1);
19088 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintInt64", "char * PrintInt64(int64 result)", PrintInt64, module, 1);
19089 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUInt64", "char * PrintUInt64(uint64 result)", PrintUInt64, module, 1);
19090 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt", "char * PrintHexUInt(uint64 result)", PrintHexUInt, module, 1);
19091 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintHexUInt64", "char * PrintHexUInt64(uint64 result)", PrintHexUInt64, module, 1);
19092 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintShort", "char * PrintShort(short result)", PrintShort, module, 1);
19093 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUShort", "char * PrintUShort(uint16 result)", PrintUShort, module, 1);
19094 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintChar", "char * PrintChar(char result)", PrintChar, module, 1);
19095 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintUChar", "char * PrintUChar(byte result)", PrintUChar, module, 1);
19096 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintFloat", "char * PrintFloat(float result)", PrintFloat, module, 1);
19097 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintDouble", "char * PrintDouble(double result)", PrintDouble, module, 1);
19098 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt", "bool GetOpInt(Operand op2, int * value2)", GetOpInt, module, 1);
19099 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt", "bool GetInt(Expression exp, int * value2)", GetInt, module, 1);
19100 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt", "bool GetOpUInt(Operand op2, uint * value2)", GetOpUInt, module, 1);
19101 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt", "bool GetUInt(Expression exp, uint * value2)", GetUInt, module, 1);
19102 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpInt64", "bool GetOpInt64(Operand op2, int64 * value2)", GetOpInt64, module, 1);
19103 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetInt64", "bool GetInt64(Expression exp, int64 * value2)", GetInt64, module, 1);
19104 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUInt64", "bool GetOpUInt64(Operand op2, uint64 * value2)", GetOpUInt64, module, 1);
19105 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUInt64", "bool GetUInt64(Expression exp, uint64 * value2)", GetUInt64, module, 1);
19106 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntPtr", "bool GetOpIntPtr(Operand op2, intptr * value2)", GetOpIntPtr, module, 1);
19107 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntPtr", "bool GetIntPtr(Expression exp, intptr * value2)", GetIntPtr, module, 1);
19108 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntPtr", "bool GetOpUIntPtr(Operand op2, uintptr * value2)", GetOpUIntPtr, module, 1);
19109 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntPtr", "bool GetUIntPtr(Expression exp, uintptr * value2)", GetUIntPtr, module, 1);
19110 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpIntSize", "bool GetOpIntSize(Operand op2, intsize * value2)", GetOpIntSize, module, 1);
19111 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIntSize", "bool GetIntSize(Expression exp, intsize * value2)", GetIntSize, module, 1);
19112 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUIntSize", "bool GetOpUIntSize(Operand op2, uintsize * value2)", GetOpUIntSize, module, 1);
19113 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUIntSize", "bool GetUIntSize(Expression exp, uintsize * value2)", GetUIntSize, module, 1);
19114 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpShort", "bool GetOpShort(Operand op2, short * value2)", GetOpShort, module, 1);
19115 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetShort", "bool GetShort(Expression exp, short * value2)", GetShort, module, 1);
19116 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUShort", "bool GetOpUShort(Operand op2, uint16 * value2)", GetOpUShort, module, 1);
19117 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUShort", "bool GetUShort(Expression exp, uint16 * value2)", GetUShort, module, 1);
19118 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpChar", "bool GetOpChar(Operand op2, char * value2)", GetOpChar, module, 1);
19119 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetChar", "bool GetChar(Expression exp, char * value2)", GetChar, module, 1);
19120 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpUChar", "bool GetOpUChar(Operand op2, byte * value2)", GetOpUChar, module, 1);
19121 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetUChar", "bool GetUChar(Expression exp, byte * value2)", GetUChar, module, 1);
19122 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpFloat", "bool GetOpFloat(Operand op2, float * value2)", GetOpFloat, module, 1);
19123 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetFloat", "bool GetFloat(Expression exp, float * value2)", GetFloat, module, 1);
19124 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOpDouble", "bool GetOpDouble(Operand op2, double * value2)", GetOpDouble, module, 1);
19125 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetDouble", "bool GetDouble(Expression exp, double * value2)", GetDouble, module, 1);
19126 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeClassMembers", "void ComputeClassMembers(ecere::com::Class _class, bool isMember)", ComputeClassMembers, module, 2);
19127 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeModuleClasses", "void ComputeModuleClasses(ecere::com::Module module)", ComputeModuleClasses, module, 1);
19128 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeTypeSize", "int ComputeTypeSize(Type type)", ComputeTypeSize, module, 1);
19129 __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);
19130 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareStruct", "void DeclareStruct(const char * name, bool skipNoHead)", DeclareStruct, module, 2);
19131 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareProperty", "void DeclareProperty(ecere::com::Property prop, char * setName, char * getName)", DeclareProperty, module, 2);
19132 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("Dereference", "Type Dereference(Type source)", Dereference, module, 1);
19133 __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);
19134 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessInstantiationType", "void ProcessInstantiationType(Instantiation inst)", ProcessInstantiationType, module, 2);
19135 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindTemplateArg", "ecere::com::ClassTemplateArgument * FindTemplateArg(ecere::com::Class _class, TemplateParameter param)", FindTemplateArg, module, 2);
19136 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetupTemplatesContext", "Context SetupTemplatesContext(ecere::com::Class _class)", SetupTemplatesContext, module, 1);
19137 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FinishTemplatesContext", "void FinishTemplatesContext(Context context)", FinishTemplatesContext, module, 1);
19138 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessMethodType", "void ProcessMethodType(ecere::com::Method method)", ProcessMethodType, module, 1);
19139 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessPropertyType", "void ProcessPropertyType(ecere::com::Property prop)", ProcessPropertyType, module, 1);
19140 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareMethod", "void DeclareMethod(ecere::com::Method method, const char * name)", DeclareMethod, module, 1);
19141 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClass", "char * ReplaceThisClass(ecere::com::Class _class)", ReplaceThisClass, module, 2);
19142 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassType", "Type ReplaceThisClassType(ecere::com::Class _class)", ReplaceThisClassType, module, 2);
19143 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceThisClassSpecifiers", "void ReplaceThisClassSpecifiers(ecere::sys::OldList specs, ecere::com::Class _class)", ReplaceThisClassSpecifiers, module, 2);
19144 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunction", "bool DeclareFunction(ecere::com::GlobalFunction function, char * name)", DeclareFunction, module, 2);
19145 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareGlobalData", "void DeclareGlobalData(GlobalData data)", DeclareGlobalData, module, 2);
19146 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "Conversion", 0, sizeof(struct Conversion), 0, (void *)0, (void *)0, module, 2, 1);
19147 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + structSize_Instance)))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + structSize_Instance)))->application && class)
19148 __ecereClass_Conversion = class;
19149 __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);
19150 __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);
19151 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ModuleVisibility", "bool ModuleVisibility(ecere::com::Module searchIn, ecere::com::Module searchFor)", ModuleVisibility, module, 1);
19152 __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);
19153 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("MatchTypeExpression", "bool MatchTypeExpression(Expression sourceExp, Type dest, ecere::sys::OldList conversions, bool skipUnitBla, bool warnConst)", MatchTypeExpression, module, 2);
19154 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReadString", "void ReadString(char * output, char * string)", ReadString, module, 1);
19155 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("UnescapeString", "int UnescapeString(char * d, char * s, int len)", UnescapeString, module, 1);
19156 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OffsetEscapedString", "char * OffsetEscapedString(char * s, int len, int offset)", OffsetEscapedString, module, 1);
19157 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetOperand", "Operand GetOperand(Expression exp)", GetOperand, module, 1);
19158 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PopulateInstance", "void PopulateInstance(Instantiation inst)", PopulateInstance, module, 1);
19159 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeInstantiation", "void ComputeInstantiation(Expression exp)", ComputeInstantiation, module, 1);
19160 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CallOperator", "void CallOperator(Expression exp, Expression exp1, Expression exp2, Operand op1, Operand op2)", CallOperator, module, 1);
19161 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeExpression", "void ComputeExpression(Expression exp)", ComputeExpression, module, 1);
19162 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckTemplateTypes", "void CheckTemplateTypes(Expression exp)", CheckTemplateTypes, module, 1);
19163 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindSymbol", "Symbol FindSymbol(const char * name, Context startContext, Context endContext, bool isStruct, bool globalNameSpace)", FindSymbol, module, 1);
19164 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintType", "void PrintType(Type type, char * string, bool printName, bool fullName)", PrintType, module, 1);
19165 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("PrintTypeNoConst", "void PrintTypeNoConst(Type type, char * string, bool printName, bool fullName)", PrintTypeNoConst, module, 1);
19166 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindMemberAndOffset", "Type FindMemberAndOffset(Type type, char * string, uint * offset)", FindMemberAndOffset, module, 1);
19167 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetParseError", "bool GetParseError(void)", GetParseError, module, 1);
19168 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ParseExpressionString", "Expression ParseExpressionString(char * expression)", ParseExpressionString, module, 1);
19169 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ReplaceExpContents", "void ReplaceExpContents(Expression checkedExp, Expression newExp)", ReplaceExpContents, module, 1);
19170 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyAnyObjectLogic", "void ApplyAnyObjectLogic(Expression e)", ApplyAnyObjectLogic, module, 1);
19171 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ApplyLocation", "void ApplyLocation(Expression exp, Location loc)", ApplyLocation, module, 1);
19172 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ProcessExpressionType", "void ProcessExpressionType(Expression exp)", ProcessExpressionType, module, 1);
19173 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DeclareFunctionUtil", "void DeclareFunctionUtil(const String s)", DeclareFunctionUtil, module, 1);
19174 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ComputeDataTypes", "void ComputeDataTypes(void)", ComputeDataTypes, module, 1);
19177 void __ecereUnregisterModule_pass15(struct __ecereNameSpace__ecere__com__Instance * module)