[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mono-devel-list
Subject:    [Mono-devel-list] [Patch] Covariance support.
From:       Carlos Alberto Cortez <calberto.cortez () gmail ! com>
Date:       2004-11-27 2:43:29
Message-ID: 1101523409.2092.6.camel () localhost ! localdomain
[Download RAW message or body]

I've added the check for langversion (and show error for this feature is
langversion is ISO-1).

Carlos.



["cov.patch" (cov.patch)]

Index: delegate.cs
===================================================================
--- delegate.cs	(revision 36439)
+++ delegate.cs	(working copy)
@@ -429,18 +429,43 @@
 			for (int i = pd_count; i > 0; ) {
 				i--;
 
-				if (invoke_pd.ParameterType (i) == pd.ParameterType (i) &&
-				    invoke_pd.ParameterModifier (i) == pd.ParameterModifier (i))
+				Type invoke_pd_param = invoke_pd.ParameterType (i);
+				Type pd_param = pd.ParameterType (i);
+				Parameter.Modifier invoke_pd_param_mod = invoke_pd.ParameterModifier (i);
+				Parameter.Modifier pd_param_mod = pd.ParameterModifier (i);
+
+				if (invoke_pd_param == pd_param &&
+				    invoke_pd_param_mod == pd_param_mod)
 					continue;
-				else {
+				
+				if (invoke_pd_param.IsSubclassOf (pd_param) && 
+						invoke_pd_param_mod == pd_param_mod) {
+					if (RootContext.Version == LanguageVersion.ISO_1) {
+						Report.FeatureIsNotStandardized (loc, "contravariance");
+						Environment.Exit (1);
+					} else
+						continue;
+					
+				} else {
 					return null;
 				}
 			}
 
-			if (((MethodInfo) invoke_mb).ReturnType == ((MethodInfo) mb).ReturnType)
+			Type invoke_mb_retval = ((MethodInfo) invoke_mb).ReturnType;
+			Type mb_retval = ((MethodInfo) mb).ReturnType;
+			if (invoke_mb_retval == mb_retval)
 				return mb;
-			else
-				return null;
+			
+			if (mb_retval.IsSubclassOf (invoke_mb_retval)) {
+				if (RootContext.Version == LanguageVersion.ISO_1) {
+					Report.FeatureIsNotStandardized (loc, "covariance");
+					Environment.Exit (1);
+				}
+				else
+					return mb;
+			}
+			
+			return null;
 		}
 
 		// <summary>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic