Browse Source

*** merged revisions from mcs: 53694-53833

svn path=/trunk/mcs/; revision=54031
Raja R Harinath 20 years ago
parent
commit
8c4a925c23
5 changed files with 72 additions and 28 deletions
  1. 28 0
      mcs/gmcs/ChangeLog
  2. 8 0
      mcs/gmcs/class.cs
  3. 12 10
      mcs/gmcs/doc.cs
  4. 21 18
      mcs/gmcs/ecore.cs
  5. 3 0
      mcs/gmcs/expression.cs

+ 28 - 0
mcs/gmcs/ChangeLog

@@ -1,3 +1,31 @@
+2005-12-01  Marek Safar  <[email protected]>
+
+	Fix #76849.
+	* class.cs (MethodData.Define): Set proper Obsolete context.
+
+	* ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
+	obsolete context.
+	(FieldExpr.DoResolve): Ditto.
+
+2005-12-01  Marek Safar  <[email protected]>
+
+	Fix #76849.
+	* class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
+	parent is not obsolete.
+
+2005-12-01  Atsushi Enomoto  <[email protected]>
+
+	* doc.cs : (FindDocumentedMember) find parameterless members first
+	  and get CS0419 in the early stage. Fixed first case of bug #76727.
+
+2005-11-30  Marek Safar  <[email protected]>
+
+	Fix #76859.
+	* ecore.cs (Expression.ResolveAsConstant): Report constant error only when
+	no error was reported.
+
+	*expression.cs (Binary.DoResolve): left can be null.
+
 2005-12-06  Raja R Harinath  <[email protected]>
 
 	* class.cs (MethodCore.CheckGenericOverride): Delete unused

+ 8 - 0
mcs/gmcs/class.cs

@@ -3702,12 +3702,18 @@ namespace Mono.CSharp {
 			bool old_unsafe = ec.InUnsafe;
 			ec.InUnsafe = InUnsafe;
 			ec.ResolvingGenericMethod = GenericMethod != null;
+
+			bool old_obsolete = ec.TestObsoleteMethodUsage;
+			if (GetObsoleteAttribute () != null || Parent.GetObsoleteAttribute () != null)
+				ec.TestObsoleteMethodUsage = false;
+
 			// Check if arguments were correct
 			if (!Parameters.Resolve (ec))
 				return false;
 
 			ec.ResolvingGenericMethod = false;
 			ec.InUnsafe = old_unsafe;
+			ec.TestObsoleteMethodUsage = old_obsolete;
 
 			return CheckParameters (ParameterTypes);
 		}
@@ -5127,6 +5133,8 @@ namespace Mono.CSharp {
 			}
 
 			EmitContext ec = method.CreateEmitContext (container, null);
+			if (method.GetObsoleteAttribute () != null || container.GetObsoleteAttribute () != null)
+				ec.TestObsoleteMethodUsage = false;
 
 			DefineMethodBuilder (ec, container, method_name, method.ParameterInfo.Types);
 

+ 12 - 10
mcs/gmcs/doc.cs

@@ -438,16 +438,7 @@ namespace Mono.CSharp {
 			bool warn419, string nameForError)
 		{
 			warningType = 0;
-			MethodSignature msig = new MethodSignature (memberName, null, paramList);
-			MemberInfo [] mis = FindMethodBase (type, 
-				BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance,
-				msig);
-
-			if (warn419 && mis.Length > 0) {
-				if (IsAmbiguous (mis))
-					Report419 (mc, nameForError, mis);
-				return mis [0];
-			}
+			MemberInfo [] mis;
 
 			if (paramList.Length == 0) {
 				// search for fields/events etc.
@@ -463,6 +454,17 @@ namespace Mono.CSharp {
 				return mis [0];
 			}
 
+			MethodSignature msig = new MethodSignature (memberName, null, paramList);
+			mis = FindMethodBase (type, 
+				BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance,
+				msig);
+
+			if (warn419 && mis.Length > 0) {
+				if (IsAmbiguous (mis))
+					Report419 (mc, nameForError, mis);
+				return mis [0];
+			}
+
 			// search for operators (whose parameters exactly
 			// matches with the list) and possibly report CS1581.
 			string oper = null;

+ 21 - 18
mcs/gmcs/ecore.cs

@@ -415,24 +415,24 @@ namespace Mono.CSharp {
 		public Constant ResolveAsConstant (EmitContext ec, MemberCore mc)
 		{
 			Expression e = Resolve (ec);
-			if (e != null) {
-				Constant c = e as Constant;
-				if (c != null)
-					return c;
+			if (e == null)
+				return null;
 
-				EmptyCast empty = e as EmptyCast;
-				if (empty != null) {
-					c = empty.Child as Constant;
-					if (c != null) {
-						// TODO: not sure about this maybe there is easier way how to use EmptyCast
-						if (e.Type.IsEnum)
-							c.Type = e.Type;
+			Constant c = e as Constant;
+			if (c != null)
+				return c;
 
-						return c;
-					}
+			EmptyCast empty = e as EmptyCast;
+			if (empty != null) {
+				c = empty.Child as Constant;
+				if (c != null) {
+					// TODO: not sure about this maybe there is easier way how to use EmptyCast
+					if (e.Type.IsEnum)
+						c.Type = e.Type;
+
+					return c;
 				}
 			}
-
 			Const.Error_ExpressionMustBeConstant (loc, mc.GetSignatureForError ());
 			return null;
 		}
@@ -2161,7 +2161,7 @@ namespace Mono.CSharp {
 						if (!me.IsStatic &&
 						    (!intermediate || !IdenticalNameAndTypeName (ec, me, loc))) {
 							Error_ObjectRefRequired (ec, loc, me.GetSignatureForError ());
-							return null;
+							return EmptyExpression.Null;
 						}
 
 						//
@@ -3029,8 +3029,10 @@ namespace Mono.CSharp {
 					return null;
 				}
 
-				if (ic.ResolveValue ())
-					ic.CheckObsoleteness (loc);
+				if (ic.ResolveValue ()) {
+					if (ec.TestObsoleteMethodUsage)
+						ic.CheckObsoleteness (loc);
+				}
 
 				return ic.Value;
 			}
@@ -3087,7 +3089,8 @@ namespace Mono.CSharp {
 				ObsoleteAttribute oa;
 				FieldBase f = TypeManager.GetField (FieldInfo);
 				if (f != null) {
-					f.CheckObsoleteness (loc);
+					if (ec.TestObsoleteMethodUsage)
+						f.CheckObsoleteness (loc);
 					// To be sure that type is external because we do not register generated fields
 				} else if (!(FieldInfo.DeclaringType is TypeBuilder)) {                                
 					oa = AttributeTester.GetMemberObsoleteAttribute (FieldInfo);

+ 3 - 0
mcs/gmcs/expression.cs

@@ -2383,6 +2383,9 @@ namespace Mono.CSharp {
 
 		public override Expression DoResolve (EmitContext ec)
 		{
+			if (left == null)
+				return null;
+
 			if ((oper == Operator.Subtraction) && (left is ParenthesizedExpression)) {
 				left = ((ParenthesizedExpression) left).Expr;
 				left = left.Resolve (ec, ResolveFlags.VariableOrValue | ResolveFlags.Type);