diff runtime/internal/genobj.d @ 834:f466f475b654

Added proper "need 'this' to access member foo" errors instead of "variable foo not resolved" for some cases, added FIXME for the old error! Added a bit more information to the runtime's cyclic dependency detection exception.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 09 Dec 2008 01:56:39 +0100
parents d63741d00ee3
children 8208374e5bed
line wrap: on
line diff
--- a/runtime/internal/genobj.d	Sun Dec 07 16:43:20 2008 +0100
+++ b/runtime/internal/genobj.d	Tue Dec 09 01:56:39 2008 +0100
@@ -1060,7 +1060,7 @@
     _moduleinfo_dtors = new ModuleInfo[_moduleinfo_array.length];
     debug(PRINTF) printf("_moduleinfo_dtors = x%x\n", cast(void *)_moduleinfo_dtors);
     _moduleIndependentCtors();
-    _moduleCtor2(_moduleinfo_array, 0);
+    _moduleCtor2(null, _moduleinfo_array, 0);
 }
 
 extern (C) void _moduleIndependentCtors()
@@ -1076,7 +1076,7 @@
     debug(PRINTF) printf("_moduleIndependentCtors() DONE\n");
 }
 
-void _moduleCtor2(ModuleInfo[] mi, int skip)
+void _moduleCtor2(ModuleInfo from, ModuleInfo[] mi, int skip)
 {
     debug(PRINTF) printf("_moduleCtor2(): %d modules\n", mi.length);
     for (uint i = 0; i < mi.length; i++)
@@ -1096,11 +1096,12 @@
             if (m.flags & MIctorstart)
             {   if (skip || m.flags & MIstandalone)
                     continue;
-                    throw new Exception( "Cyclic dependency in module " ~ m.name );
+                assert(from !is null);
+                throw new Exception( "Cyclic dependency in module " ~ from.name ~ " for import " ~ m.name);
             }
 
             m.flags |= MIctorstart;
-            _moduleCtor2(m.importedModules, 0);
+            _moduleCtor2(m, m.importedModules, 0);
             if (m.ctor)
                 (*m.ctor)();
             m.flags &= ~MIctorstart;
@@ -1114,7 +1115,7 @@
         else
         {
             m.flags |= MIctordone;
-            _moduleCtor2(m.importedModules, 1);
+            _moduleCtor2(m, m.importedModules, 1);
         }
     }
     debug(PRINTF) printf("_moduleCtor2() DONE\n");