summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2011-10-20 22:28:50 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2011-10-20 22:28:50 +0000
commitdd8706fc1190909552fd5a84c3e311aaa2e80466 (patch)
tree12c9127d536d6c2ee4861f7fffd1a5d0d0009a96 /src/compiler
parent3921e5be742ff9523825037056e82b7b82db5932 (diff)
downloadscala-dd8706fc1190909552fd5a84c3e311aaa2e80466.tar.gz
scala-dd8706fc1190909552fd5a84c3e311aaa2e80466.tar.bz2
scala-dd8706fc1190909552fd5a84c3e311aaa2e80466.zip
5033: align bound syms when comparing method types
can't believe I missed that one... closes SI-5033 more complete test case to make sure the multi-arglist case works as well no review
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/reflect/internal/Types.scala10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala
index 1f238d666a..d86fc40bcb 100644
--- a/src/compiler/scala/reflect/internal/Types.scala
+++ b/src/compiler/scala/reflect/internal/Types.scala
@@ -3303,7 +3303,6 @@ A type's typeSymbol should never be inspected directly.
variance = -variance
val result1 = this(result)
if ((params1 eq params) && (result1 eq result)) tp
- // for new dependent types: result1.substSym(params, params1)?
else copyMethodType(tp, params1, result1.substSym(params, params1))
case PolyType(tparams, result) =>
variance = -variance
@@ -4558,9 +4557,8 @@ A type's typeSymbol should never be inspected directly.
case mt1: MethodType =>
tp2 match {
case mt2: MethodType =>
- // DEPMETTODO new dependent types: probably fix this, use substSym as done for PolyType
return isSameTypes(mt1.paramTypes, mt2.paramTypes) &&
- mt1.resultType =:= mt2.resultType &&
+ mt1.resultType =:= mt2.resultType.substSym(mt2.params, mt1.params) &&
mt1.isImplicit == mt2.isImplicit
// note: no case NullaryMethodType(restpe) => return mt1.params.isEmpty && mt1.resultType =:= restpe
case _ =>
@@ -4913,7 +4911,7 @@ A type's typeSymbol should never be inspected directly.
val res2 = mt2.resultType
(sameLength(params1, params2) &&
matchingParams(params1, params2, mt1.isJava, mt2.isJava) &&
- (res1 <:< res2) &&
+ (res1 <:< res2.substSym(params2, params1)) &&
mt1.isImplicit == mt2.isImplicit)
// TODO: if mt1.params.isEmpty, consider NullaryMethodType?
case _ =>
@@ -5033,9 +5031,9 @@ A type's typeSymbol should never be inspected directly.
case mt1 @ MethodType(params1, res1) =>
tp2 match {
case mt2 @ MethodType(params2, res2) =>
- sameLength(params1, params2) && // useful pre-screening optimization
+ // sameLength(params1, params2) was used directly as pre-screening optimization (now done by matchesQuantified -- is that ok, performancewise?)
+ matchesQuantified(params1, params2, res1, res2) &&
matchingParams(params1, params2, mt1.isJava, mt2.isJava) &&
- matchesType(res1, res2, alwaysMatchSimple) &&
mt1.isImplicit == mt2.isImplicit
case NullaryMethodType(res2) =>
if (params1.isEmpty) matchesType(res1, res2, alwaysMatchSimple)