summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@epfl.ch>2011-06-15 16:32:38 +0000
committerAdriaan Moors <adriaan.moors@epfl.ch>2011-06-15 16:32:38 +0000
commit8b66af0cfe29ab6026215e44f4d4b148316c159d (patch)
treebe5eddd59b29dbda48ce2c151ba4d2d59a882960 /src
parent0cebb74f673de59c357c5284935db0cfc69bbe40 (diff)
downloadscala-8b66af0cfe29ab6026215e44f4d4b148316c159d.tar.gz
scala-8b66af0cfe29ab6026215e44f4d4b148316c159d.tar.bz2
scala-8b66af0cfe29ab6026215e44f4d4b148316c159d.zip
closes #4692: unification in type constructor i...
closes #4692: unification in type constructor inference now widens *and* dealiases when necessary in 2.8.1 implicit conversion search started with a widened type, so that combo never came up no review
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/reflect/internal/Types.scala5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/compiler/scala/reflect/internal/Types.scala b/src/compiler/scala/reflect/internal/Types.scala
index 3264c34d4b..cc5c2fa5c1 100644
--- a/src/compiler/scala/reflect/internal/Types.scala
+++ b/src/compiler/scala/reflect/internal/Types.scala
@@ -2484,8 +2484,9 @@ A type's typeSymbol should never be inspected directly.
// this <: tp.baseType(sym)
if (suspended) checkSubtype(tp, origin)
else if (constr.instValid) checkSubtype(tp, constr.inst) // type var is already set
- else isRelatable(tp) && {
- unifySimple || unifyFull(tp) || unifyFull(tp.dealias) || unifyFull(tp.widen) || unifyParents
+ else isRelatable(tp) && { // gradually let go of some type precision in hopes of finding a type that has the same shape as the type variable
+ // okay, this just screams "CLEAN ME UP" -- I think we could use tp.widen instead of tp straight from the get-go in registerBound, since we don't infer singleton types anyway (but maybe that'll change?)
+ unifySimple || unifyFull(tp) || unifyFull(tp.dealias) || unifyFull(tp.widen) || unifyFull(tp.widen.dealias) || unifyParents
}
}