X-Git-Url: https://ecere.com/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=compiler%2Fbootstrap%2Flibec%2Fbootstrap%2FloadSymbols.c;h=2722edc59e17b9077874446017fdfce48a82d626;hb=1681c904ac8670946b70a4474a9a81477a26fc7b;hp=02a83b49213d28e44a878acef10cce9389c21141;hpb=75752253b6a4e380d9c64448ea8d034270fd2045;p=sdk diff --git a/compiler/bootstrap/libec/bootstrap/loadSymbols.c b/compiler/bootstrap/libec/bootstrap/loadSymbols.c index 02a83b4..2722edc 100644 --- a/compiler/bootstrap/libec/bootstrap/loadSymbols.c +++ b/compiler/bootstrap/libec/bootstrap/loadSymbols.c @@ -1,6 +1,9 @@ #if defined(__GNUC__) typedef long long int64; typedef unsigned long long uint64; +#ifndef _WIN32 +#define __declspec(x) +#endif #elif defined(__TINYC__) #include #define __builtin_va_list va_list @@ -10,6 +13,8 @@ typedef unsigned long long uint64; #define strcasecmp stricmp #define strncasecmp strnicmp #define __declspec(x) __attribute__((x)) +#else +#define __declspec(x) #endif typedef long long int64; typedef unsigned long long uint64; @@ -22,6 +27,26 @@ typedef unsigned __int64 uint64; #else #define __ENDIAN_PAD(x) 0 #endif +#include +#include + +#if defined(_W64) || (defined(__WORDSIZE) && __WORDSIZE == 8) || defined(__x86_64__) +#define _64BIT 1 +#else +#define _64BIT 0 +#endif + +#define arch_PointerSize sizeof(void *) +#define structSize_Instance (_64BIT ? 24 : 12) + +extern void * __ecereNameSpace__ecere__com__eSystem_New(unsigned int size); + +extern void * __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size); + +extern void * __ecereNameSpace__ecere__com__eSystem_Renew(void * memory, unsigned int size); + +extern void * __ecereNameSpace__ecere__com__eSystem_Renew0(void * memory, unsigned int size); + extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__BTNode; struct __ecereNameSpace__ecere__sys__BTNode; @@ -32,9 +57,9 @@ struct __ecereNameSpace__ecere__sys__BinaryTree { struct __ecereNameSpace__ecere__sys__BTNode * root; int count; -int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, unsigned int a, unsigned int b); +int (* CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b); void (* FreeKey)(void * key); -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__sys__OldList; @@ -45,7 +70,7 @@ void * last; int count; unsigned int offset; unsigned int circ; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Method; @@ -64,7 +89,7 @@ void * symbol; char * dataTypeString; struct Type * dataType; int memberAccess; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Property; @@ -80,9 +105,9 @@ struct __ecereNameSpace__ecere__com__Class * _class; char * dataTypeString; struct __ecereNameSpace__ecere__com__Class * dataTypeClass; struct Type * dataType; -void (* Set)(); -int (* Get)(); -unsigned int (* IsSet)(); +void (* Set)(void * , int); +int (* Get)(void * ); +unsigned int (* IsSet)(void * ); void * data; void * symbol; int vid; @@ -92,7 +117,7 @@ char * category; unsigned int compiled; unsigned int selfWatchable; unsigned int isWatchable; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_CodePosition; @@ -102,7 +127,7 @@ int line; int charPos; int pos; unsigned int included; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Location; @@ -110,7 +135,7 @@ struct Location { struct CodePosition start; struct CodePosition end; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Attrib; @@ -165,8 +190,8 @@ float f; double d; long long i64; uint64 ui64; -}; -}; +} __attribute__ ((gcc_struct)); +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Expression; @@ -182,7 +207,7 @@ struct { char * constant; struct Identifier * identifier; -}; +} __attribute__ ((gcc_struct)); struct Statement * compound; struct Instantiation * instance; char * string; @@ -191,83 +216,83 @@ struct { struct __ecereNameSpace__ecere__sys__OldList * specifiers; struct Declarator * decl; -} _classExp; +} __attribute__ ((gcc_struct)) _classExp; struct { struct Identifier * id; -} classData; +} __attribute__ ((gcc_struct)) classData; struct { struct Expression * exp; struct __ecereNameSpace__ecere__sys__OldList * arguments; struct Location argLoc; -} call; +} __attribute__ ((gcc_struct)) call; struct { struct Expression * exp; struct __ecereNameSpace__ecere__sys__OldList * index; -} index; +} __attribute__ ((gcc_struct)) index; struct { struct Expression * exp; struct Identifier * member; int memberType; unsigned int thisPtr; -} member; +} __attribute__ ((gcc_struct)) member; struct { int op; struct Expression * exp1; struct Expression * exp2; -} op; +} __attribute__ ((gcc_struct)) op; struct TypeName * typeName; struct Specifier * _class; struct { struct TypeName * typeName; struct Expression * exp; -} cast; +} __attribute__ ((gcc_struct)) cast; struct { struct Expression * cond; struct __ecereNameSpace__ecere__sys__OldList * exp; struct Expression * elseExp; -} cond; +} __attribute__ ((gcc_struct)) cond; struct { struct TypeName * typeName; struct Expression * size; -} _new; +} __attribute__ ((gcc_struct)) _new; struct { struct TypeName * typeName; struct Expression * size; struct Expression * exp; -} _renew; +} __attribute__ ((gcc_struct)) _renew; struct { char * table; struct Identifier * id; -} db; +} __attribute__ ((gcc_struct)) db; struct { struct Expression * ds; struct Expression * name; -} dbopen; +} __attribute__ ((gcc_struct)) dbopen; struct { struct TypeName * typeName; struct Initializer * initializer; -} initializer; +} __attribute__ ((gcc_struct)) initializer; struct { struct Expression * exp; struct TypeName * typeName; -} vaArg; -}; +} __attribute__ ((gcc_struct)) vaArg; +} __attribute__ ((gcc_struct)); unsigned int debugValue; struct __ecereNameSpace__ecere__com__DataValue val; -unsigned int address; +uint64 address; unsigned int hasAddress; struct Type * expType; struct Type * destType; @@ -278,7 +303,7 @@ unsigned int isConstant; unsigned int addedThis; unsigned int needCast; unsigned int thisPtr; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_TemplateDatatype; @@ -343,7 +368,7 @@ union struct __ecereNameSpace__ecere__com__Method * method; struct __ecereNameSpace__ecere__com__Property * _property; struct __ecereNameSpace__ecere__com__Class * registered; -}; +} __attribute__ ((gcc_struct)); int id; int idCode; union @@ -352,20 +377,20 @@ struct { struct External * pointerExternal; struct External * structExternal; -}; +} __attribute__ ((gcc_struct)); struct { struct External * externalGet; struct External * externalSet; struct External * externalPtr; struct External * externalIsSet; -}; +} __attribute__ ((gcc_struct)); struct { struct External * methodExternal; struct External * methodCodeExternal; -}; -}; +} __attribute__ ((gcc_struct)); +} __attribute__ ((gcc_struct)); unsigned int imported; unsigned int declaredStructSym; struct __ecereNameSpace__ecere__com__Class * _class; @@ -392,7 +417,7 @@ struct __ecereNameSpace__ecere__sys__OldList templatedClasses; struct Context * ctx; int isIterator; struct Expression * propCategory; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Type; @@ -454,7 +479,9 @@ struct __ecereNameSpace__ecere__com__ClassTemplateArgument * templateArgs; struct __ecereNameSpace__ecere__com__Class * templateClass; struct __ecereNameSpace__ecere__sys__OldList templatized; int numParams; -}; +} __attribute__ ((gcc_struct)); + +extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, char * name); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance; @@ -463,7 +490,7 @@ struct __ecereNameSpace__ecere__com__Instance int (* * _vTbl)(); struct __ecereNameSpace__ecere__com__Class * _class; int _refCount; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__DataMember; @@ -486,7 +513,7 @@ struct __ecereNameSpace__ecere__sys__OldList members; struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha; int memberOffset; int structAlignment; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__SerialBuffer; @@ -496,7 +523,7 @@ unsigned char * _buffer; unsigned int count; unsigned int _size; unsigned int pos; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__ClassTemplateArgument; @@ -508,7 +535,7 @@ struct { char * dataTypeString; struct __ecereNameSpace__ecere__com__Class * dataTypeClass; -}; +} __attribute__ ((gcc_struct)); struct __ecereNameSpace__ecere__com__DataValue expression; struct { @@ -518,10 +545,10 @@ union struct __ecereNameSpace__ecere__com__DataMember * member; struct __ecereNameSpace__ecere__com__Property * prop; struct __ecereNameSpace__ecere__com__Method * method; -}; -}; -}; -}; +} __attribute__ ((gcc_struct)); +} __attribute__ ((gcc_struct)); +} __attribute__ ((gcc_struct)); +} __attribute__ ((gcc_struct)); extern int yychar; @@ -534,7 +561,7 @@ globalData = nameSpace; struct __ecereNameSpace__ecere__sys__OldList dataRedefinitions; -extern char sourceFileStack[10][797]; +extern char sourceFileStack[30][797]; extern int include_stack_ptr; @@ -587,6 +614,13 @@ void SetInPreCompiler(unsigned int b) inPreCompiler = b; } +unsigned int inSymbolGen = 0x0; + +void SetInSymbolGen(unsigned int b) +{ +inSymbolGen = b; +} + struct __ecereNameSpace__ecere__sys__OldList * precompDefines; void SetPrecompDefines(struct __ecereNameSpace__ecere__sys__OldList * list) @@ -625,7 +659,7 @@ int type; int size; int pos; uint64 mask; -}; +} __attribute__ ((gcc_struct)); 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); @@ -738,7 +772,7 @@ extern struct Symbol * FindClass(char * name); extern char * sourceFile; -extern char * strstr(char * , const char * ); +extern char * strstr(const char * , const char * ); 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); @@ -751,7 +785,7 @@ struct __ecereNameSpace__ecere__sys__OldLink struct __ecereNameSpace__ecere__sys__OldLink * prev; struct __ecereNameSpace__ecere__sys__OldLink * next; void * data; -}; +} __attribute__ ((gcc_struct)); extern void __ecereNameSpace__ecere__com__eClass_DestructionWatchable(struct __ecereNameSpace__ecere__com__Class * _class); @@ -759,9 +793,9 @@ extern struct ModuleImport * FindModule(struct __ecereNameSpace__ecere__com__Ins extern struct ModuleImport * mainModule; -extern char * strchr(char * , int); +extern char * strchr(const char * , int); -extern void * memcpy(void * , const void * , unsigned int size); +extern void * memcpy(void * , const void * , size_t size); extern char * __ecereNameSpace__ecere__sys__TrimRSpaces(char * string, char * output); @@ -826,7 +860,7 @@ unsigned int (* Sma)(struct Expression *, struct Operand *, struct Operand *); unsigned int (* GrtEqu)(struct Expression *, struct Operand *, struct Operand *); unsigned int (* SmaEqu)(struct Expression *, struct Operand *, struct Operand *); unsigned int (* Cond)(struct Expression *, struct Operand *, struct Operand *, struct Operand *); -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_Operand; @@ -845,12 +879,11 @@ int i; unsigned int ui; float f; double d; -unsigned char * p; long long i64; uint64 ui64; -}; +} __attribute__ ((gcc_struct)); struct OpTable ops; -}; +} __attribute__ ((gcc_struct)); extern struct Location yylloc; @@ -894,7 +927,7 @@ struct __ecereNameSpace__ecere__com__GlobalFunction; 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); -extern char * strncpy(char * , const char * , int n); +extern char * strncpy(char * , const char * , size_t n); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__NameSpace; @@ -910,13 +943,13 @@ struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces; struct __ecereNameSpace__ecere__sys__BinaryTree classes; struct __ecereNameSpace__ecere__sys__BinaryTree defines; struct __ecereNameSpace__ecere__sys__BinaryTree functions; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_GlobalData; struct GlobalData { -unsigned int key; +uintptr_t key; struct __ecereNameSpace__ecere__sys__BTNode * parent; struct __ecereNameSpace__ecere__sys__BTNode * left; struct __ecereNameSpace__ecere__sys__BTNode * right; @@ -926,7 +959,7 @@ char * dataTypeString; struct Type * dataType; void * symbol; char * fullName; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_DataRedefinition; @@ -937,7 +970,7 @@ struct DataRedefinition * next; char name[1024]; char type1[1024]; char type2[1024]; -}; +} __attribute__ ((gcc_struct)); void ImportModule(char * name, int importType, int importAccess, unsigned int loadDllOnly); @@ -1496,7 +1529,7 @@ data = (struct GlobalData *)__ecereMethod___ecereNameSpace__ecere__sys__BinaryTr if(!data) { 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)); -data->key = (unsigned int)(data->fullName + start); +data->key = (uintptr_t)(data->fullName + start); __ecereMethod___ecereNameSpace__ecere__sys__BinaryTree_Add(&(*nameSpace).functions, (struct __ecereNameSpace__ecere__sys__BTNode *)data); } else if(strcmp(data->dataTypeString, line)) @@ -1577,9 +1610,9 @@ int importType; unsigned int globalInstance; unsigned int dllOnly; int importAccess; -}; +} __attribute__ ((gcc_struct)); -extern int strlen(const char * ); +extern size_t strlen(const char * ); extern char * __ecereNameSpace__ecere__sys__GetExtension(char * string, char * output); @@ -1603,7 +1636,7 @@ struct __ecereNameSpace__ecere__com__MapIterator { struct __ecereNameSpace__ecere__com__Instance * container; struct __ecereNameSpace__ecere__com__IteratorPointer * pointer; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Instance * __ecereNameSpace__ecere__com__eModule_LoadStrict(struct __ecereNameSpace__ecere__com__Instance * fromModule, char * name, int importAccess); @@ -1625,7 +1658,7 @@ int importType; int origImportType; struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace; struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace; -}; +} __attribute__ ((gcc_struct)); extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Iterator; @@ -1633,7 +1666,7 @@ struct __ecereNameSpace__ecere__com__Iterator { struct __ecereNameSpace__ecere__com__Instance * container; struct __ecereNameSpace__ecere__com__IteratorPointer * pointer; -}; +} __attribute__ ((gcc_struct)); extern int sprintf(char * , char * , ...); @@ -1709,7 +1742,7 @@ char file[274]; strcpy(file, name); __ecereNameSpace__ecere__sys__StripExtension(file); -if(!inCompiler) +if(!inCompiler && !inPreCompiler && !inSymbolGen) { struct __ecereNameSpace__ecere__com__MapIterator it = (it.container = (void *)0, it.pointer = (void *)0, __ecereProp___ecereNameSpace__ecere__com__MapIterator_Set_map(&it, loadedModules), it); @@ -1742,7 +1775,7 @@ if(!skipLoad) loadedModule = __ecereNameSpace__ecere__com__eModule_LoadStrict(privateModule, file, importAccess); if(loadedModule) { -((struct __ecereNameSpace__ecere__com__Module *)(((char *)loadedModule + 12)))->importType = importType; +((struct __ecereNameSpace__ecere__com__Module *)(((char *)loadedModule + structSize_Instance)))->importType = importType; module->dllOnly = 0x0; if(list) ((struct __ecereNameSpace__ecere__com__IteratorPointer * (*)(struct __ecereNameSpace__ecere__com__Instance *, uint64 value))list->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Add])(list, (uint64)(loadedModule)); @@ -1841,7 +1874,7 @@ struct __ecereNameSpace__ecere__sys__NamedItem struct __ecereNameSpace__ecere__sys__NamedItem * prev; struct __ecereNameSpace__ecere__sys__NamedItem * next; char * name; -}; +} __attribute__ ((gcc_struct)); struct __ecereNameSpace__ecere__com__Instance * OpenIncludeFile(char * includeFile) { @@ -1964,8 +1997,9 @@ __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetSysIncludeDirs", "voi __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetEcereImported", "void SetEcereImported(bool b)", SetEcereImported, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("GetEcereImported", "bool GetEcereImported(void)", GetEcereImported, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetInPreCompiler", "void SetInPreCompiler(bool b)", SetInPreCompiler, module, 1); +__ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetInSymbolGen", "void SetInSymbolGen(bool b)", SetInSymbolGen, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("SetPrecompDefines", "void SetPrecompDefines(ecere::sys::OldList * list)", SetPrecompDefines, module, 1); -__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DummyMethod", "bool DummyMethod(void)", DummyMethod, module, 2); +__ecereNameSpace__ecere__com__eSystem_RegisterFunction("DummyMethod", "bool DummyMethod(void)", DummyMethod, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("LoadSymbols", "bool LoadSymbols(char * fileName, ecere::com::ImportType importType, bool loadDllOnly)", LoadSymbols, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("ImportModule", "void ImportModule(char * name, ecere::com::ImportType importType, ecere::com::AccessMode importAccess, bool loadDllOnly)", ImportModule, module, 1); __ecereNameSpace__ecere__com__eSystem_RegisterFunction("FindIncludeFileID", "int FindIncludeFileID(char * includeFile)", FindIncludeFileID, module, 2);