[mcs] Allow built-in types to have partial declaration
[mono.git] / mcs / mcs / class.cs
index 9c841a2140fadfae8c2b9bb4665d818590b08063..081adb9b789715812040226a8604da92fdc7ee8a 100644 (file)
@@ -359,12 +359,8 @@ namespace Mono.CSharp
                        return MemberName.GetSignatureForError ();
                }
 
-               public string GetSignatureForMetadata ()
+               public virtual string GetSignatureForMetadata ()
                {
-                       if (Parent is TypeDefinition) {
-                               return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (MemberName.Basename);
-                       }
-
                        var sb = new StringBuilder ();
                        CreateMetadataName (sb);
                        return sb.ToString ();
@@ -1126,6 +1122,15 @@ namespace Mono.CSharp
                        }
                }
 
+               public override string GetSignatureForMetadata ()
+               {
+                       if (Parent is TypeDefinition) {
+                               return Parent.GetSignatureForMetadata () + "+" + TypeNameParser.Escape (FilterNestedName (MemberName.Basename));
+                       }
+
+                       return base.GetSignatureForMetadata ();
+               }
+
                public virtual void SetBaseTypes (List<FullNamedExpression> baseTypes)
                {
                        type_bases = baseTypes;
@@ -1725,21 +1730,14 @@ namespace Mono.CSharp
 
                        foreach (var member in members) {
                                var pbm = member as PropertyBasedMember;
-                               if (pbm != null)
+                               if (pbm != null) {
                                        pbm.PrepareEmit ();
+                                       continue;
+                               }
 
-                               var pm = member as IParametersMember;
-                               if (pm != null) {
-                                       var mc = member as MethodOrOperator;
-                                       if (mc != null) {
-                                               mc.PrepareEmit ();
-                                       }
-
-                                       var p = pm.Parameters;
-                                       if (p.IsEmpty)
-                                               continue;
-
-                                       ((ParametersCompiled) p).ResolveDefaultValues (member);
+                               var mc = member as MethodCore;
+                               if (mc != null) {
+                                       mc.PrepareEmit ();
                                        continue;
                                }
 
@@ -1804,6 +1802,10 @@ namespace Mono.CSharp
 
                        this.spec = spec;
                        current_type = null;
+                       if (class_partial_parts != null) {
+                               foreach (var part in class_partial_parts)
+                                       part.spec = spec;
+                       }
                }
 
                public override void RemoveContainer (TypeContainer cont)
@@ -3025,7 +3027,7 @@ namespace Mono.CSharp
                                        if (ff == null)
                                                continue;
 
-                                       ff.CharSet = (CharSet) System.Enum.Parse (typeof (CharSet), value.GetValue ().ToString ());
+                                       ff.CharSetValue = (CharSet) System.Enum.Parse (typeof (CharSet), value.GetValue ().ToString ());
                                }
                        }
                }
@@ -3714,7 +3716,7 @@ namespace Mono.CSharp
                public override string GetSignatureForDocumentation ()
                {
                        if (IsExplicitImpl)
-                               return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetExplicitNameSignatureForDocumentation () + "#" + ShortName;
+                               return Parent.GetSignatureForDocumentation () + "." + InterfaceType.GetSignatureForDocumentation (true) + "#" + ShortName;
 
                        return Parent.GetSignatureForDocumentation () + "." + ShortName;
                }