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