codeowners update
[mono.git] / mcs / mcs / parameter.cs
index adac136fdc07b1600a751e9f0fef356b019541e8..2bd2a498a919444a5862a395038f7d42e5500862 100644 (file)
@@ -142,6 +142,9 @@ namespace Mono.CSharp {
        }
 
        public class ParamsParameter : Parameter {
+
+               bool ParamsAttributeEmit;
+
                public ParamsParameter (FullNamedExpression type, string name, Attributes attrs, Location loc):
                        base (type, name, Parameter.Modifier.PARAMS, attrs, loc)
                {
@@ -158,13 +161,18 @@ namespace Mono.CSharp {
                                return null;
                        }
 
+                       var mc = ec as MemberCore;
+                       ParamsAttributeEmit = mc == null || (mc.ModFlags & Modifiers.OVERRIDE) == 0;
+
                        return parameter_type;
                }
 
                public override void ApplyAttributes (MethodBuilder mb, ConstructorBuilder cb, int index, PredefinedAttributes pa)
                {
                        base.ApplyAttributes (mb, cb, index, pa);
-                       pa.ParamArray.EmitAttribute (builder);
+
+                       if (ParamsAttributeEmit)
+                               pa.ParamArray.EmitAttribute (builder);
                }
        }
 
@@ -563,7 +571,8 @@ namespace Mono.CSharp {
 
                                if (TypeSpecComparer.IsEqual (default_expr.Type, parameter_type) ||
                                        (default_expr is NullConstant && TypeSpec.IsReferenceType (parameter_type) && !parameter_type.IsGenericParameter) ||
-                                       parameter_type.BuiltinType == BuiltinTypeSpec.Type.Object) {
+                                       parameter_type.BuiltinType == BuiltinTypeSpec.Type.Object ||
+                                       parameter_type.BuiltinType == BuiltinTypeSpec.Type.Dynamic) {
                                        return;
                                }
 
@@ -717,6 +726,10 @@ namespace Mono.CSharp {
                                } else if (parameter_type.HasDynamicElement) {
                                        pa.Dynamic.EmitAttribute (builder, parameter_type, Location);
                                }
+
+                               if (parameter_type.HasNamedTupleElement) {
+                                       pa.TupleElementNames.EmitAttribute (builder, parameter_type, Location);
+                               }
                        }
                }
 
@@ -958,6 +971,19 @@ namespace Mono.CSharp {
                        return sb.ToString ();
                }
 
+               public static bool HasSameParameterDefaults (AParametersCollection a, AParametersCollection b)
+               {
+                       if (a == null)
+                               return b == null;
+
+                       for (int i = 0; i < a.Count; ++i) {
+                               if (a.FixedParameters [i].HasDefaultValue != b.FixedParameters [i].HasDefaultValue)
+                                       return false;
+                       }
+
+                       return true;
+               }
+
                public bool HasArglist {
                        get { return has_arglist; }
                }
@@ -1322,6 +1348,9 @@ namespace Mono.CSharp {
                        for (int i = 0; i < parameters.Length; ++i) {
                                Parameter p = (Parameter) parameters [i];
 
+                               if (p.Type != null)
+                                       p.Type.CheckObsoleteness (m, p.Location);
+
                                //
                                // Try not to enter default values resolution if there are is not any default value possible
                                //