Merge pull request #5675 from mono/glib-debug-symbols
[mono.git] / mcs / mcs / reflection.cs
index 55ee6527dfd63f6af35422191bc1a73c2440b868..24f25951d583c3ca258fe6b73196ea20036a8f9d 100644 (file)
@@ -22,7 +22,7 @@ namespace Mono.CSharp
 #if STATIC
        public class ReflectionImporter
        {
-               public ReflectionImporter (BuildinTypes buildin)
+               public ReflectionImporter (ModuleContainer module, BuiltinTypes builtin)
                {
                        throw new NotSupportedException ();
                }
@@ -45,9 +45,12 @@ namespace Mono.CSharp
 #else
        public sealed class ReflectionImporter : MetadataImporter
        {
-               public ReflectionImporter (BuildinTypes buildin)
+               public ReflectionImporter (ModuleContainer module, BuiltinTypes builtin)
+                       : base (module)
                {
-                       Initialize (buildin);
+                       IgnoreCompilerGeneratedField = false;
+
+                       Initialize (builtin);
                }
 
                public override void AddCompiledType (TypeBuilder builder, TypeSpec spec)
@@ -68,13 +71,6 @@ namespace Mono.CSharp
                        return MemberKind.Class;
                }
 
-               public override void GetCustomAttributeTypeName (CustomAttributeData cad, out string typeNamespace, out string typeName)
-               {
-                       var dt = cad.Constructor.DeclaringType;
-                       typeNamespace = dt.Namespace;
-                       typeName = dt.Name;
-               }
-
                protected override bool HasVolatileModifier (Type[] modifiers)
                {
                        foreach (var t in modifiers) {
@@ -89,7 +85,7 @@ namespace Mono.CSharp
                {
                        // It can be used more than once when importing same assembly
                        // into 2 or more global aliases
-                       var definition = GetAssemblyDefinition (assembly);
+               GetAssemblyDefinition (assembly);
 
                        //
                        // This part tries to simulate loading of top-level
@@ -104,12 +100,12 @@ namespace Mono.CSharp
                                all_types = e.Types;
                        }
 
-                       ImportTypes (all_types, targetNamespace, definition.HasExtensionMethod);
+                       ImportTypes (all_types, targetNamespace, true);
                }
 
                public ImportedModuleDefinition ImportModule (Module module, RootNamespace targetNamespace)
                {
-                       var module_definition = new ImportedModuleDefinition (module, this);
+                       var module_definition = new ImportedModuleDefinition (module);
                        module_definition.ReadAttributes ();
 
                        Type[] all_types;
@@ -124,46 +120,46 @@ namespace Mono.CSharp
                        return module_definition;
                }
 
-               void Initialize (BuildinTypes buildin)
+               void Initialize (BuiltinTypes builtin)
                {
                        //
                        // Setup mapping for build-in types to avoid duplication of their definition
                        //
-                       compiled_types.Add (typeof (object), buildin.Object);
-                       compiled_types.Add (typeof (System.ValueType), buildin.ValueType);
-                       compiled_types.Add (typeof (System.Attribute), buildin.Attribute);
-
-                       compiled_types.Add (typeof (int), buildin.Int);
-                       compiled_types.Add (typeof (long), buildin.Long);
-                       compiled_types.Add (typeof (uint), buildin.UInt);
-                       compiled_types.Add (typeof (ulong), buildin.ULong);
-                       compiled_types.Add (typeof (byte), buildin.Byte);
-                       compiled_types.Add (typeof (sbyte), buildin.SByte);
-                       compiled_types.Add (typeof (short), buildin.Short);
-                       compiled_types.Add (typeof (ushort), buildin.UShort);
-
-                       compiled_types.Add (typeof (System.Collections.IEnumerator), buildin.IEnumerator);
-                       compiled_types.Add (typeof (System.Collections.IEnumerable), buildin.IEnumerable);
-                       compiled_types.Add (typeof (System.IDisposable), buildin.IDisposable);
-
-                       compiled_types.Add (typeof (char), buildin.Char);
-                       compiled_types.Add (typeof (string), buildin.String);
-                       compiled_types.Add (typeof (float), buildin.Float);
-                       compiled_types.Add (typeof (double), buildin.Double);
-                       compiled_types.Add (typeof (decimal), buildin.Decimal);
-                       compiled_types.Add (typeof (bool), buildin.Bool);
-                       compiled_types.Add (typeof (System.IntPtr), buildin.IntPtr);
-                       compiled_types.Add (typeof (System.UIntPtr), buildin.UIntPtr);
-
-                       compiled_types.Add (typeof (System.MulticastDelegate), buildin.MulticastDelegate);
-                       compiled_types.Add (typeof (System.Delegate), buildin.Delegate);
-                       compiled_types.Add (typeof (System.Enum), buildin.Enum);
-                       compiled_types.Add (typeof (System.Array), buildin.Array);
-                       compiled_types.Add (typeof (void), buildin.Void);
-                       compiled_types.Add (typeof (System.Type), buildin.Type);
-                       compiled_types.Add (typeof (System.Exception), buildin.Exception);
-                       compiled_types.Add (typeof (System.RuntimeFieldHandle), buildin.RuntimeFieldHandle);
-                       compiled_types.Add (typeof (System.RuntimeTypeHandle), buildin.RuntimeTypeHandle);
+                       compiled_types.Add (typeof (object), builtin.Object);
+                       compiled_types.Add (typeof (System.ValueType), builtin.ValueType);
+                       compiled_types.Add (typeof (System.Attribute), builtin.Attribute);
+
+                       compiled_types.Add (typeof (int), builtin.Int);
+                       compiled_types.Add (typeof (long), builtin.Long);
+                       compiled_types.Add (typeof (uint), builtin.UInt);
+                       compiled_types.Add (typeof (ulong), builtin.ULong);
+                       compiled_types.Add (typeof (byte), builtin.Byte);
+                       compiled_types.Add (typeof (sbyte), builtin.SByte);
+                       compiled_types.Add (typeof (short), builtin.Short);
+                       compiled_types.Add (typeof (ushort), builtin.UShort);
+
+                       compiled_types.Add (typeof (System.Collections.IEnumerator), builtin.IEnumerator);
+                       compiled_types.Add (typeof (System.Collections.IEnumerable), builtin.IEnumerable);
+                       compiled_types.Add (typeof (System.IDisposable), builtin.IDisposable);
+
+                       compiled_types.Add (typeof (char), builtin.Char);
+                       compiled_types.Add (typeof (string), builtin.String);
+                       compiled_types.Add (typeof (float), builtin.Float);
+                       compiled_types.Add (typeof (double), builtin.Double);
+                       compiled_types.Add (typeof (decimal), builtin.Decimal);
+                       compiled_types.Add (typeof (bool), builtin.Bool);
+                       compiled_types.Add (typeof (System.IntPtr), builtin.IntPtr);
+                       compiled_types.Add (typeof (System.UIntPtr), builtin.UIntPtr);
+
+                       compiled_types.Add (typeof (System.MulticastDelegate), builtin.MulticastDelegate);
+                       compiled_types.Add (typeof (System.Delegate), builtin.Delegate);
+                       compiled_types.Add (typeof (System.Enum), builtin.Enum);
+                       compiled_types.Add (typeof (System.Array), builtin.Array);
+                       compiled_types.Add (typeof (void), builtin.Void);
+                       compiled_types.Add (typeof (System.Type), builtin.Type);
+                       compiled_types.Add (typeof (System.Exception), builtin.Exception);
+                       compiled_types.Add (typeof (System.RuntimeFieldHandle), builtin.RuntimeFieldHandle);
+                       compiled_types.Add (typeof (System.RuntimeTypeHandle), builtin.RuntimeTypeHandle);
                }
        }
 
@@ -172,8 +168,11 @@ namespace Mono.CSharp
        {
                [System.Runtime.InteropServices.FieldOffset (0)]
                int i;
+
+#pragma warning disable 414
                [System.Runtime.InteropServices.FieldOffset (0)]
                float f;
+#pragma warning restore 414
 
                public static int SingleToInt32Bits (float v)
                {
@@ -222,24 +221,15 @@ namespace Mono.CSharp
                //
                public bool Create (AppDomain domain, AssemblyBuilderAccess access)
                {
-#if STATIC
+#if STATIC || FULL_AOT_RUNTIME
                        throw new NotSupportedException ();
 #else
                        ResolveAssemblySecurityAttributes ();
                        var an = CreateAssemblyName ();
 
-                       try {
-                               Builder = file_name == null ?
-                                       domain.DefineDynamicAssembly (an, access) :
-                                       domain.DefineDynamicAssembly (an, access, Dirname (file_name));
-                       } catch (ArgumentException) {
-                               // specified key may not be exportable outside it's container
-                               if (RootContext.StrongNameKeyContainer != null) {
-                                       Report.Error (1548, "Could not access the key inside the container `" +
-                                               RootContext.StrongNameKeyContainer + "'.");
-                               }
-                               throw;
-                       }
+                       Builder = file_name == null ?
+                               domain.DefineDynamicAssembly (an, access) :
+                               domain.DefineDynamicAssembly (an, access, Dirname (file_name));
 
                        module.Create (this, CreateModuleBuilder ());
                        builder_extra = new AssemblyBuilderMonoSpecific (Builder, Compiler);
@@ -430,15 +420,15 @@ namespace Mono.CSharp
 
                        default_references.Add ("System");
                        default_references.Add ("System.Xml");
-#if NET_2_1
+#if MOBILE
                        default_references.Add ("System.Net");
                        default_references.Add ("System.Windows");
                        default_references.Add ("System.Windows.Browser");
 #endif
 
-                       if (RootContext.Version > LanguageVersion.ISO_2)
+                       if (compiler.Settings.Version > LanguageVersion.ISO_2)
                                default_references.Add ("System.Core");
-                       if (RootContext.Version > LanguageVersion.V_3)
+                       if (compiler.Settings.Version > LanguageVersion.V_3)
                                default_references.Add ("Microsoft.CSharp");
 
                        return default_references.ToArray ();
@@ -452,17 +442,12 @@ namespace Mono.CSharp
                        return Path.GetDirectoryName (typeof (object).Assembly.Location);
                }
 
-               public override bool HasObjectType (Assembly assembly)
+               public override Assembly HasObjectType (Assembly assembly)
                {
-                       return assembly.GetType (compiler.BuildinTypes.Object.FullName) != null;
+                       return assembly.GetType (compiler.BuiltinTypes.Object.FullName) == null ? null : assembly;
                }
 
-               public override Assembly LoadAssemblyFile (string fileName)
-               {
-                       return LoadAssemblyFile (fileName, false);
-               }
-
-               Assembly LoadAssemblyFile (string assembly, bool soft)
+               public override Assembly LoadAssemblyFile (string assembly, bool isImplicitReference)
                {
                        Assembly a = null;
 
@@ -479,7 +464,7 @@ namespace Mono.CSharp
                                                a = Assembly.Load (ass);
                                        }
                                } catch (FileNotFoundException) {
-                                       bool err = !soft;
+                                       bool err = !isImplicitReference;
                                        foreach (string dir in paths) {
                                                string full_path = Path.Combine (dir, assembly);
                                                if (!assembly.EndsWith (".dll") && !assembly.EndsWith (".exe"))
@@ -505,11 +490,6 @@ namespace Mono.CSharp
                        return a;
                }
 
-               public override Assembly LoadAssemblyDefault (string fileName)
-               {
-                       return LoadAssemblyFile (fileName, true);
-               }
-
                Module LoadModuleFile (AssemblyDefinitionDynamic assembly, string module)
                {
                        string total_log = "";
@@ -544,10 +524,7 @@ namespace Mono.CSharp
 
                public void LoadModules (AssemblyDefinitionDynamic assembly, RootNamespace targetNamespace)
                {
-                       if (RootContext.Modules.Count == 0)
-                               return;
-
-                       foreach (var moduleName in RootContext.Modules) {
+                       foreach (var moduleName in compiler.Settings.Modules) {
                                var m = LoadModuleFile (assembly, moduleName);
                                if (m == null)
                                        continue;
@@ -572,4 +549,4 @@ namespace Mono.CSharp
                        }
                }
        }
-}
\ No newline at end of file
+}