02a83b49213d28e44a878acef10cce9389c21141
[sdk] / compiler / bootstrap / libec / bootstrap / loadSymbols.c
1 #if defined(__GNUC__)
2 typedef long long int64;
3 typedef unsigned long long uint64;
4 #elif defined(__TINYC__)
5 #include <stdarg.h>
6 #define __builtin_va_list va_list
7 #define __builtin_va_start va_start
8 #define __builtin_va_end va_end
9 #ifdef _WIN32
10 #define strcasecmp stricmp
11 #define strncasecmp strnicmp
12 #define __declspec(x) __attribute__((x))
13 #endif
14 typedef long long int64;
15 typedef unsigned long long uint64;
16 #else
17 typedef __int64 int64;
18 typedef unsigned __int64 uint64;
19 #endif
20 #ifdef __BIG_ENDIAN__
21 #define __ENDIAN_PAD(x) (8 - (x))
22 #else
23 #define __ENDIAN_PAD(x) 0
24 #endif
25 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode;
26
27 struct __ecereNameSpace__ecere__sys__BTNode;
28
29 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BinaryTree;
30
31 struct __ecereNameSpace__ecere__sys__BinaryTree
32 {
33 struct __ecereNameSpace__ecere__sys__BTNode * root;
34 int count;
35 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b);
36 void (*  FreeKey)(void *  key);
37 };
38
39 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList;
40
41 struct __ecereNameSpace__ecere__sys__OldList
42 {
43 void *  first;
44 void *  last;
45 int count;
46 unsigned int offset;
47 unsigned int circ;
48 };
49
50 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method;
51
52 struct __ecereNameSpace__ecere__com__Method
53 {
54 char *  name;
55 struct __ecereNameSpace__ecere__com__Method * parent;
56 struct __ecereNameSpace__ecere__com__Method * left;
57 struct __ecereNameSpace__ecere__com__Method * right;
58 int depth;
59 int (*  function)();
60 int vid;
61 int type;
62 struct __ecereNameSpace__ecere__com__Class * _class;
63 void *  symbol;
64 char *  dataTypeString;
65 struct Type * dataType;
66 int memberAccess;
67 };
68
69 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property;
70
71 struct __ecereNameSpace__ecere__com__Property
72 {
73 struct __ecereNameSpace__ecere__com__Property * prev;
74 struct __ecereNameSpace__ecere__com__Property * next;
75 char *  name;
76 unsigned int isProperty;
77 int memberAccess;
78 int id;
79 struct __ecereNameSpace__ecere__com__Class * _class;
80 char *  dataTypeString;
81 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
82 struct Type * dataType;
83 void (*  Set)();
84 int (*  Get)();
85 unsigned int (*  IsSet)();
86 void *  data;
87 void *  symbol;
88 int vid;
89 unsigned int conversion;
90 unsigned int watcherOffset;
91 char *  category;
92 unsigned int compiled;
93 unsigned int selfWatchable;
94 unsigned int isWatchable;
95 };
96
97 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition;
98
99 struct CodePosition
100 {
101 int line;
102 int charPos;
103 int pos;
104 unsigned int included;
105 };
106
107 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location;
108
109 struct Location
110 {
111 struct CodePosition start;
112 struct CodePosition end;
113 };
114
115 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib;
116
117 struct Attrib;
118
119 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ExtDecl;
120
121 struct ExtDecl;
122
123 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassDefinition;
124
125 struct ClassDefinition;
126
127 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Context;
128
129 struct Context;
130
131 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Instantiation;
132
133 struct Instantiation;
134
135 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declaration;
136
137 struct Declaration;
138
139 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Statement;
140
141 struct Statement;
142
143 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TypeName;
144
145 struct TypeName;
146
147 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Initializer;
148
149 struct Initializer;
150
151 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataValue;
152
153 struct __ecereNameSpace__ecere__com__DataValue
154 {
155 union
156 {
157 char c;
158 unsigned char uc;
159 short s;
160 unsigned short us;
161 int i;
162 unsigned int ui;
163 void *  p;
164 float f;
165 double d;
166 long long i64;
167 uint64 ui64;
168 };
169 };
170
171 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression;
172
173 struct Expression
174 {
175 struct Expression * prev;
176 struct Expression * next;
177 struct Location loc;
178 int type;
179 union
180 {
181 struct
182 {
183 char *  constant;
184 struct Identifier * identifier;
185 };
186 struct Statement * compound;
187 struct Instantiation * instance;
188 char *  string;
189 struct __ecereNameSpace__ecere__sys__OldList *  list;
190 struct
191 {
192 struct __ecereNameSpace__ecere__sys__OldList * specifiers;
193 struct Declarator * decl;
194 } _classExp;
195 struct
196 {
197 struct Identifier * id;
198 } classData;
199 struct
200 {
201 struct Expression * exp;
202 struct __ecereNameSpace__ecere__sys__OldList * arguments;
203 struct Location argLoc;
204 } call;
205 struct
206 {
207 struct Expression * exp;
208 struct __ecereNameSpace__ecere__sys__OldList * index;
209 } index;
210 struct
211 {
212 struct Expression * exp;
213 struct Identifier * member;
214 int memberType;
215 unsigned int thisPtr;
216 } member;
217 struct
218 {
219 int op;
220 struct Expression * exp1;
221 struct Expression * exp2;
222 } op;
223 struct TypeName * typeName;
224 struct Specifier * _class;
225 struct
226 {
227 struct TypeName * typeName;
228 struct Expression * exp;
229 } cast;
230 struct
231 {
232 struct Expression * cond;
233 struct __ecereNameSpace__ecere__sys__OldList * exp;
234 struct Expression * elseExp;
235 } cond;
236 struct
237 {
238 struct TypeName * typeName;
239 struct Expression * size;
240 } _new;
241 struct
242 {
243 struct TypeName * typeName;
244 struct Expression * size;
245 struct Expression * exp;
246 } _renew;
247 struct
248 {
249 char * table;
250 struct Identifier * id;
251 } db;
252 struct
253 {
254 struct Expression * ds;
255 struct Expression * name;
256 } dbopen;
257 struct
258 {
259 struct TypeName * typeName;
260 struct Initializer * initializer;
261 } initializer;
262 struct
263 {
264 struct Expression * exp;
265 struct TypeName * typeName;
266 } vaArg;
267 };
268 unsigned int debugValue;
269 struct __ecereNameSpace__ecere__com__DataValue val;
270 unsigned int address;
271 unsigned int hasAddress;
272 struct Type * expType;
273 struct Type * destType;
274 unsigned int usage;
275 int tempCount;
276 unsigned int byReference;
277 unsigned int isConstant;
278 unsigned int addedThis;
279 unsigned int needCast;
280 unsigned int thisPtr;
281 };
282
283 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype;
284
285 struct TemplateDatatype;
286
287 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateArgument;
288
289 struct TemplateArgument;
290
291 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateParameter;
292
293 struct TemplateParameter;
294
295 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Specifier;
296
297 struct Specifier;
298
299 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Identifier;
300
301 struct Identifier;
302
303 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Pointer;
304
305 struct Pointer;
306
307 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Declarator;
308
309 struct Declarator;
310
311 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_FunctionDefinition;
312
313 struct FunctionDefinition;
314
315 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DBTableDef;
316
317 struct DBTableDef;
318
319 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_External;
320
321 struct External;
322
323 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ModuleImport;
324
325 struct ModuleImport;
326
327 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ClassImport;
328
329 struct ClassImport;
330
331 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Symbol;
332
333 struct Symbol
334 {
335 char *  string;
336 struct Symbol * parent;
337 struct Symbol * left;
338 struct Symbol * right;
339 int depth;
340 struct Type * type;
341 union
342 {
343 struct __ecereNameSpace__ecere__com__Method * method;
344 struct __ecereNameSpace__ecere__com__Property * _property;
345 struct __ecereNameSpace__ecere__com__Class * registered;
346 };
347 int id;
348 int idCode;
349 union
350 {
351 struct
352 {
353 struct External * pointerExternal;
354 struct External * structExternal;
355 };
356 struct
357 {
358 struct External * externalGet;
359 struct External * externalSet;
360 struct External * externalPtr;
361 struct External * externalIsSet;
362 };
363 struct
364 {
365 struct External * methodExternal;
366 struct External * methodCodeExternal;
367 };
368 };
369 unsigned int imported;
370 unsigned int declaredStructSym;
371 struct __ecereNameSpace__ecere__com__Class * _class;
372 unsigned int declaredStruct;
373 unsigned int needConstructor;
374 unsigned int needDestructor;
375 char *  constructorName;
376 char *  structName;
377 char *  className;
378 char *  destructorName;
379 struct ModuleImport * module;
380 struct ClassImport * _import;
381 struct Location nameLoc;
382 unsigned int isParam;
383 unsigned int isRemote;
384 unsigned int isStruct;
385 unsigned int fireWatchersDone;
386 int declaring;
387 unsigned int classData;
388 unsigned int isStatic;
389 char *  shortName;
390 struct __ecereNameSpace__ecere__sys__OldList *  templateParams;
391 struct __ecereNameSpace__ecere__sys__OldList templatedClasses;
392 struct Context * ctx;
393 int isIterator;
394 struct Expression * propCategory;
395 };
396
397 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type;
398
399 struct Type;
400
401 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Class;
402
403 struct __ecereNameSpace__ecere__com__Class
404 {
405 struct __ecereNameSpace__ecere__com__Class * prev;
406 struct __ecereNameSpace__ecere__com__Class * next;
407 char *  name;
408 int offset;
409 int structSize;
410 int (* *  _vTbl)();
411 int vTblSize;
412 int (*  Constructor)(struct __ecereNameSpace__ecere__com__Instance *);
413 void (*  Destructor)(struct __ecereNameSpace__ecere__com__Instance *);
414 int offsetClass;
415 int sizeClass;
416 struct __ecereNameSpace__ecere__com__Class * base;
417 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
418 struct __ecereNameSpace__ecere__sys__BinaryTree members;
419 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
420 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
421 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
422 struct __ecereNameSpace__ecere__sys__OldList derivatives;
423 int memberID;
424 int startMemberID;
425 int type;
426 struct __ecereNameSpace__ecere__com__Instance * module;
427 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
428 char *  dataTypeString;
429 struct Type * dataType;
430 int typeSize;
431 int defaultAlignment;
432 void (*  Initialize)();
433 int memberOffset;
434 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
435 char *  designerClass;
436 unsigned int noExpansion;
437 char *  defaultProperty;
438 unsigned int comRedefinition;
439 int count;
440 unsigned int isRemote;
441 unsigned int internalDecl;
442 void *  data;
443 unsigned int computeSize;
444 int structAlignment;
445 int destructionWatchOffset;
446 unsigned int fixed;
447 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
448 int inheritanceAccess;
449 char *  fullName;
450 void *  symbol;
451 struct __ecereNameSpace__ecere__sys__OldList conversions;
452 struct __ecereNameSpace__ecere__sys__OldList templateParams;
453 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
454 struct __ecereNameSpace__ecere__com__Class * templateClass;
455 struct __ecereNameSpace__ecere__sys__OldList templatized;
456 int numParams;
457 };
458
459 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
460
461 struct __ecereNameSpace__ecere__com__Instance
462 {
463 int (* *  _vTbl)();
464 struct __ecereNameSpace__ecere__com__Class * _class;
465 int _refCount;
466 };
467
468 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember;
469
470 struct __ecereNameSpace__ecere__com__DataMember
471 {
472 struct __ecereNameSpace__ecere__com__DataMember * prev;
473 struct __ecereNameSpace__ecere__com__DataMember * next;
474 char *  name;
475 unsigned int isProperty;
476 int memberAccess;
477 int id;
478 struct __ecereNameSpace__ecere__com__Class * _class;
479 char *  dataTypeString;
480 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
481 struct Type * dataType;
482 int type;
483 int offset;
484 int memberID;
485 struct __ecereNameSpace__ecere__sys__OldList members;
486 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
487 int memberOffset;
488 int structAlignment;
489 };
490
491 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer;
492
493 struct __ecereNameSpace__ecere__com__SerialBuffer
494 {
495 unsigned char *  _buffer;
496 unsigned int count;
497 unsigned int _size;
498 unsigned int pos;
499 };
500
501 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument;
502
503 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
504 {
505 union
506 {
507 struct
508 {
509 char *  dataTypeString;
510 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
511 };
512 struct __ecereNameSpace__ecere__com__DataValue expression;
513 struct
514 {
515 char *  memberString;
516 union
517 {
518 struct __ecereNameSpace__ecere__com__DataMember * member;
519 struct __ecereNameSpace__ecere__com__Property * prop;
520 struct __ecereNameSpace__ecere__com__Method * method;
521 };
522 };
523 };
524 };
525
526 extern int yychar;
527
528 struct __ecereNameSpace__ecere__com__NameSpace * globalData;
529
530 void SetGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * nameSpace)
531 {
532 globalData = nameSpace;
533 }
534
535 struct __ecereNameSpace__ecere__sys__OldList dataRedefinitions;
536
537 extern char sourceFileStack[10][797];
538
539 extern int include_stack_ptr;
540
541 static int numIncludes;
542
543 static char ** includes;
544
545 unsigned int inIDE = 0x0;
546
547 void SetInIDE(unsigned int b)
548 {
549 inIDE = b;
550 }
551
552 struct __ecereNameSpace__ecere__com__Instance * sourceDirs;
553
554 void SetSourceDirs(struct __ecereNameSpace__ecere__com__Instance * list)
555 {
556 sourceDirs = list;
557 }
558
559 struct __ecereNameSpace__ecere__sys__OldList * includeDirs, * sysIncludeDirs;
560
561 void SetIncludeDirs(struct __ecereNameSpace__ecere__sys__OldList * list)
562 {
563 includeDirs = list;
564 }
565
566 void SetSysIncludeDirs(struct __ecereNameSpace__ecere__sys__OldList * list)
567 {
568 sysIncludeDirs = list;
569 }
570
571 unsigned int ecereImported;
572
573 void SetEcereImported(unsigned int b)
574 {
575 ecereImported = b;
576 }
577
578 unsigned int GetEcereImported()
579 {
580 return ecereImported;
581 }
582
583 unsigned int inPreCompiler = 0x0;
584
585 void SetInPreCompiler(unsigned int b)
586 {
587 inPreCompiler = b;
588 }
589
590 struct __ecereNameSpace__ecere__sys__OldList * precompDefines;
591
592 void SetPrecompDefines(struct __ecereNameSpace__ecere__sys__OldList * list)
593 {
594 precompDefines = list;
595 }
596
597 unsigned int DummyMethod()
598 {
599 return 0x1;
600 }
601
602 extern char *  __ecereNameSpace__ecere__sys__TrimLSpaces(char *  string, char *  output);
603
604 extern int strcmp(const char * , const char * );
605
606 extern int strtol(char * , char * * , int base);
607
608 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eMember_AddDataMember(struct __ecereNameSpace__ecere__com__DataMember * member, char *  name, char *  type, unsigned int size, unsigned int alignment, int declMode);
609
610 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__BitMember;
611
612 struct __ecereNameSpace__ecere__com__BitMember
613 {
614 struct __ecereNameSpace__ecere__com__BitMember * prev;
615 struct __ecereNameSpace__ecere__com__BitMember * next;
616 char *  name;
617 unsigned int isProperty;
618 int memberAccess;
619 int id;
620 struct __ecereNameSpace__ecere__com__Class * _class;
621 char *  dataTypeString;
622 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
623 struct Type * dataType;
624 int type;
625 int size;
626 int pos;
627 uint64 mask;
628 };
629
630 extern struct __ecereNameSpace__ecere__com__BitMember * __ecereNameSpace__ecere__com__eClass_AddBitMember(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, int bitSize, int bitPos, int declMode);
631
632 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, unsigned int size, unsigned int alignment, int declMode);
633
634 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eMember_New(int type, int declMode);
635
636 extern unsigned int __ecereNameSpace__ecere__com__eMember_AddMember(struct __ecereNameSpace__ecere__com__DataMember * addTo, struct __ecereNameSpace__ecere__com__DataMember * dataMember);
637
638 extern unsigned int __ecereNameSpace__ecere__com__eClass_AddMember(struct __ecereNameSpace__ecere__com__Class * _class, struct __ecereNameSpace__ecere__com__DataMember * dataMember);
639
640 extern char *  strcpy(char * , const char * );
641
642 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(struct __ecereNameSpace__ecere__com__Instance * this, char *  s, int max);
643
644 static void ReadDataMembers(struct __ecereNameSpace__ecere__com__Class * regClass, struct __ecereNameSpace__ecere__com__DataMember * member, struct __ecereNameSpace__ecere__com__Instance * f)
645 {
646 char line[1024];
647 char name[1024];
648 int size = 0, bitPos = -1;
649 int memberAccess = 1;
650
651 for(; ; )
652 {
653 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
654 break;
655 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
656 if(!strcmp(line, "."))
657 break;
658 if(line[0] == '[')
659 {
660 if(!strcmp(line, "[Size]"))
661 {
662 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
663 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
664 size = strtol(line, (((void *)0)), 0);
665 }
666 else if(!strcmp(line, "[Pos]"))
667 {
668 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
669 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
670 bitPos = strtol(line, (((void *)0)), 0);
671 }
672 else if(!strcmp(line, "[Public]"))
673 memberAccess = 1;
674 else if(!strcmp(line, "[Private]"))
675 memberAccess = 2;
676 else if(!strcmp(line, "[Type]"))
677 {
678 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
679 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
680 if(member)
681 {
682 if(!__ecereNameSpace__ecere__com__eMember_AddDataMember(member, name, line[0] ? line : 0, 0, 0, memberAccess))
683 ;
684 }
685 else if(regClass && regClass->type == 2)
686 {
687 struct __ecereNameSpace__ecere__com__BitMember * member = __ecereNameSpace__ecere__com__eClass_AddBitMember(regClass, name, line[0] ? line : 0, 0, 0, memberAccess);
688
689 member->size = size;
690 member->pos = bitPos;
691 }
692 else if(regClass)
693 {
694 if(!__ecereNameSpace__ecere__com__eClass_AddDataMember(regClass, name, line[0] ? line : 0, 0, 0, memberAccess))
695 ;
696 }
697 }
698 else if(!strcmp(line, "[Struct]") || !strcmp(line, "[Union]"))
699 {
700 struct __ecereNameSpace__ecere__com__DataMember * dataMember = (regClass || member) ? __ecereNameSpace__ecere__com__eMember_New((!strcmp(line, "[Union]")) ? 1 : 2, memberAccess) : (((void *)0));
701
702 ReadDataMembers((((void *)0)), dataMember, f);
703 if(member)
704 {
705 if(!__ecereNameSpace__ecere__com__eMember_AddMember(member, dataMember))
706 ;
707 }
708 else if(regClass)
709 {
710 if(!__ecereNameSpace__ecere__com__eClass_AddMember(regClass, dataMember))
711 ;
712 }
713 }
714 }
715 else
716 {
717 size = 0;
718 bitPos = -1;
719 strcpy(name, line);
720 memberAccess = 1;
721 }
722 }
723 }
724
725 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__FileOpenBuffered(char *  fileName, int mode);
726
727 extern char *  __ecereNameSpace__ecere__sys__GetLastDirectory(char *  string, char *  output);
728
729 extern int strcasecmp(const char * , const char * );
730
731 extern struct Symbol * DeclClass(int symbolID, char *  name);
732
733 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, char *  name);
734
735 extern struct __ecereNameSpace__ecere__com__Instance * privateModule;
736
737 extern struct Symbol * FindClass(char *  name);
738
739 extern char *  sourceFile;
740
741 extern char *  strstr(char * , const char * );
742
743 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, char *  name, char *  baseName, int size, int sizeClass, unsigned int (* )(void * ), void (* )(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
744
745 extern char *  strcat(char * , const char * );
746
747 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldLink;
748
749 struct __ecereNameSpace__ecere__sys__OldLink
750 {
751 struct __ecereNameSpace__ecere__sys__OldLink * prev;
752 struct __ecereNameSpace__ecere__sys__OldLink * next;
753 void *  data;
754 };
755
756 extern void __ecereNameSpace__ecere__com__eClass_DestructionWatchable(struct __ecereNameSpace__ecere__com__Class * _class);
757
758 extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Instance * moduleToFind);
759
760 extern struct ModuleImport * mainModule;
761
762 extern char *  strchr(char * , int);
763
764 extern void *  memcpy(void * , const void * , unsigned int size);
765
766 extern char *  __ecereNameSpace__ecere__sys__TrimRSpaces(char *  string, char *  output);
767
768 extern void __ecereNameSpace__ecere__com__eEnum_AddFixedValue(struct __ecereNameSpace__ecere__com__Class * _class, char *  string, int value);
769
770 extern int atoi(const char * );
771
772 extern int __ecereNameSpace__ecere__com__eEnum_AddValue(struct __ecereNameSpace__ecere__com__Class * _class, char *  string);
773
774 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, void *  function, int declMode);
775
776 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  type, void *  function, int declMode);
777
778 extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_AddProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  dataType, void *  setStmt, void *  getStmt, int declMode);
779
780 extern void __ecereNameSpace__ecere__com__eProperty_Watchable(struct __ecereNameSpace__ecere__com__Property * _property);
781
782 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassProperty;
783
784 struct __ecereNameSpace__ecere__com__ClassProperty;
785
786 extern struct __ecereNameSpace__ecere__com__ClassProperty * __ecereNameSpace__ecere__com__eClass_AddClassProperty(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, char *  dataType, void *  setStmt, void *  getStmt);
787
788 extern char *  __ecereNameSpace__ecere__sys__CopyString(char *  string);
789
790 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_OpTable;
791
792 struct OpTable
793 {
794 unsigned int (*  Add)(struct Expression *, struct Operand *, struct Operand *);
795 unsigned int (*  Sub)(struct Expression *, struct Operand *, struct Operand *);
796 unsigned int (*  Mul)(struct Expression *, struct Operand *, struct Operand *);
797 unsigned int (*  Div)(struct Expression *, struct Operand *, struct Operand *);
798 unsigned int (*  Mod)(struct Expression *, struct Operand *, struct Operand *);
799 unsigned int (*  Neg)(struct Expression *, struct Operand *);
800 unsigned int (*  Inc)(struct Expression *, struct Operand *);
801 unsigned int (*  Dec)(struct Expression *, struct Operand *);
802 unsigned int (*  Asign)(struct Expression *, struct Operand *, struct Operand *);
803 unsigned int (*  AddAsign)(struct Expression *, struct Operand *, struct Operand *);
804 unsigned int (*  SubAsign)(struct Expression *, struct Operand *, struct Operand *);
805 unsigned int (*  MulAsign)(struct Expression *, struct Operand *, struct Operand *);
806 unsigned int (*  DivAsign)(struct Expression *, struct Operand *, struct Operand *);
807 unsigned int (*  ModAsign)(struct Expression *, struct Operand *, struct Operand *);
808 unsigned int (*  BitAnd)(struct Expression *, struct Operand *, struct Operand *);
809 unsigned int (*  BitOr)(struct Expression *, struct Operand *, struct Operand *);
810 unsigned int (*  BitXor)(struct Expression *, struct Operand *, struct Operand *);
811 unsigned int (*  LShift)(struct Expression *, struct Operand *, struct Operand *);
812 unsigned int (*  RShift)(struct Expression *, struct Operand *, struct Operand *);
813 unsigned int (*  BitNot)(struct Expression *, struct Operand *);
814 unsigned int (*  AndAsign)(struct Expression *, struct Operand *, struct Operand *);
815 unsigned int (*  OrAsign)(struct Expression *, struct Operand *, struct Operand *);
816 unsigned int (*  XorAsign)(struct Expression *, struct Operand *, struct Operand *);
817 unsigned int (*  LShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
818 unsigned int (*  RShiftAsign)(struct Expression *, struct Operand *, struct Operand *);
819 unsigned int (*  Not)(struct Expression *, struct Operand *);
820 unsigned int (*  Equ)(struct Expression *, struct Operand *, struct Operand *);
821 unsigned int (*  Nqu)(struct Expression *, struct Operand *, struct Operand *);
822 unsigned int (*  And)(struct Expression *, struct Operand *, struct Operand *);
823 unsigned int (*  Or)(struct Expression *, struct Operand *, struct Operand *);
824 unsigned int (*  Grt)(struct Expression *, struct Operand *, struct Operand *);
825 unsigned int (*  Sma)(struct Expression *, struct Operand *, struct Operand *);
826 unsigned int (*  GrtEqu)(struct Expression *, struct Operand *, struct Operand *);
827 unsigned int (*  SmaEqu)(struct Expression *, struct Operand *, struct Operand *);
828 unsigned int (*  Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *);
829 };
830
831 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand;
832
833 struct Operand
834 {
835 int kind;
836 struct Type * type;
837 unsigned int ptrSize;
838 union
839 {
840 char c;
841 unsigned char uc;
842 short s;
843 unsigned short us;
844 int i;
845 unsigned int ui;
846 float f;
847 double d;
848 unsigned char *  p;
849 long long i64;
850 uint64 ui64;
851 };
852 struct OpTable ops;
853 };
854
855 extern struct Location yylloc;
856
857 extern struct __ecereNameSpace__ecere__com__Instance * fileInput;
858
859 extern int declMode;
860
861 extern void resetScanner();
862
863 extern struct Expression * ParseExpressionString(char *  expression);
864
865 extern struct Type * ProcessTypeString(char *  string, unsigned int staticMethod);
866
867 extern void ProcessExpressionType(struct Expression * exp);
868
869 extern void ComputeExpression(struct Expression * exp);
870
871 extern struct Operand GetOperand(struct Expression * exp);
872
873 extern void FreeExpression(struct Expression * exp);
874
875 extern void resetScannerPos(struct CodePosition * pos);
876
877 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateParameter;
878
879 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
880
881 extern struct __ecereNameSpace__ecere__com__ClassTemplateParameter * __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(struct __ecereNameSpace__ecere__com__Class * _class, char *  name, int type, void *  info, struct __ecereNameSpace__ecere__com__ClassTemplateArgument * defaultArg);
882
883 extern void __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(struct __ecereNameSpace__ecere__com__Class * base);
884
885 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DefinedExpression;
886
887 struct __ecereNameSpace__ecere__com__DefinedExpression;
888
889 extern struct __ecereNameSpace__ecere__com__DefinedExpression * __ecereNameSpace__ecere__com__eSystem_RegisterDefine(char *  name, char *  value, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
890
891 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__GlobalFunction;
892
893 struct __ecereNameSpace__ecere__com__GlobalFunction;
894
895 extern struct __ecereNameSpace__ecere__com__GlobalFunction * __ecereNameSpace__ecere__com__eSystem_RegisterFunction(char *  name, char *  type, void *  func, struct __ecereNameSpace__ecere__com__Instance * module, int declMode);
896
897 extern char *  strncpy(char * , const char * , int n);
898
899 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace;
900
901 struct __ecereNameSpace__ecere__com__NameSpace
902 {
903 char *  name;
904 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
905 struct __ecereNameSpace__ecere__com__NameSpace *  left;
906 struct __ecereNameSpace__ecere__com__NameSpace *  right;
907 int depth;
908 struct __ecereNameSpace__ecere__com__NameSpace *  parent;
909 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
910 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
911 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
912 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
913 };
914
915 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData;
916
917 struct GlobalData
918 {
919 unsigned int key;
920 struct __ecereNameSpace__ecere__sys__BTNode * parent;
921 struct __ecereNameSpace__ecere__sys__BTNode * left;
922 struct __ecereNameSpace__ecere__sys__BTNode * right;
923 int depth;
924 struct __ecereNameSpace__ecere__com__Instance * module;
925 char *  dataTypeString;
926 struct Type * dataType;
927 void *  symbol;
928 char *  fullName;
929 };
930
931 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DataRedefinition;
932
933 struct DataRedefinition
934 {
935 struct DataRedefinition * prev;
936 struct DataRedefinition * next;
937 char name[1024];
938 char type1[1024];
939 char type2[1024];
940 };
941
942 void ImportModule(char *  name, int importType, int importAccess, unsigned int loadDllOnly);
943
944 extern void Compiler_Error(char *  format, ...);
945
946 extern char *  __ecereNameSpace__ecere__GetTranslatedString(struct __ecereNameSpace__ecere__com__Instance * module, char *  string, char *  stringAndContext);
947
948 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
949
950 extern void *  __ecereNameSpace__ecere__com__eInstance_New(struct __ecereNameSpace__ecere__com__Class * _class);
951
952 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof;
953
954 int __ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek;
955
956 struct __ecereNameSpace__ecere__sys__BTNode * __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  key);
957
958 int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString(struct __ecereNameSpace__ecere__sys__BinaryTree * this, char *  a, char *  b);
959
960 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
961
962 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
963
964 extern void __ecereNameSpace__ecere__com__eInstance_DecRef(struct __ecereNameSpace__ecere__com__Instance * instance);
965
966 unsigned int LoadSymbols(char * fileName, int importType, unsigned int loadDllOnly)
967 {
968 void * __ecereTemp1;
969 struct __ecereNameSpace__ecere__com__Instance * f = __ecereNameSpace__ecere__sys__FileOpenBuffered(fileName, 1);
970 unsigned int globalInstance = 0x0;
971
972 if(f)
973 {
974 unsigned int ecereCOMModule = 0x0;
975 char moduleName[797];
976
977 __ecereNameSpace__ecere__sys__GetLastDirectory(fileName, moduleName);
978 if(!((strcasecmp)(moduleName, "instance.sym") && (strcasecmp)(moduleName, "BinaryTree.sym") && (strcasecmp)(moduleName, "dataTypes.sym") && (strcasecmp)(moduleName, "OldList.sym") && (strcasecmp)(moduleName, "String.sym") && (strcasecmp)(moduleName, "BTNode.sym") && (strcasecmp)(moduleName, "Array.sym") && (strcasecmp)(moduleName, "AVLTree.sym") && (strcasecmp)(moduleName, "BuiltInContainer.sym") && (strcasecmp)(moduleName, "Container.sym") && (strcasecmp)(moduleName, "CustomAVLTree.sym") && (strcasecmp)(moduleName, "LinkList.sym") && (strcasecmp)(moduleName, "List.sym") && (strcasecmp)(moduleName, "Map.sym") && (strcasecmp)(moduleName, "Mutex.sym")))
979 ecereCOMModule = 0x1;
980 for(; ; )
981 {
982 char line[1024];
983
984 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
985 break;
986 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
987 if(line[0] == '[')
988 {
989 if(!strcmp(line, "[Global Instance]"))
990 globalInstance = 0x1;
991 else if(!strcmp(line, "[Defined Classes]"))
992 {
993 struct __ecereNameSpace__ecere__com__Class * regClass = (((void *)0));
994 char name[1024];
995 unsigned int isRemote = 0x0;
996 unsigned int isStatic = 0x0;
997 unsigned int isWatchable = 0x0;
998 int classType = 0;
999 unsigned int fixed = 0x0;
1000 unsigned int noExpansion = 0x0;
1001 int inheritanceAccess = 1;
1002
1003 for(; ; )
1004 {
1005 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1006 break;
1007 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1008 if(!strcmp(line, "."))
1009 break;
1010 if(line[0] == '[')
1011 {
1012 if(!strcmp(line, "[Remote]"))
1013 isRemote = 0x1;
1014 else if(!strcmp(line, "[Static]"))
1015 isStatic = 0x1;
1016 else if(!strcmp(line, "[Fixed]"))
1017 fixed = 0x1;
1018 else if(!strcmp(line, "[No Expansion]"))
1019 noExpansion = 0x1;
1020 else if(!strcmp(line, "[Watchable]"))
1021 isWatchable = 0x1;
1022 else if(!strcmp(line, "[Enum]"))
1023 classType = 4;
1024 else if(!strcmp(line, "[Bit]"))
1025 classType = 2;
1026 else if(!strcmp(line, "[Struct]"))
1027 classType = 1;
1028 else if(!strcmp(line, "[Unit]"))
1029 classType = 3;
1030 else if(!strcmp(line, "[NoHead]"))
1031 classType = 5;
1032 else if(!strcmp(line, "[Base]") || !strcmp(line, "[Private Base]"))
1033 {
1034 if(!strcmp(line, "[Private Base]"))
1035 inheritanceAccess = 2;
1036 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1037 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1038 if(importType == 3)
1039 DeclClass(0, name);
1040 if(isStatic || loadDllOnly || importType == 3 || importType == 4)
1041 regClass = (((void *)0));
1042 else if(regClass = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, name), !regClass || regClass->internalDecl || regClass->isRemote)
1043 {
1044 struct Symbol * existingClass = FindClass(name);
1045 char * baseName = (classType == 0 && importType == 2 && isRemote) ? "DCOMClientObject" : (!strcmp(line, "[None]") ? (((void *)0)) : line);
1046
1047 if(!isRemote || (importType != 2) || (!sourceFile || !strstr(sourceFile, ".main.ec")))
1048 {
1049 if(!regClass || regClass->internalDecl)
1050 regClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(classType, name, isRemote ? (((void *)0)) : baseName, 0, 0, (((void *)0)), (((void *)0)), privateModule, ecereCOMModule ? 4 : 1, inheritanceAccess);
1051 if(regClass && isRemote)
1052 regClass->isRemote = (importType == 2) ? (unsigned int)1 : (unsigned int)2;
1053 if(isRemote)
1054 {
1055 if(importType == 2)
1056 {
1057 char className[1024] = "DCOMClient_";
1058
1059 strcat(className, name);
1060 if(!existingClass)
1061 existingClass = DeclClass(0, name);
1062 regClass = __ecereNameSpace__ecere__com__eSystem_RegisterClass(classType, className, baseName, 0, 0, (((void *)0)), (((void *)0)), privateModule, ecereCOMModule ? 4 : 1, inheritanceAccess);
1063 }
1064 if(regClass)
1065 regClass->isRemote = (importType == 2) ? (unsigned int)1 : (unsigned int)3;
1066 }
1067 if(existingClass)
1068 {
1069 struct __ecereNameSpace__ecere__sys__OldLink * link;
1070
1071 for(link = existingClass->templatedClasses.first; link; link = link->next)
1072 {
1073 struct Symbol * symbol = link->data;
1074
1075 symbol->registered = __ecereNameSpace__ecere__com__eSystem_FindClass(privateModule, symbol->string);
1076 }
1077 }
1078 if(fixed)
1079 regClass->fixed = 0x1;
1080 if(noExpansion)
1081 regClass->noExpansion = 0x1;
1082 if(isWatchable)
1083 {
1084 __ecereNameSpace__ecere__com__eClass_DestructionWatchable(regClass);
1085 regClass->structSize = regClass->offset;
1086 }
1087 if(regClass && existingClass)
1088 {
1089 existingClass->registered = regClass;
1090 regClass->symbol = existingClass;
1091 existingClass->id = (((int)0x7fffffff));
1092 existingClass->idCode = (((int)0x7fffffff));
1093 existingClass->imported = 0x1;
1094 if(regClass->module)
1095 existingClass->module = FindModule(regClass->module);
1096 else
1097 existingClass->module = mainModule;
1098 }
1099 }
1100 else
1101 regClass = (((void *)0));
1102 }
1103 else
1104 regClass = (((void *)0));
1105 isRemote = 0x0;
1106 isWatchable = 0x0;
1107 fixed = 0x0;
1108 isStatic = 0x0;
1109 }
1110 else if(!strcmp(line, "[Enum Values]"))
1111 {
1112 for(; ; )
1113 {
1114 char * equal;
1115
1116 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1117 break;
1118 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1119 if(!strcmp(line, "."))
1120 break;
1121 if(regClass)
1122 {
1123 equal = strchr(line, '=');
1124 if(equal)
1125 {
1126 char name[1024];
1127
1128 memcpy(name, line, (int)(equal - line));
1129 name[equal - line] = '\0';
1130 __ecereNameSpace__ecere__sys__TrimLSpaces(name, name);
1131 __ecereNameSpace__ecere__sys__TrimRSpaces(name, name);
1132 __ecereNameSpace__ecere__com__eEnum_AddFixedValue(regClass, name, atoi(equal + 1));
1133 }
1134 else
1135 {
1136 __ecereNameSpace__ecere__com__eEnum_AddValue(regClass, line);
1137 }
1138 }
1139 }
1140 }
1141 else if(!strcmp(line, "[Defined Methods]"))
1142 {
1143 char name[1024];
1144 unsigned int isVirtual = 0x0;
1145 int memberAccess = 1;
1146
1147 for(; ; )
1148 {
1149 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1150 break;
1151 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1152 if(!strcmp(line, "."))
1153 break;
1154 if(line[0] == '[')
1155 {
1156 if(!strcmp(line, "[Type]"))
1157 {
1158 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1159 if(regClass)
1160 {
1161 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1162 if(isVirtual)
1163 __ecereNameSpace__ecere__com__eClass_AddVirtualMethod(regClass, name, line[0] ? line : 0, DummyMethod, memberAccess);
1164 else
1165 __ecereNameSpace__ecere__com__eClass_AddMethod(regClass, name, line[0] ? line : 0, DummyMethod, memberAccess);
1166 }
1167 }
1168 else if(!strcmp(line, "[Virtual]"))
1169 isVirtual = 0x1;
1170 else if(!strcmp(line, "[Public]"))
1171 memberAccess = 1;
1172 else if(!strcmp(line, "[Private]"))
1173 memberAccess = 2;
1174 }
1175 else
1176 {
1177 strcpy(name, line);
1178 isVirtual = 0x0;
1179 memberAccess = 1;
1180 }
1181 }
1182 }
1183 else if(!strcmp(line, "[Defined Properties]"))
1184 {
1185 char name[1024];
1186 unsigned int setStmt = 0x0, getStmt = 0x0, isVirtual = 0x0, conversion = 0x0;
1187 unsigned int isWatchable = 0x0;
1188 int memberAccess = 1;
1189
1190 for(; ; )
1191 {
1192 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1193 break;
1194 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1195 if(!strcmp(line, "."))
1196 break;
1197 if(line[0] == '[')
1198 {
1199 if(!strcmp(line, "[Type]"))
1200 {
1201 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1202 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1203 if(regClass)
1204 {
1205 struct __ecereNameSpace__ecere__com__Property * prop = __ecereNameSpace__ecere__com__eClass_AddProperty(regClass, conversion ? (((void *)0)) : name, line[0] ? line : 0, (void *)(unsigned int)setStmt, (void *)(unsigned int)getStmt, memberAccess);
1206
1207 if(prop)
1208 {
1209 prop->compiled = 0x0;
1210 if(isWatchable)
1211 {
1212 __ecereNameSpace__ecere__com__eProperty_Watchable(prop);
1213 regClass->structSize = regClass->offset;
1214 }
1215 }
1216 }
1217 }
1218 else if(!strcmp(line, "[Set]"))
1219 setStmt = 0x1;
1220 else if(!strcmp(line, "[Get]"))
1221 getStmt = 0x1;
1222 else if(!strcmp(line, "[Watchable]"))
1223 isWatchable = 0x1;
1224 else if(!strcmp(line, "[Public]"))
1225 memberAccess = 1;
1226 else if(!strcmp(line, "[Private]"))
1227 memberAccess = 2;
1228 else if(!strcmp(line, "[Conversion]"))
1229 {
1230 conversion = 0x1;
1231 setStmt = getStmt = isVirtual = isWatchable = 0x0;
1232 }
1233 }
1234 else
1235 {
1236 strcpy(name, line);
1237 setStmt = getStmt = isVirtual = conversion = isWatchable = 0x0;
1238 memberAccess = 1;
1239 }
1240 }
1241 }
1242 else if(!strcmp(line, "[Defined Class Properties]"))
1243 {
1244 char name[1024];
1245 unsigned int setStmt = 0x0, getStmt = 0x0;
1246
1247 for(; ; )
1248 {
1249 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1250 break;
1251 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1252 if(!strcmp(line, "."))
1253 break;
1254 if(line[0] == '[')
1255 {
1256 if(!strcmp(line, "[Type]"))
1257 {
1258 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1259 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1260 if(regClass)
1261 {
1262 __ecereNameSpace__ecere__com__eClass_AddClassProperty(regClass, name, line, (void *)(unsigned int)setStmt, (void *)(unsigned int)getStmt);
1263 }
1264 }
1265 else if(!strcmp(line, "[Set]"))
1266 setStmt = 0x1;
1267 else if(!strcmp(line, "[Get]"))
1268 getStmt = 0x1;
1269 }
1270 else
1271 {
1272 strcpy(name, line);
1273 setStmt = getStmt = 0x0;
1274 }
1275 }
1276 }
1277 else if(!strcmp(line, "[Defined Data Members]"))
1278 {
1279 ReadDataMembers(regClass, (((void *)0)), f);
1280 }
1281 else if(!strcmp(line, "[Template Parameters]"))
1282 {
1283 while(!((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *))f->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Eof])(f))
1284 {
1285 char name[1024];
1286 int type = 0;
1287 struct __ecereNameSpace__ecere__com__ClassTemplateArgument defaultArg = 
1288 {
1289 0, 0, 0, 0, 0
1290 };
1291 void * info = (((void *)0));
1292
1293 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1294 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1295 if(line[0] == '.')
1296 break;
1297 strcpy(name, line);
1298 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1299 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1300 if(!strcmp(line, "[Expression]"))
1301 type = 2;
1302 else if(!strcmp(line, "[Identifier]"))
1303 type = 1;
1304 switch(type)
1305 {
1306 case 0:
1307 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1308 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1309 if(regClass && strcmp(line, "[None]"))
1310 {
1311 info = __ecereNameSpace__ecere__sys__CopyString(line);
1312 }
1313 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1314 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1315 if(regClass && strcmp(line, "[None]"))
1316 {
1317 defaultArg.dataTypeString = __ecereNameSpace__ecere__sys__CopyString(line);
1318 }
1319 break;
1320 case 2:
1321 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1322 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1323 if(regClass && strcmp(line, "[None]"))
1324 {
1325 info = __ecereNameSpace__ecere__sys__CopyString(line);
1326 }
1327 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1328 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1329 if(regClass && strcmp(line, "[None]"))
1330 {
1331 struct Operand op;
1332 struct Expression * exp;
1333 struct Location oldLocation = yylloc;
1334 struct __ecereNameSpace__ecere__com__Instance * backFileInput = fileInput;
1335
1336 declMode = (int)0;
1337 resetScanner();
1338 exp = ParseExpressionString(line);
1339 if(info)
1340 exp->destType = ProcessTypeString(info, 0x0);
1341 ProcessExpressionType(exp);
1342 ComputeExpression(exp);
1343 op = GetOperand(exp);
1344 defaultArg.expression.ui64 = op.ui64;
1345 FreeExpression(exp);
1346 resetScanner();
1347 yylloc = oldLocation;
1348 fileInput = backFileInput;
1349 if(fileInput)
1350 {
1351 ((unsigned int (*)(struct __ecereNameSpace__ecere__com__Instance *, int pos, int mode))fileInput->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__sys__File_Seek])(fileInput, yylloc.start.pos, 0);
1352 resetScannerPos(&yylloc.start);
1353 yychar = -2;
1354 }
1355 }
1356 break;
1357 case 1:
1358 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1359 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1360 if(!strcmp(line, "[Data member]"))
1361 info = (void *)0;
1362 else if(!strcmp(line, "[Method]"))
1363 info = (void *)1;
1364 else if(!strcmp(line, "[Property]"))
1365 info = (void *)2;
1366 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1367 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1368 if(regClass && strcmp(line, "[None]"))
1369 {
1370 defaultArg.memberString = __ecereNameSpace__ecere__sys__CopyString(line);
1371 }
1372 break;
1373 }
1374 if(regClass)
1375 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(regClass, name, type, info, &defaultArg);
1376 if(type == 0 || type == 2)
1377 (__ecereNameSpace__ecere__com__eSystem_Delete(info), info = 0);
1378 if(type == 0 || type == 1)
1379 (__ecereNameSpace__ecere__com__eSystem_Delete(defaultArg.dataTypeString), defaultArg.dataTypeString = 0);
1380 }
1381 if(regClass)
1382 __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(regClass);
1383 }
1384 }
1385 else
1386 {
1387 inheritanceAccess = 1;
1388 classType = 0;
1389 isRemote = 0x0;
1390 strcpy(name, line);
1391 regClass = (((void *)0));
1392 }
1393 }
1394 }
1395 else if(!strcmp(line, "[Defined Expressions]"))
1396 {
1397 char name[1024];
1398
1399 for(; ; )
1400 {
1401 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1402 break;
1403 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1404 if(!strcmp(line, "."))
1405 break;
1406 if(!strcmp(line, "[Value]"))
1407 {
1408 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1409 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1410 if(!loadDllOnly && importType != 3 && importType != 4)
1411 __ecereNameSpace__ecere__com__eSystem_RegisterDefine(name, line, privateModule, ecereCOMModule ? 4 : 1);
1412 }
1413 else if(line[0] != '[')
1414 {
1415 strcpy(name, line);
1416 }
1417 }
1418 }
1419 else if(!strcmp(line, "[Defined Functions]"))
1420 {
1421 char name[1024];
1422
1423 for(; ; )
1424 {
1425 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1426 break;
1427 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1428 if(!strcmp(line, "."))
1429 break;
1430 if(!strcmp(line, "[Type]"))
1431 {
1432 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1433 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1434 if(!loadDllOnly && importType != 3 && importType != 4)
1435 __ecereNameSpace__ecere__com__eSystem_RegisterFunction(name, line, (((void *)0)), privateModule, ecereCOMModule ? 4 : 1);
1436 }
1437 else if(line[0] != '[')
1438 {
1439 strcpy(name, line);
1440 }
1441 }
1442 }
1443 else if(!strcmp(line, "[Defined Data]"))
1444 {
1445 char name[1024];
1446
1447 for(; ; )
1448 {
1449 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1450 break;
1451 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1452 if(!strcmp(line, "."))
1453 break;
1454 if(!strcmp(line, "[Type]"))
1455 {
1456 __ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line);
1457 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1458 if(!loadDllOnly && importType != 3 && importType != 4)
1459 {
1460 int start = 0, c;
1461 struct __ecereNameSpace__ecere__com__NameSpace * nameSpace = globalData;
1462 struct GlobalData * data;
1463
1464 for(c = 0; name[c]; c++)
1465 {
1466 if(name[c] == '.' || (name[c] == ':' && name[c + 1] == ':'))
1467 {
1468 struct __ecereNameSpace__ecere__com__NameSpace * newSpace;
1469 char * spaceName = __ecereNameSpace__ecere__com__eSystem_New(sizeof(char) * (c - start + 1));
1470
1471 strncpy(spaceName, name + start, c - start);
1472 spaceName[c - start] = '\0';
1473 newSpace = (struct __ecereNameSpace__ecere__com__NameSpace *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).nameSpaces, spaceName);
1474 if(!newSpace)
1475 {
1476 newSpace = __ecereNameSpace__ecere__com__eSystem_New0(sizeof(struct __ecereNameSpace__ecere__com__NameSpace) * (1));
1477 (*newSpace).classes.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString;
1478 (*newSpace).defines.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString;
1479 (*newSpace).functions.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString;
1480 (*newSpace).nameSpaces.CompareKey = (void *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_CompareString;
1481 (*newSpace).name = spaceName;
1482 (*newSpace).parent = nameSpace;
1483 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&(*nameSpace).nameSpaces, (struct __ecereNameSpace__ecere__sys__BTNode *)newSpace);
1484 }
1485 else
1486 (__ecereNameSpace__ecere__com__eSystem_Delete(spaceName), spaceName = 0);
1487 nameSpace = newSpace;
1488 if(name[c] == ':')
1489 c++;
1490 start = c + 1;
1491 }
1492 }
1493 if(c - start)
1494 {
1495 data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_FindString(&(*nameSpace).functions, name + start);
1496 if(!data)
1497 {
1498 data = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_GlobalData), ((struct GlobalData *)__ecereTemp1)->fullName = __ecereNameSpace__ecere__sys__CopyString(name), ((struct GlobalData *)__ecereTemp1)->dataTypeString = __ecereNameSpace__ecere__sys__CopyString(line), ((struct GlobalData *)__ecereTemp1)->module = privateModule, ((struct GlobalData *)__ecereTemp1));
1499 data->key = (unsigned int)(data->fullName + start);
1500 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&(*nameSpace).functions, (struct __ecereNameSpace__ecere__sys__BTNode *)data);
1501 }
1502 else if(strcmp(data->dataTypeString, line))
1503 {
1504 struct DataRedefinition * redefinition = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_DataRedefinition);
1505
1506 strcpy(redefinition->name, name);
1507 strcpy(redefinition->type1, data->dataTypeString);
1508 strcpy(redefinition->type2, line);
1509 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add(&dataRedefinitions, redefinition);
1510 }
1511 }
1512 }
1513 }
1514 else if(line[0] != '[')
1515 {
1516 strcpy(name, line);
1517 }
1518 }
1519 }
1520 else if(!strcmp(line, "[Imported Modules]"))
1521 {
1522 int moduleImportType = 0;
1523 int importAccess = 1;
1524
1525 for(; ; )
1526 {
1527 if(!__ecereMethod___ecereNameSpace__ecere__sys__File_GetLine(f, line, sizeof line))
1528 break;
1529 __ecereNameSpace__ecere__sys__TrimLSpaces(line, line);
1530 if(!strcmp(line, "."))
1531 break;
1532 if(!strcmp(line, "[Static]"))
1533 moduleImportType = 1;
1534 else if(!strcmp(line, "[Remote]"))
1535 moduleImportType = 2;
1536 else if(!strcmp(line, "[Private]"))
1537 importAccess = 2;
1538 else if(line[0] != '[')
1539 {
1540 if(importType != 3 && importType != 4)
1541 ImportModule(line, moduleImportType, importAccess, loadDllOnly);
1542 else
1543 ImportModule(line, 4, importAccess, loadDllOnly);
1544 if(!strcmp(line, "ecere"))
1545 ecereImported = 0x1;
1546 moduleImportType = 0;
1547 importAccess = 1;
1548 }
1549 }
1550 }
1551 }
1552 }
1553 (__ecereNameSpace__ecere__com__eInstance_DecRef(f), f = 0);
1554 }
1555 else if(importType != 4)
1556 {
1557 Compiler_Error(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Couldn't open %s\n", (((void *)0))), fileName);
1558 }
1559 return globalInstance;
1560 }
1561
1562 struct __ecereNameSpace__ecere__com__Instance * loadedModules;
1563
1564 extern unsigned int __ecereNameSpace__ecere__sys__StripExtension(char *  string);
1565
1566 extern struct __ecereNameSpace__ecere__sys__OldList *  defines;
1567
1568 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_ImportedModule;
1569
1570 struct ImportedModule
1571 {
1572 struct ImportedModule * prev;
1573 struct ImportedModule * next;
1574 char *  name;
1575 int type;
1576 int importType;
1577 unsigned int globalInstance;
1578 unsigned int dllOnly;
1579 int importAccess;
1580 };
1581
1582 extern int strlen(const char * );
1583
1584 extern char *  __ecereNameSpace__ecere__sys__GetExtension(char *  string, char *  output);
1585
1586 extern char *  symbolsDir;
1587
1588 extern char *  __ecereNameSpace__ecere__sys__PathCat(char *  string, char *  addedPath);
1589
1590 extern char *  __ecereNameSpace__ecere__sys__ChangeExtension(char *  string, char *  ext, char *  output);
1591
1592 extern unsigned int __ecereNameSpace__ecere__sys__FileExists(char *  fileName);
1593
1594 extern unsigned int inCompiler;
1595
1596 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__IteratorPointer;
1597
1598 struct __ecereNameSpace__ecere__com__IteratorPointer;
1599
1600 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__MapIterator;
1601
1602 struct __ecereNameSpace__ecere__com__MapIterator
1603 {
1604 struct __ecereNameSpace__ecere__com__Instance * container;
1605 struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
1606 };
1607
1608 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__com__eModule_LoadStrict(struct __ecereNameSpace__ecere__com__Instance * fromModule, char *  name, int importAccess);
1609
1610 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
1611
1612 struct __ecereNameSpace__ecere__com__Module
1613 {
1614 struct __ecereNameSpace__ecere__com__Instance * application;
1615 struct __ecereNameSpace__ecere__sys__OldList classes;
1616 struct __ecereNameSpace__ecere__sys__OldList defines;
1617 struct __ecereNameSpace__ecere__sys__OldList functions;
1618 struct __ecereNameSpace__ecere__sys__OldList modules;
1619 struct __ecereNameSpace__ecere__com__Instance * prev;
1620 struct __ecereNameSpace__ecere__com__Instance * next;
1621 char *  name;
1622 void *  library;
1623 void *  Unload;
1624 int importType;
1625 int origImportType;
1626 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
1627 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
1628 };
1629
1630 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Iterator;
1631
1632 struct __ecereNameSpace__ecere__com__Iterator
1633 {
1634 struct __ecereNameSpace__ecere__com__Instance * container;
1635 struct __ecereNameSpace__ecere__com__IteratorPointer * pointer;
1636 };
1637
1638 extern int sprintf(char * , char * , ...);
1639
1640 extern int __ecereNameSpace__ecere__com__GetRuntimePlatform(void);
1641
1642 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__List_TPL_ecere__com__Module_;
1643
1644 unsigned int __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName(struct __ecereNameSpace__ecere__sys__OldList * this, void *  item);
1645
1646 struct __ecereNameSpace__ecere__com__Instance * __ecereProp___ecereNameSpace__ecere__com__MapIterator_Get_map(struct __ecereNameSpace__ecere__com__MapIterator * this);
1647
1648 void __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(struct __ecereNameSpace__ecere__com__MapIterator * this, struct __ecereNameSpace__ecere__com__Instance * value);
1649
1650 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__MapIterator_map;
1651
1652 unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 index, unsigned int create);
1653
1654 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Add;
1655
1656 uint64 __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(struct __ecereNameSpace__ecere__com__Iterator * this);
1657
1658 void __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(struct __ecereNameSpace__ecere__com__Iterator * this, uint64 value);
1659
1660 extern struct __ecereNameSpace__ecere__com__Property ** __ecereProp___ecereNameSpace__ecere__com__Iterator_data;
1661
1662 unsigned int __ecereMethod___ecereNameSpace__ecere__com__Iterator_Next();
1663
1664 void ImportModule(char * name, int importType, int importAccess, unsigned int loadDllOnly)
1665 {
1666 void * __ecereTemp1;
1667 struct ImportedModule * module = (((void *)0));
1668 char moduleName[274];
1669
1670 strncpy(moduleName, name, (274) - 1);
1671 moduleName[(274) - 1] = (char)0;
1672 __ecereNameSpace__ecere__sys__StripExtension(moduleName);
1673 for(module = (*defines).first; module; module = module->next)
1674 {
1675 if(module->type == 0 && !(strcasecmp)(module->name, moduleName))
1676 break;
1677 }
1678 if((!module || (module->dllOnly && !loadDllOnly)) && strlen(name) < (274))
1679 {
1680 char ext[17];
1681 struct __ecereNameSpace__ecere__com__Instance * loadedModule = (((void *)0));
1682 char symFile[797];
1683
1684 symFile[0] = '\0';
1685 __ecereNameSpace__ecere__sys__GetExtension(name, ext);
1686 strcpy(symFile, symbolsDir ? symbolsDir : "");
1687 __ecereNameSpace__ecere__sys__PathCat(symFile, name);
1688 __ecereNameSpace__ecere__sys__ChangeExtension(symFile, "sym", symFile);
1689 if(!strcmp(ext, "dll") || !strcmp(ext, "dll") || !ext[0])
1690 {
1691 if(importType != 4)
1692 {
1693 if(!module)
1694 {
1695 if(precompDefines)
1696 {
1697 module = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ImportedModule), ((struct ImportedModule *)__ecereTemp1)->name = __ecereNameSpace__ecere__sys__CopyString(moduleName), ((struct ImportedModule *)__ecereTemp1)->type = 0, ((struct ImportedModule *)__ecereTemp1)->importType = importType, ((struct ImportedModule *)__ecereTemp1)->importAccess = importAccess, ((struct ImportedModule *)__ecereTemp1));
1698 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*precompDefines), module);
1699 }
1700 module = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ImportedModule), ((struct ImportedModule *)__ecereTemp1)->name = __ecereNameSpace__ecere__sys__CopyString(moduleName), ((struct ImportedModule *)__ecereTemp1)->type = 0, ((struct ImportedModule *)__ecereTemp1)->importType = importType, ((struct ImportedModule *)__ecereTemp1)->importAccess = importAccess, ((struct ImportedModule *)__ecereTemp1));
1701 __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName((&*defines), module);
1702 }
1703 module->dllOnly = loadDllOnly;
1704 if(ext[0] || !__ecereNameSpace__ecere__sys__FileExists(symFile))
1705 {
1706 unsigned int skipLoad = 0x0;
1707 struct __ecereNameSpace__ecere__com__Instance * list = (((void *)0));
1708 char file[274];
1709
1710 strcpy(file, name);
1711 __ecereNameSpace__ecere__sys__StripExtension(file);
1712 if(!inCompiler)
1713 {
1714 struct __ecereNameSpace__ecere__com__MapIterator it = (it.container = (void *)0, it.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&it, loadedModules), it);
1715
1716 if(!__ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&it, (uint64)(file), 0x0))
1717 {
1718 struct __ecereNameSpace__ecere__com__Instance * firstModule = __ecereNameSpace__ecere__com__eModule_LoadStrict(__thisModule, file, importAccess);
1719
1720 if(firstModule)
1721 {
1722 list = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__List_TPL_ecere__com__Module_);
1723 ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))list->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(list, (uint64)(firstModule));
1724 __extension__ ({
1725 struct __ecereNameSpace__ecere__com__Iterator __internalIterator = 
1726 {
1727 loadedModules, 0
1728 };
1729
1730 __ecereMethod___ecereNameSpace__ecere__com__Iterator_Index(&__internalIterator, (uint64)(((uint64)(file))), 0x1);
1731 __ecereProp___ecereNameSpace__ecere__com__Iterator_Set_data(&__internalIterator, list);
1732 });
1733 }
1734 else
1735 skipLoad = 0x1;
1736 }
1737 else
1738 list = ((struct __ecereNameSpace__ecere__com__Instance *)__ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&it));
1739 }
1740 if(!skipLoad)
1741 {
1742 loadedModule = __ecereNameSpace__ecere__com__eModule_LoadStrict(privateModule, file, importAccess);
1743 if(loadedModule)
1744 {
1745 ((struct __ecereNameSpace__ecere__com__Module *)(((char *)loadedModule + 12)))->importType = importType;
1746 module->dllOnly = 0x0;
1747 if(list)
1748 ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))list->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(list, (uint64)(loadedModule));
1749 }
1750 }
1751 }
1752 }
1753 }
1754 if(!loadedModule && (!strcmp(ext, "ec") || !strcmp(ext, "sym") || !ext[0]))
1755 {
1756 {
1757 if(!module)
1758 {
1759 if(precompDefines)
1760 {
1761 module = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ImportedModule), ((struct ImportedModule *)__ecereTemp1)->name = __ecereNameSpace__ecere__sys__CopyString(moduleName), ((struct ImportedModule *)__ecereTemp1)->type = 0, ((struct ImportedModule *)__ecereTemp1)->importType = importType, ((struct ImportedModule *)__ecereTemp1)->importAccess = importAccess, ((struct ImportedModule *)__ecereTemp1));
1762 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Add((&*precompDefines), module);
1763 }
1764 module = (__ecereTemp1 = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass_ImportedModule), ((struct ImportedModule *)__ecereTemp1)->name = __ecereNameSpace__ecere__sys__CopyString(moduleName), ((struct ImportedModule *)__ecereTemp1)->type = 0, ((struct ImportedModule *)__ecereTemp1)->importType = importType, ((struct ImportedModule *)__ecereTemp1)->importAccess = importAccess, ((struct ImportedModule *)__ecereTemp1));
1765 __ecereMethod___ecereNameSpace__ecere__sys__OldList_AddName((&*defines), module);
1766 }
1767 module->dllOnly = loadDllOnly;
1768 if(inPreCompiler)
1769 return ;
1770 if(inIDE && !__ecereNameSpace__ecere__sys__FileExists(symFile) && sourceDirs)
1771 {
1772 {
1773 struct __ecereNameSpace__ecere__com__Iterator dir = 
1774 {
1775 (sourceDirs), 0
1776 };
1777
1778 while(__ecereMethod___ecereNameSpace__ecere__com__Iterator_Next(&dir))
1779 {
1780 char configDir[274];
1781
1782 strcpy(symFile, __ecereProp___ecereNameSpace__ecere__com__Iterator_Get_data(&dir));
1783 __ecereNameSpace__ecere__sys__PathCat(symFile, "obj");
1784 sprintf(configDir, "debug.%s", (__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? "win32" : "linux");
1785 __ecereNameSpace__ecere__sys__PathCat(symFile, configDir);
1786 __ecereNameSpace__ecere__sys__PathCat(symFile, name);
1787 __ecereNameSpace__ecere__sys__ChangeExtension(symFile, "sym", symFile);
1788 if(__ecereNameSpace__ecere__sys__FileExists(symFile))
1789 break;
1790 }
1791 }
1792 }
1793 if(!__ecereNameSpace__ecere__sys__FileExists(symFile))
1794 {
1795 char fileName[274];
1796
1797 __ecereNameSpace__ecere__sys__GetLastDirectory(symFile, fileName);
1798 strcpy(symFile, symbolsDir ? symbolsDir : "");
1799 __ecereNameSpace__ecere__sys__PathCat(symFile, fileName);
1800 }
1801 module->globalInstance = LoadSymbols(symFile, importType, loadDllOnly);
1802 }
1803 }
1804 }
1805 }
1806
1807 int FindIncludeFileID(char * includeFile)
1808 {
1809 int c;
1810
1811 for(c = 0; c < numIncludes; c++)
1812 if(!((__ecereNameSpace__ecere__com__GetRuntimePlatform() == 1) ? (strcasecmp) : strcmp)(includes[c], includeFile))
1813 return c + 1;
1814 return 0;
1815 }
1816
1817 int GetIncludeFileID(char * includeFile)
1818 {
1819 int found = FindIncludeFileID(includeFile);
1820
1821 if(found)
1822 return found;
1823 includes = __ecereNameSpace__ecere__com__eSystem_Renew(includes, sizeof(char *) * (numIncludes + 1));
1824 includes[numIncludes++] = __ecereNameSpace__ecere__sys__CopyString(includeFile);
1825 return numIncludes;
1826 }
1827
1828 char * GetIncludeFileFromID(int id)
1829 {
1830 return includes[id - 1];
1831 }
1832
1833 extern char *  __ecereNameSpace__ecere__sys__StripLastDirectory(char *  string, char *  output);
1834
1835 extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__sys__FileOpen(char *  fileName, int mode);
1836
1837 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__NamedItem;
1838
1839 struct __ecereNameSpace__ecere__sys__NamedItem
1840 {
1841 struct __ecereNameSpace__ecere__sys__NamedItem * prev;
1842 struct __ecereNameSpace__ecere__sys__NamedItem * next;
1843 char *  name;
1844 };
1845
1846 struct __ecereNameSpace__ecere__com__Instance * OpenIncludeFile(char * includeFile)
1847 {
1848 struct __ecereNameSpace__ecere__com__Instance * file;
1849 char location[274];
1850
1851 __ecereNameSpace__ecere__sys__StripLastDirectory(sourceFileStack[(include_stack_ptr >= 0) ? include_stack_ptr : 0], location);
1852 __ecereNameSpace__ecere__sys__PathCat(location, includeFile);
1853 file = __ecereNameSpace__ecere__sys__FileOpen(location, 1);
1854 if(file)
1855 {
1856 strcpy(sourceFileStack[include_stack_ptr + 1], location);
1857 }
1858 else if(inIDE)
1859 {
1860 struct __ecereNameSpace__ecere__sys__NamedItem * includeDir;
1861
1862 if(includeDirs)
1863 {
1864 for(includeDir = (*includeDirs).first; includeDir; includeDir = includeDir->next)
1865 {
1866 strcpy(location, includeDir->name);
1867 __ecereNameSpace__ecere__sys__PathCat(location, includeFile);
1868 file = __ecereNameSpace__ecere__sys__FileOpen(location, 1);
1869 if(file)
1870 break;
1871 }
1872 }
1873 if(sysIncludeDirs)
1874 {
1875 for(includeDir = (*sysIncludeDirs).first; includeDir; includeDir = includeDir->next)
1876 {
1877 strcpy(location, includeDir->name);
1878 __ecereNameSpace__ecere__sys__PathCat(location, includeFile);
1879 file = __ecereNameSpace__ecere__sys__FileOpen(location, 1);
1880 if(file)
1881 break;
1882 }
1883 }
1884 }
1885 return file;
1886 }
1887
1888 void FreeIncludeFiles()
1889 {
1890 int c;
1891
1892 for(c = 0; c < numIncludes; c++)
1893 (__ecereNameSpace__ecere__com__eSystem_Delete(includes[c]), includes[c] = 0);
1894 (__ecereNameSpace__ecere__com__eSystem_Delete(includes), includes = 0);
1895 numIncludes = 0;
1896 }
1897
1898 extern void FreeSymbol(struct Symbol * symbol);
1899
1900 extern void FreeType(struct Type * type);
1901
1902 void __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(struct __ecereNameSpace__ecere__sys__BinaryTree * this, struct __ecereNameSpace__ecere__sys__BTNode * node);
1903
1904 void FreeGlobalData(struct __ecereNameSpace__ecere__com__NameSpace * globalDataList)
1905 {
1906 struct __ecereNameSpace__ecere__com__NameSpace * ns;
1907 struct GlobalData * data;
1908
1909 for(; (ns = (struct __ecereNameSpace__ecere__com__NameSpace *)globalDataList->nameSpaces.root); )
1910 {
1911 FreeGlobalData(ns);
1912 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalDataList->nameSpaces, (struct __ecereNameSpace__ecere__sys__BTNode *)ns);
1913 (__ecereNameSpace__ecere__com__eSystem_Delete((*ns).name), (*ns).name = 0);
1914 (__ecereNameSpace__ecere__com__eSystem_Delete(ns), ns = 0);
1915 }
1916 for(; (data = (struct GlobalData *)globalDataList->functions.root); )
1917 {
1918 __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Remove(&globalDataList->functions, data);
1919 if(data->symbol)
1920 FreeSymbol(data->symbol);
1921 FreeType(data->dataType);
1922 (__ecereNameSpace__ecere__com__eSystem_Delete(data->fullName), data->fullName = 0);
1923 (__ecereNameSpace__ecere__com__eSystem_Delete(data->dataTypeString), data->dataTypeString = 0);
1924 ((data ? (__ecereClass_GlobalData->Destructor ? __ecereClass_GlobalData->Destructor(data) : 0, __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor ? __ecereClass___ecereNameSpace__ecere__sys__BTNode->Destructor(data) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(data)) : 0), data = 0);
1925 }
1926 }
1927
1928 extern void PrintType(struct Type * type, char *  string, unsigned int printName, unsigned int fullName);
1929
1930 extern void Compiler_Warning(char *  format, ...);
1931
1932 void __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(struct __ecereNameSpace__ecere__sys__OldList * this, void (*  freeFn)(void * ));
1933
1934 void CheckDataRedefinitions()
1935 {
1936 struct DataRedefinition * redefinition;
1937
1938 for(redefinition = dataRedefinitions.first; redefinition; redefinition = redefinition->next)
1939 {
1940 struct Type * type1 = ProcessTypeString(redefinition->type1, 0x0);
1941 struct Type * type2 = ProcessTypeString(redefinition->type2, 0x0);
1942 char type1String[1024] = "";
1943 char type2String[1024] = "";
1944
1945 PrintType(type1, type1String, 0x0, 0x1);
1946 PrintType(type2, type2String, 0x0, 0x1);
1947 if(strcmp(type1String, type2String))
1948 Compiler_Warning(__ecereNameSpace__ecere__GetTranslatedString(__thisModule, "Redefinition of %s (defining as %s, already defined as %s)\n", (((void *)0))), redefinition->name, type1String, type2String);
1949 FreeType(type1);
1950 FreeType(type2);
1951 }
1952 __ecereMethod___ecereNameSpace__ecere__sys__OldList_Free(&dataRedefinitions, (((void *)0)));
1953 }
1954
1955 void __ecereRegisterModule_loadSymbols(struct __ecereNameSpace__ecere__com__Instance * module)
1956 {
1957 struct __ecereNameSpace__ecere__com__Class * class;
1958
1959 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetGlobalData", "void SetGlobalData(ecere::com::NameSpace * nameSpace)", SetGlobalData, module, 1);
1960 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetInIDE", "void SetInIDE(bool b)", SetInIDE, module, 1);
1961 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetSourceDirs", "void SetSourceDirs(ecere::com::List<String> list)", SetSourceDirs, module, 1);
1962 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetIncludeDirs", "void SetIncludeDirs(ecere::sys::OldList * list)", SetIncludeDirs, module, 1);
1963 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetSysIncludeDirs", "void SetSysIncludeDirs(ecere::sys::OldList * list)", SetSysIncludeDirs, module, 1);
1964 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetEcereImported", "void SetEcereImported(bool b)", SetEcereImported, module, 1);
1965 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetEcereImported", "bool GetEcereImported(void)", GetEcereImported, module, 1);
1966 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetInPreCompiler", "void SetInPreCompiler(bool b)", SetInPreCompiler, module, 1);
1967 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetPrecompDefines", "void SetPrecompDefines(ecere::sys::OldList * list)", SetPrecompDefines, module, 1);
1968 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("DummyMethod", "bool DummyMethod(void)", DummyMethod, module, 2);
1969 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("LoadSymbols", "bool LoadSymbols(char * fileName, ecere::com::ImportType importType, bool loadDllOnly)", LoadSymbols, module, 1);
1970 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ImportModule", "void ImportModule(char * name, ecere::com::ImportType importType, ecere::com::AccessMode importAccess, bool loadDllOnly)", ImportModule, module, 1);
1971 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindIncludeFileID", "int FindIncludeFileID(char * includeFile)", FindIncludeFileID, module, 2);
1972 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIncludeFileID", "int GetIncludeFileID(char * includeFile)", GetIncludeFileID, module, 2);
1973 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetIncludeFileFromID", "char * GetIncludeFileFromID(int id)", GetIncludeFileFromID, module, 2);
1974 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("OpenIncludeFile", "ecere::sys::File OpenIncludeFile(char * includeFile)", OpenIncludeFile, module, 2);
1975 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeIncludeFiles", "void FreeIncludeFiles(void)", FreeIncludeFiles, module, 1);
1976 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FreeGlobalData", "void FreeGlobalData(ecere::com::NameSpace globalDataList)", FreeGlobalData, module, 1);
1977 __ecereNameSpace__ecere__com__eSystem_RegisterFunction("CheckDataRedefinitions", "void CheckDataRedefinitions(void)", CheckDataRedefinitions, module, 1);
1978 }
1979
1980 void __ecereUnregisterModule_loadSymbols(struct __ecereNameSpace__ecere__com__Instance * module)
1981 {
1982
1983 }
1984
1985 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Map_TPL_String__ecere__com__List_TPL_ecere__com__Module___;
1986
1987 void __ecereCreateModuleInstances_loadSymbols()
1988 {
1989 loadedModules = __ecereNameSpace__ecere__com__eInstance_New(__ecereClass___ecereNameSpace__ecere__com__Map_TPL_String__ecere__com__List_TPL_ecere__com__Module___);
1990 __ecereNameSpace__ecere__com__eInstance_IncRef(loadedModules);
1991 }
1992
1993 void __ecereDestroyModuleInstances_loadSymbols()
1994 {
1995 (__ecereNameSpace__ecere__com__eInstance_DecRef(loadedModules), loadedModules = 0);
1996 }
1997