public bool SubstEqualTypeArrays(TypeArray taDst, TypeArray taSrc, TypeArray typeArgsCls, TypeArray typeArgsMeth, SubstTypeFlags grfst) { // Handle the simple common cases first. if (taDst == taSrc || (taDst != null && taDst.Equals(taSrc))) { // The following assertion is not always true and indicates a problem where // the signature of override method does not match the one inherited from // the base class. The method match we have found does not take the type // arguments of the base class into account. So actually we are not overriding // the method that we "intend" to. // Debug.Assert(taDst == SubstTypeArray(taSrc, typeArgsCls, typeArgsMeth, grfst)); return(true); } if (taDst.Count != taSrc.Count) { return(false); } if (taDst.Count == 0) { return(true); } var ctx = new SubstContext(typeArgsCls, typeArgsMeth, grfst); if (ctx.FNop()) { return(false); } for (int i = 0; i < taDst.Count; i++) { if (!SubstEqualTypesCore(taDst[i], taSrc[i], ctx)) { return(false); } } return(true); }
public bool SubstEqualTypeArrays(TypeArray taDst, TypeArray taSrc, TypeArray typeArgsCls, TypeArray typeArgsMeth, SubstTypeFlags grfst) { // Handle the simple common cases first. if (taDst == taSrc || (taDst != null && taDst.Equals(taSrc))) { // The following assertion is not always true and indicates a problem where // the signature of override method does not match the one inherited from // the base class. The method match we have found does not take the type // arguments of the base class into account. So actually we are not overriding // the method that we "intend" to. // Debug.Assert(taDst == SubstTypeArray(taSrc, typeArgsCls, typeArgsMeth, grfst)); return true; } if (taDst.Size != taSrc.Size) return false; if (taDst.Size == 0) return true; var ctx = new SubstContext(typeArgsCls, typeArgsMeth, grfst); if (ctx.FNop()) return false; for (int i = 0; i < taDst.size; i++) { if (!SubstEqualTypesCore(taDst.Item(i), taSrc.Item(i), ctx)) return false; } return true; }