Merge pull request #2630 from ludovic-henry/fix-registeredwaithandle-leak
[mono.git] / mcs / mcs / method.cs
index 8df1be80a97852aef5909b2e0f42bf905035dd73..e6213c7e43e3228c2bad5d7548640d2ecbd54599 100644 (file)
@@ -165,8 +165,9 @@ namespace Mono.CSharp {
                        return s + parameters.GetSignatureForDocumentation ();
                }
 
-               public virtual void PrepareEmit ()
+               public override void PrepareEmit ()
                {
+                       base.PrepareEmit ();
                        parameters.ResolveDefaultValues (this);
                }
 
@@ -1090,19 +1091,12 @@ namespace Mono.CSharp {
                                        }
 
                                        if (base_override.IsGeneric) {
-                                               ObsoleteAttribute oa;
                                                foreach (var base_tp in base_tparams) {
-                                                       oa = base_tp.BaseType.GetAttributeObsolete ();
-                                                       if (oa != null) {
-                                                               AttributeTester.Report_ObsoleteMessage (oa, base_tp.BaseType.GetSignatureForError (), Location, Report);
-                                                       }
+                                                       base_tp.BaseType.CheckObsoleteness (this, Location);
 
                                                        if (base_tp.InterfacesDefined != null) {
                                                                foreach (var iface in base_tp.InterfacesDefined) {
-                                                                       oa = iface.GetAttributeObsolete ();
-                                                                       if (oa != null) {
-                                                                               AttributeTester.Report_ObsoleteMessage (oa, iface.GetSignatureForError (), Location, Report);
-                                                                       }
+                                                                       iface.CheckObsoleteness (this, Location);
                                                                }
                                                        }
                                                }
@@ -1411,11 +1405,7 @@ namespace Mono.CSharp {
                                p.Name = md_p.Name;
                                p.DefaultValue = md_p.DefaultValue;
                                if (md_p.OptAttributes != null) {
-                                       if (p.OptAttributes == null) {
-                                               p.OptAttributes = md_p.OptAttributes;
-                                       } else {
-                                               p.OptAttributes.Attrs.AddRange (md_p.OptAttributes.Attrs);
-                                       }
+                                       Attributes.AttachFromPartial (p, md_p);
                                }
                        }
 
@@ -1777,8 +1767,12 @@ namespace Mono.CSharp {
                                // If we use a "this (...)" constructor initializer, then
                                // do not emit field initializers, they are initialized in the other constructor
                                //
-                               if (!(Initializer is ConstructorThisInitializer))
+                               if (!(Initializer is ConstructorThisInitializer)) {
+                                       var errors = Compiler.Report.Errors;
                                        Parent.PartialContainer.ResolveFieldInitializers (bc);
+                                       if (errors != Compiler.Report.Errors)
+                                               return;
+                               }
 
                                if (!IsStatic) {
                                        if (Initializer == null && Parent.PartialContainer.Kind == MemberKind.Class) {
@@ -2658,7 +2652,7 @@ namespace Mono.CSharp {
                        else if (OperatorType == OpType.Implicit)
                                Parent.MemberCache.CheckExistingMembersOverloads (this, GetMetadataName (OpType.Explicit), parameters);
 
-                       TypeSpec declaring_type = Parent.CurrentType;
+                       TypeSpec declaring_type = Parent.PartialContainer.CurrentType;
                        TypeSpec return_type = MemberType;
                        TypeSpec first_arg_type = ParameterTypes [0];