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 \