Load default references after user references so they can rely on corlib
authorMarek Safar <marek.safar@gmail.com>
Thu, 17 Feb 2011 20:58:17 +0000 (20:58 +0000)
committerMarek Safar <marek.safar@gmail.com>
Thu, 17 Feb 2011 20:58:17 +0000 (20:58 +0000)
mcs/mcs/assembly.cs
mcs/mcs/ikvm.cs

index f6852b83c44e86fa72fc085c09a1f8a34828f74f..c45ad581cdc1c71d85248ce737b1a50a06972f27 100644 (file)
@@ -1069,17 +1069,11 @@ namespace Mono.CSharp
                protected readonly CompilerContext compiler;
 
                protected readonly List<string> paths;
-               readonly string[] default_references;
 
                public AssemblyReferencesLoader (CompilerContext compiler)
                {
                        this.compiler = compiler;
 
-                       if (compiler.Settings.LoadDefaultReferences)
-                               default_references = GetDefaultReferences ();
-                       else
-                               default_references = new string[0];
-
                        paths = new List<string> ();
                        paths.AddRange (compiler.Settings.ReferencesLookupPaths);
                        paths.Add (Directory.GetCurrentDirectory ());
@@ -1131,12 +1125,6 @@ namespace Mono.CSharp
                        }
 
                        T a;
-                       foreach (string r in default_references) {
-                               a = LoadAssemblyDefault (r);
-                               if (a != null)
-                                       loaded.Add (Tuple.Create (module.GlobalRootNamespace, a));
-                       }
-
                        foreach (string r in module.Compiler.Settings.AssemblyReferences) {
                                a = LoadAssemblyFile (r);
                                if (a == null || EqualityComparer<T>.Default.Equals (a, corlib_assembly))
@@ -1167,6 +1155,20 @@ namespace Mono.CSharp
                                loaded.Add (key);
                        }
 
+                       if (compiler.Settings.LoadDefaultReferences) {
+                               foreach (string r in GetDefaultReferences ()) {
+                                       a = LoadAssemblyDefault (r);
+                                       if (a == null)
+                                               continue;
+
+                                       var key = Tuple.Create (module.GlobalRootNamespace, a);
+                                       if (loaded.Contains (key))
+                                               continue;
+
+                                       loaded.Add (key);
+                               }
+                       }
+
                        compiler.TimeReporter.Stop (TimeReporter.TimerType.ReferencesLoading);
                }
        }
index 097d67157cf06bb795d7fa244a2d28f8b9352a3e..7a1bff26653747373ef479dde2cec3ae57d43b7c 100644 (file)
@@ -355,11 +355,11 @@ namespace Mono.CSharp
 
                        default_references.Add ("System.dll");
                        default_references.Add ("System.Xml.dll");
+                       default_references.Add ("System.Core.dll");
 
-                       if (compiler.Settings.Version > LanguageVersion.ISO_2)
-                               default_references.Add ("System.Core.dll");
-                       if (compiler.Settings.Version > LanguageVersion.V_3)
+                       if (corlib != null && corlib.GetName ().Version.Major >= 4) {
                                default_references.Add ("Microsoft.CSharp.dll");
+                       }
 
                        return default_references.ToArray ();
                }