Mercurial > projects > ldc
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");