Mercurial > projects > ldc
diff dmd/module.c @ 1103:b30fe7e1dbb9
- Updated to DMD frontend 1.041.
- Removed dmd/inifile.c , it's not under a free license, replaced with libconfig based config file.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Thu, 12 Mar 2009 20:37:27 +0100 |
parents | a8cb25d478c4 |
children | eeb8b95ea92e |
line wrap: on
line diff
--- a/dmd/module.c Thu Mar 12 14:08:57 2009 +0100 +++ b/dmd/module.c Thu Mar 12 20:37:27 2009 +0100 @@ -24,7 +24,7 @@ #include "gdc_alloca.h" #endif -#include "mem.h" +#include "rmem.h" #include "mars.h" #include "module.h" @@ -88,6 +88,7 @@ #ifdef IN_GCC strictlyneedmoduleinfo = 0; #endif + selfimports = 0; insearch = 0; searchCacheIdent = NULL; searchCacheSymbol = NULL; @@ -145,9 +146,9 @@ this->doHdrGen = doHdrGen; } -File* Module::buildFilePath(char* forcename, char* path, char* ext) +File* Module::buildFilePath(const char* forcename, const char* path, const char* ext) { - char *argobj; + const char *argobj; if (forcename) argobj = forcename; else @@ -160,9 +161,9 @@ if (fqnNames) { if(md) - argobj = FileName::replaceName(argobj, md->toChars()); + argobj = FileName::replaceName((char*)argobj, md->toChars()); else - argobj = FileName::replaceName(argobj, toChars()); + argobj = FileName::replaceName((char*)argobj, toChars()); // add ext, otherwise forceExt will make nested.module into nested.bc size_t len = strlen(argobj); @@ -926,7 +927,6 @@ { mi->insearch = 1; int r = mi->imports(m); - mi->insearch = 0; if (r) return r; } @@ -934,6 +934,33 @@ return FALSE; } +/************************************* + * Return !=0 if module imports itself. + */ + +int Module::selfImports() +{ + //printf("Module::selfImports() %s\n", toChars()); + if (!selfimports) + { + for (int i = 0; i < amodules.dim; i++) + { Module *mi = (Module *)amodules.data[i]; + //printf("\t[%d] %s\n", i, mi->toChars()); + mi->insearch = 0; + } + + selfimports = imports(this) + 1; + + for (int i = 0; i < amodules.dim; i++) + { Module *mi = (Module *)amodules.data[i]; + //printf("\t[%d] %s\n", i, mi->toChars()); + mi->insearch = 0; + } + } + return selfimports - 1; +} + + /* =========================== ModuleDeclaration ===================== */ ModuleDeclaration::ModuleDeclaration(Array *packages, Identifier *id)