[644673] Import of modules got broken
authorMarek Safar <marek.safar@gmail.com>
Fri, 8 Oct 2010 16:00:42 +0000 (17:00 +0100)
committerMarek Safar <marek.safar@gmail.com>
Fri, 8 Oct 2010 16:26:34 +0000 (17:26 +0100)
mcs/mcs/driver.cs
mcs/mcs/import.cs
mcs/mcs/namespace.cs

index d9b0ce0f0a6f9e59e91da962827b8ee4d091a341..938e9b1fcc9bcf45fde6dc8772325032b1ac05b9 100644 (file)
@@ -486,6 +486,11 @@ namespace Mono.CSharp
 
                        foreach (var entry in external_aliases)
                                LoadAssembly (entry.Value, entry.Key, false);
+
+                       if (modules.Count > 0) {
+                               foreach (string module in modules)
+                                       LoadModule (module);
+                       }
                                
                        ctx.GlobalRootNamespace.ComputeNamespaces (ctx);
                }
@@ -1704,13 +1709,8 @@ namespace Mono.CSharp
                                ShowTime ("Loading references");
 
                        ctx.MetaImporter.Initialize ();
-                       LoadReferences ();
-                       
-                       if (modules.Count > 0) {
-                               foreach (string module in modules)
-                                       LoadModule (module);
-                       }
-                       
+                       LoadReferences ();              
+               
                        if (timestamps)
                                ShowTime ("References loaded");
                        
index 062f1463de112ee58df3bcc25ea237eb25ada6e6..32657b7eced322fd653333321750224abb9fb41d 100644 (file)
@@ -783,9 +783,29 @@ namespace Mono.CSharp
                                all_types = e.Types;
                        }
 
+                       ImportTypes (all_types, targetNamespace, extension_type);
+               }
+
+               public void ImportModule (Module module, Namespace targetNamespace)
+               {
+                       Type extension_type = HasExtensionAttribute (CustomAttributeData.GetCustomAttributes (module));
+
+                       Type[] all_types;
+                       try {
+                               all_types = module.GetTypes ();
+                       } catch (ReflectionTypeLoadException e) {
+                               all_types = e.Types;
+                               throw;
+                       }
+
+                       ImportTypes (all_types, targetNamespace, extension_type);
+               }
+
+               void ImportTypes (Type[] types, Namespace targetNamespace, Type extension_type)
+               {
                        Namespace ns = targetNamespace;
                        string prev_namespace = null;
-                       foreach (var t in all_types) {
+                       foreach (var t in types) {
                                if (t == null || t.IsNested)
                                        continue;
 
index 3f2e47192cbd7dab5fd7fa2ab0175b85be27a356..0109908c42509838a23eca8c28e54f473c882cc2 100644 (file)
@@ -46,7 +46,7 @@ namespace Mono.CSharp {
                        referenced_assemblies = n;
                }
 
-               public void ImportTypes (CompilerContext ctx)
+               public virtual void ImportTypes (CompilerContext ctx)
                {
                        foreach (Assembly a in referenced_assemblies) {
                                try {
@@ -157,6 +157,18 @@ namespace Mono.CSharp {
 
                        return rn;
                }
+
+               public override void ImportTypes (CompilerContext ctx)
+               {
+                       base.ImportTypes (ctx);
+
+                       if (modules != null) {
+                               // 0 is this module
+                               for (int i = 1; i < modules.Length; ++i) {
+                                       ctx.MetaImporter.ImportModule (modules[i], this);
+                               }
+                       }
+               }
        }
 
        /// <summary>