public void SetInPreCompiler(bool b) {inPreCompiler = b; }
bool inSymbolGen = false;
public void SetInSymbolGen(bool b) {inSymbolGen = b; }
+bool inDocumentor = false;
+public void SetInDocumentor(bool b) { inDocumentor = b; }
OldList * precompDefines;
public void SetPrecompDefines(OldList * list) { precompDefines = list; }
// This should register the stuff only...
// But also call ImportModule
-public bool LoadSymbols(char * fileName, ImportType importType, bool loadDllOnly)
+public bool LoadSymbols(const char * fileName, ImportType importType, bool loadDllOnly)
{
File f = FileOpenBuffered(fileName, read);
bool globalInstance = false;
TrimLSpaces(line, line);
if(importType == preDeclImport)
- DeclClass(0, name);
+ DeclClass(name);
if(isStatic || loadDllOnly || importType == preDeclImport || importType == comCheckImport)
regClass = null;
else if(regClass = eSystem_FindClass(privateModule, name), !regClass || regClass.internalDecl || regClass.isRemote)
{
Symbol existingClass = FindClass(name);
- char * baseName = (classType == normalClass && importType == remoteImport && isRemote) ? "DCOMClientObject" : (!strcmp(line, "[None]") ? null : line);
+ const char * baseName = (classType == normalClass && importType == remoteImport && isRemote) ? "DCOMClientObject" : (!strcmp(line, "[None]") ? null : line);
//Symbol baseSymbol = baseName ? FindClass(baseName) : null;
//if(baseSymbol && !baseSymbol->registered)
/*if(classType != unitClass && classType != bitClass && classType != enumClass && baseName && !eSystem_FindClass(privateModule, baseName))
{
Compiler_Error($"Base class %s undefined\n", baseName);
- DeclClass(0, name);
+ DeclClass(name);
regClass = null;
continue;
}
char className[1024] = "DCOMClient_";
strcat(className, name);
if(!existingClass)
- existingClass = DeclClass(0, name);
+ existingClass = DeclClass(name);
regClass = eSystem_RegisterClass(classType, className, baseName, 0, 0, null, null, privateModule, ecereCOMModule ? baseSystemAccess : publicAccess, inheritanceAccess);
}
if(regClass)
regClass.structSize = regClass.offset; // THIS COULD PROBABLY BENEFIT FROM SOME EXPLANATIONS...
}
- // Added this
if(regClass && existingClass)
{
existingClass.registered = regClass;
- regClass.symbol = existingClass; // TESTING THIS
- existingClass.id = MAXINT;
- existingClass.idCode = MAXINT;
+ regClass.symbol = existingClass;
+ existingClass.notYetDeclared = true;
existingClass.imported = true;
if(regClass.module)
existingClass.module = FindModule(regClass.module);
name[equal - line] = '\0';
TrimLSpaces(name, name);
TrimRSpaces(name, name);
- eEnum_AddFixedValue(regClass, name, atoi(equal + 1));
+ eEnum_AddFixedValue(regClass, name, strtoll(equal + 1, null, 0));
}
else
{
TrimLSpaces(line, line);
if(regClass)
{
- Property prop = eClass_AddProperty(regClass, conversion ? null : name, line[0] ? line : 0, (void *)setStmt, (void *)getStmt, memberAccess);
+ Property prop = eClass_AddProperty(regClass, conversion ? null : name, line[0] ? line : 0, (void *)(uintptr)setStmt, (void *)(uintptr)getStmt, memberAccess);
if(prop)
{
prop.compiled = false;
TrimLSpaces(line, line);
if(regClass)
{
- eClass_AddClassProperty(regClass, name, line, (void *)setStmt, (void *)getStmt);
+ eClass_AddClassProperty(regClass, name, line, (void *)(uintptr)setStmt, (void *)(uintptr)getStmt);
}
}
else if(!strcmp(line, "[Set]"))
if(type == TemplateParameterType::type || type == TemplateParameterType::expression)
delete info;
if(type == TemplateParameterType::type || type == TemplateParameterType::identifier)
- delete defaultArg.dataTypeString;
+ delete (void *)defaultArg.dataTypeString;
}
if(regClass)
eClass_DoneAddingTemplateParameters(regClass);
Map<String, List<Module> > loadedModules { };
// (Same function as in actual compiler)
-public void ImportModule(char * name, ImportType importType, AccessMode importAccess, bool loadDllOnly)
+public void ImportModule(const char * name, ImportType importType, AccessMode importAccess, bool loadDllOnly)
{
ImportedModule module = null;
char moduleName[MAX_LOCATION];
// Load an extra instance of any shared module to ensure freeing up a
// module loaded in another file will not invalidate our objects.
- if(!inCompiler && !inPreCompiler && !inSymbolGen)
+
+ // Don't do this for Documentor, because files are loaded with full paths
+ // and won't be recognized as the same libecere that Documentor is actually using,
+ // and since this is loaded from the Documentor app module, it will invalidate classes in use.
+ // We only load one component app at a time for Documentor, so we do not need this trick.
+ if(!inCompiler && !inPreCompiler && !inSymbolGen && !inDocumentor)
{
MapIterator<String, List<Module> > it { map = loadedModules };
if(!it.Index(name /*file*/, false))
strcpy(symFile, dir);
// PathCat(symFile, "Debug");
PathCat(symFile, "obj");
- sprintf(configDir, "debug.%s", (GetRuntimePlatform() == win32) ? "win32" : "linux");
+ sprintf(configDir, "debug.%s", (__runtimePlatform == win32) ? "win32" : (__runtimePlatform == apple) ? "apple" : "linux");
PathCat(symFile, configDir);
PathCat(symFile, name);
{
FreeGlobalData(ns);
globalDataList.nameSpaces.Remove((BTNode)ns);
- delete ns->name;
+ delete (void *)ns->name;
delete ns;
}
for(;(data = (GlobalData)globalDataList.functions.root);)