X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mcs%2Fmcs%2Fikvm.cs;h=14824d136b63f814975bdcedd6be3580593ce98e;hb=919824ddd436a6b13f994c77e9910045fa729d16;hp=8e4582f1d103d7d6dacf59d327d07a9b59f1458b;hpb=ac32aa114ab7cca67498ae8da30188bbbd8923f0;p=mono.git diff --git a/mcs/mcs/ikvm.cs b/mcs/mcs/ikvm.cs index 8e4582f1d10..14824d136b6 100644 --- a/mcs/mcs/ikvm.cs +++ b/mcs/mcs/ikvm.cs @@ -220,7 +220,7 @@ namespace Mono.CSharp return Builder.__AddModule (moduleFile); } - protected override List GetNotUnifiedReferences (AssemblyName assemblyName) + protected override List GetNotUnifiedReferences (AssemblyName assemblyName) { return loader.GetNotUnifiedReferences (assemblyName); } @@ -238,14 +238,18 @@ namespace Mono.CSharp Assembly corlib; readonly List> loaded_names; static readonly Dictionary sdk_directory; - Dictionary> resolved_version_mismatches; + Dictionary> resolved_version_mismatches; + static readonly TypeName objectTypeName = new TypeName ("System", "Object"); static StaticLoader () { sdk_directory = new Dictionary (); - sdk_directory.Add ("2", new string[] { "2.0", "net_2_0", "v2.0.50727" }); - sdk_directory.Add ("4", new string[] { "4.0", "net_4_0", "v4.0.30319" }); - sdk_directory.Add ("4.5", new string[] { "4.5", "net_4_x", "v4.0.30319" }); + sdk_directory.Add ("2", new string[] { "2.0-api", "v2.0.50727" }); + sdk_directory.Add ("2.0", new string[] { "2.0-api", "v2.0.50727" }); + sdk_directory.Add ("4", new string[] { "4.0-api", "v4.0.30319" }); + sdk_directory.Add ("4.0", new string[] { "4.0-api", "v4.0.30319" }); + sdk_directory.Add ("4.5", new string[] { "4.5-api", "v4.0.30319" }); + sdk_directory.Add ("4.6", new string [] { "4.5", "net_4_x", "v4.0.30319" }); } public StaticLoader (StaticImporter importer, CompilerContext compiler) @@ -254,7 +258,7 @@ namespace Mono.CSharp this.importer = importer; domain = new Universe (UniverseOptions.MetadataOnly | UniverseOptions.ResolveMissingMembers | UniverseOptions.DisableFusion | UniverseOptions.DecodeVersionInfoAttributeBlobs | - UniverseOptions.DeterministicOutput); + UniverseOptions.DeterministicOutput | UniverseOptions.DisableDefaultAssembliesLookup); domain.AssemblyResolve += AssemblyReferenceResolver; loaded_names = new List> (); @@ -265,7 +269,7 @@ namespace Mono.CSharp string sdk_path = null; - string sdk_version = compiler.Settings.SdkVersion ?? "4.5"; + string sdk_version = compiler.Settings.SdkVersion ?? "4.6"; string[] sdk_sub_dirs; if (!sdk_directory.TryGetValue (sdk_version, out sdk_sub_dirs)) @@ -352,43 +356,36 @@ namespace Mono.CSharp } if (version_mismatch != null) { - if (version_mismatch is AssemblyBuilder) + if (is_fx_assembly || version_mismatch is AssemblyBuilder) return version_mismatch; - var v1 = new AssemblyName (refname).Version; + var ref_an = new AssemblyName (refname); + var v1 = ref_an.Version; var v2 = version_mismatch.GetName ().Version; + AssemblyReferenceMessageInfo messageInfo; if (v1 > v2) { - if (resolved_version_mismatches == null) - resolved_version_mismatches = new Dictionary> (); - - var an = args.RequestingAssembly.GetName (); - List names; - if (!resolved_version_mismatches.TryGetValue (an, out names)) { - names = new List (); - resolved_version_mismatches.Add (an, names); - } - - names.Add (new[] { - args.RequestingAssembly.Location, - string.Format ("Assembly `{0}' depends on `{1}' which has a higher version number than referenced assembly `{2}'", - args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName) + messageInfo = new AssemblyReferenceMessageInfo (ref_an, report => { + report.SymbolRelatedToPreviousError (args.RequestingAssembly.Location); + report.Error (1705, string.Format ("Assembly `{0}' depends on `{1}' which has a higher version number than referenced assembly `{2}'", + args.RequestingAssembly.FullName, refname, version_mismatch.GetName ().FullName)); }); - return version_mismatch; + } else { + messageInfo = new AssemblyReferenceMessageInfo (ref_an, report => { + if (v1.Major != v2.Major || v1.Minor != v2.Minor) { + report.Warning (1701, 2, + "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", + refname, version_mismatch.GetName ().FullName); + } else { + report.Warning (1702, 3, + "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", + refname, version_mismatch.GetName ().FullName); + } + }); } - if (!is_fx_assembly) { - if (v1.Major != v2.Major || v1.Minor != v2.Minor) { - compiler.Report.Warning (1701, 2, - "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", - refname, version_mismatch.GetName ().FullName); - } else { - compiler.Report.Warning (1702, 3, - "Assuming assembly reference `{0}' matches assembly `{1}'. You may need to supply runtime policy", - refname, version_mismatch.GetName ().FullName); - } - } + AddReferenceVersionMismatch (args.RequestingAssembly.GetName (), messageInfo); return version_mismatch; } @@ -406,6 +403,20 @@ namespace Mono.CSharp return domain.CreateMissingAssembly (args.Name); } + void AddReferenceVersionMismatch (AssemblyName an, AssemblyReferenceMessageInfo errorInfo) + { + if (resolved_version_mismatches == null) + resolved_version_mismatches = new Dictionary> (); + + List names; + if (!resolved_version_mismatches.TryGetValue (an, out names)) { + names = new List (); + resolved_version_mismatches.Add (an, names); + } + + names.Add (errorInfo); + } + public void Dispose () { domain.Dispose (); @@ -430,19 +441,24 @@ namespace Mono.CSharp return default_references.ToArray (); } - public List GetNotUnifiedReferences (AssemblyName assemblyName) + public List GetNotUnifiedReferences (AssemblyName assemblyName) { - List list = null; + List list = null; if (resolved_version_mismatches != null) resolved_version_mismatches.TryGetValue (assemblyName, out list); return list; } - public override bool HasObjectType (Assembly assembly) + public override Assembly HasObjectType (Assembly assembly) { try { - return assembly.GetType (compiler.BuiltinTypes.Object.FullName) != null; + // System.Object can be forwarded and ikvm + // transparently finds it in target assembly therefore + // need to return actual obj assembly becauase in such + // case it's different to assembly parameter + var obj = assembly.FindType (objectTypeName); + return obj == null ? null : obj.Assembly; } catch (Exception e) { throw new InternalErrorException (e, "Failed to load assembly `{0}'", assembly.FullName); }