Mercurial > projects > ddmd
changeset 81:722df8e7509c
* fixed win32_lib
+ Module.imports implementation
* fixed Filename.absolute
author | Trass3r |
---|---|
date | Mon, 30 Aug 2010 15:40:51 +0200 |
parents | d0f297f8650b |
children | e95073e26356 |
files | .hgignore dmd/FileName.d dmd/Module.d win32_lib.mak |
diffstat | 4 files changed, 51 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Mon Aug 30 12:16:44 2010 +0200 +++ b/.hgignore Mon Aug 30 15:40:51 2010 +0200 @@ -1,2 +1,7 @@ -relre:win32/* -dmd32/ +syntax: regexp + +# eclipse files etc. +^\. + +\.map$ +\.obj$ \ No newline at end of file
--- a/dmd/FileName.d Mon Aug 30 12:16:44 2010 +0200 +++ b/dmd/FileName.d Mon Aug 30 15:40:51 2010 +0200 @@ -108,16 +108,21 @@ } } - static bool absolute(string name) + static pure bool absolute(const(char)[] name) { -version (_WIN32) { - return (*name == '\\') || - (*name == '/') || - (*name && name[1] == ':'); -} else version (POSIX) { - return (*name == '/'); -} else { - static assert(false); +version (_WIN32) +{ + return (name[0] == '\\') || + (name[0] == '/') || + (name[0] && name[1] == ':'); +} +else version (POSIX) +{ + return (name[0] == '/'); +} +else +{ + static assert(false); } }
--- 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
--- a/win32_lib.mak Mon Aug 30 12:16:44 2010 +0200 +++ b/win32_lib.mak Mon Aug 30 15:40:51 2010 +0200 @@ -68,7 +68,7 @@ # D front end -OBJ1= mars.obj enum.obj struct.obj dsymbol.obj import.obj id.obj \ +OBJ1= mars2.obj enum.obj struct.obj dsymbol.obj import.obj id.obj \ staticassert.obj identifier.obj mtype.obj expression.obj \ optimize.obj template.obj lexer.obj declaration.obj cast.obj \ init.obj func.obj utf.obj unialpha.obj parse.obj statement.obj \