Merge pull request #3083 from alexrp/gc-pointless-memory-barrier
[mono.git] / mcs / mcs / typespec.cs
index 339addfd15e11ff1e6859856bbb29449b2b30ed4..fb02370dbb32cd2317827d323637b370d01e0048 100644 (file)
@@ -490,17 +490,22 @@ namespace Mono.CSharp
                //
                // Text representation of type used by documentation writer
                //
-               public override string GetSignatureForDocumentation ()
+               public sealed override string GetSignatureForDocumentation ()
+               {
+                       return GetSignatureForDocumentation (false);
+               }
+
+               public virtual string GetSignatureForDocumentation (bool explicitName)
                {
                        StringBuilder sb = new StringBuilder ();
                        if (IsNested) {
-                               sb.Append (DeclaringType.GetSignatureForDocumentation ());
-                       } else {
-                               sb.Append (MemberDefinition.Namespace);
+                               sb.Append (DeclaringType.GetSignatureForDocumentation (explicitName));
+                       } else if (MemberDefinition.Namespace != null) {
+                               sb.Append (explicitName ? MemberDefinition.Namespace.Replace ('.', '#') : MemberDefinition.Namespace);
                        }
 
                        if (sb.Length != 0)
-                               sb.Append (".");
+                               sb.Append (explicitName ? "#" : ".");
 
                        sb.Append (Name);
                        if (Arity > 0) {
@@ -510,7 +515,7 @@ namespace Mono.CSharp
                                        if (i > 0)
                                            sb.Append (",");
 
-                                       sb.Append (TypeArguments[i].GetSignatureForDocumentation ());
+                                               sb.Append (TypeArguments[i].GetSignatureForDocumentation (explicitName));
                                    }
                                    sb.Append ("}");
                                } else {
@@ -522,33 +527,6 @@ namespace Mono.CSharp
                        return sb.ToString ();
                }
 
-               public string GetExplicitNameSignatureForDocumentation ()
-               {
-                       StringBuilder sb = new StringBuilder ();
-                       if (IsNested) {
-                               sb.Append (DeclaringType.GetExplicitNameSignatureForDocumentation ());
-                       } else if (MemberDefinition.Namespace != null) {
-                               sb.Append (MemberDefinition.Namespace.Replace ('.', '#'));
-                       }
-
-                       if (sb.Length != 0)
-                               sb.Append ("#");
-
-                       sb.Append (Name);
-                       if (Arity > 0) {
-                               sb.Append ("{");
-                               for (int i = 0; i < Arity; ++i) {
-                                       if (i > 0)
-                                               sb.Append (",");
-
-                                       sb.Append (TypeArguments[i].GetExplicitNameSignatureForDocumentation ());
-                               }
-                               sb.Append ("}");
-                       }
-
-                       return sb.ToString ();
-               }
-
                public override string GetSignatureForError ()
                {
                        string s;
@@ -569,7 +547,15 @@ namespace Mono.CSharp
 
                public string GetSignatureForErrorIncludingAssemblyName ()
                {
-                       return string.Format ("{0} [{1}]", GetSignatureForError (), MemberDefinition.DeclaringAssembly.FullName);
+                       var imported = MemberDefinition.DeclaringAssembly as ImportedAssemblyDefinition;
+
+                       var location = imported != null ?
+                               System.IO.Path.GetFullPath (imported.Location) :
+                           ((MemberCore)MemberDefinition).Location.NameFullPath;
+
+                       return string.Format ("{0} [{1} -- {2}]", GetSignatureForError (),
+                                                                 MemberDefinition.DeclaringAssembly.FullName,
+                                                                 location);
                }
 
                protected virtual string GetTypeNameSignature ()
@@ -651,6 +637,7 @@ namespace Mono.CSharp
                        case MemberKind.Struct:
                        case MemberKind.Enum:
                        case MemberKind.Void:
+                       case MemberKind.PointerType:
                                return false;
                        case MemberKind.InternalCompilerType:
                                //
@@ -1445,6 +1432,7 @@ namespace Mono.CSharp
                public static readonly InternalType FakeInternalType = new InternalType ("<fake$type>");
                public static readonly InternalType Namespace = new InternalType ("<namespace>");
                public static readonly InternalType ErrorType = new InternalType ("<error>");
+               public static readonly InternalType VarOutType = new InternalType ("var out");
 
                readonly string name;
 
@@ -1647,6 +1635,11 @@ namespace Mono.CSharp
 
                #endregion
 
+               public override void CheckObsoleteness (IMemberContext mc, Location loc)
+               {
+                       Element.CheckObsoleteness (mc, loc);
+               }
+
                public override ObsoleteAttribute GetAttributeObsolete ()
                {
                        return Element.GetAttributeObsolete ();
@@ -1657,9 +1650,9 @@ namespace Mono.CSharp
                        return null;
                }
 
-               public override string GetSignatureForDocumentation ()
+               public override string GetSignatureForDocumentation (bool explicitName)
                {
-                       return Element.GetSignatureForDocumentation () + GetPostfixSignature ();
+                       return Element.GetSignatureForDocumentation (explicitName) + GetPostfixSignature ();
                }
 
                public override string GetSignatureForError ()
@@ -1892,29 +1885,33 @@ namespace Mono.CSharp
                        return sb.ToString ();
                }
 
-               public override string GetSignatureForDocumentation ()
+               public override string GetSignatureForDocumentation (bool explicitName)
                {
                        StringBuilder sb = new StringBuilder ();
-                       GetElementSignatureForDocumentation (sb);
+                       GetElementSignatureForDocumentation (sb, explicitName);
                        return sb.ToString ();
                }
 
-               void GetElementSignatureForDocumentation (StringBuilder sb)
+               void GetElementSignatureForDocumentation (StringBuilder sb, bool explicitName)
                {
                        var ac = Element as ArrayContainer;
                        if (ac == null)
-                               sb.Append (Element.GetSignatureForDocumentation ());
+                               sb.Append (Element.GetSignatureForDocumentation (explicitName));
                        else
-                               ac.GetElementSignatureForDocumentation (sb);
+                               ac.GetElementSignatureForDocumentation (sb, explicitName);
 
-                       sb.Append ("[");
-                       for (int i = 1; i < rank; i++) {
-                               if (i == 1)
-                                       sb.Append ("0:");
+                       if (explicitName) {
+                               sb.Append (GetPostfixSignature (rank));
+                       } else {
+                               sb.Append ("[");
+                               for (int i = 1; i < rank; i++) {
+                                       if (i == 1)
+                                               sb.Append ("0:");
 
-                               sb.Append (",0:");
+                                       sb.Append (",0:");
+                               }
+                               sb.Append ("]");
                        }
-                       sb.Append ("]");
                }
 
                public static ArrayContainer MakeType (ModuleContainer module, TypeSpec element)
@@ -1936,6 +1933,11 @@ namespace Mono.CSharp
 
                        return ac;
                }
+
+               public override List<MissingTypeSpecReference> ResolveMissingDependencies (MemberSpec caller)
+               {
+                       return Element.ResolveMissingDependencies (caller);
+               }
        }
 
        class ReferenceContainer : ElementTypeSpec