Mercurial > projects > ddmd
diff dmd/Module.d @ 81:722df8e7509c
* fixed win32_lib
+ Module.imports implementation
* fixed Filename.absolute
author | Trass3r |
---|---|
date | Mon, 30 Aug 2010 15:40:51 +0200 |
parents | 43073c7c7769 |
children | acd69f84627e |
line wrap: on
line diff
--- a/dmd/Module.d Mon Aug 30 12:16:44 2010 +0200 +++ b/dmd/Module.d Mon Aug 30 15:40:51 2010 +0200 @@ -1341,10 +1341,36 @@ nested--; //printf("-Module.runDeferredSemantic('%s'), len = %d\n", toChars(), deferred.dim); } - - int imports(Module m) + + /************************************ + * Recursively look at every module this module imports, + * return TRUE if it imports m. + * Can be used to detect circular imports. + */ + bool imports(Module m) { - assert(false); +// writef("%s Module::imports(%s)\n", toChars(), m.toChars()); + int aimports_dim = aimports.dim; +static if (false) +{ + for (int i = 0; i < aimports.dim; i++) + { Module mi = cast(Module)aimports.data[i]; + writef("\t[%d] %s\n", i, mi.toChars()); + } +} + for (int i = 0; i < aimports.dim; i++) + { Module mi = cast(Module)aimports.data[i]; + if (mi == m) + return true; + if (!mi.insearch) + { + mi.insearch = 1; + bool r = mi.imports(m); + if (r) + return r; + } + } + return false; } // Back end