Mercurial > projects > ldc
diff dmd/module.c @ 875:330f999ade44
Merged DMD 1.038
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Tue, 06 Jan 2009 16:33:51 +0100 |
parents | aa953cc960b6 |
children | 369996c08420 |
line wrap: on
line diff
--- a/dmd/module.c Tue Jan 06 15:54:48 2009 +0100 +++ b/dmd/module.c Tue Jan 06 16:33:51 2009 +0100 @@ -889,6 +889,38 @@ //printf("-Module::runDeferredSemantic('%s'), len = %d\n", toChars(), deferred.dim); } +/************************************ + * Recursively look at every module this module imports, + * return TRUE if it imports m. + * Can be used to detect circular imports. + */ + +int Module::imports(Module *m) +{ + //printf("%s Module::imports(%s)\n", toChars(), m->toChars()); + int aimports_dim = aimports.dim; +#if 0 + for (int i = 0; i < aimports.dim; i++) + { Module *mi = (Module *)aimports.data[i]; + printf("\t[%d] %s\n", i, mi->toChars()); + } +#endif + for (int i = 0; i < aimports.dim; i++) + { Module *mi = (Module *)aimports.data[i]; + if (mi == m) + return TRUE; + if (!mi->insearch) + { + mi->insearch = 1; + int r = mi->imports(m); + mi->insearch = 0; + if (r) + return r; + } + } + return FALSE; +} + /* =========================== ModuleDeclaration ===================== */ ModuleDeclaration::ModuleDeclaration(Array *packages, Identifier *id)