diff options
author | Martin Odersky <odersky@gmail.com> | 2014-08-14 10:27:43 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-08-16 11:56:58 +0200 |
commit | 90aef309eaf72ab0c09494eb030c57789955bb21 (patch) | |
tree | df3b29d9f0e3d527ff49761f905737424896040d /src/dotty/tools/dotc/transform/TreeChecker.scala | |
parent | 7d414eb69b28fa0f6855168aa7afe43a75b3f23e (diff) | |
download | dotty-90aef309eaf72ab0c09494eb030c57789955bb21.tar.gz dotty-90aef309eaf72ab0c09494eb030c57789955bb21.tar.bz2 dotty-90aef309eaf72ab0c09494eb030c57789955bb21.zip |
Moved -Ycheck after Splitter
This required a change in Ycheck where we now only test that the new tree has a subtype of the old
one. Previously the requirement was "same type" but this caused "sigs.scala" to fail because
a new tree had a constant Int type where the old tree had just Int as the type. It's hard to guard
against these narrowings and they look harmless.
Diffstat (limited to 'src/dotty/tools/dotc/transform/TreeChecker.scala')
-rw-r--r-- | src/dotty/tools/dotc/transform/TreeChecker.scala | 17 |
1 files changed, 6 insertions, 11 deletions
diff --git a/src/dotty/tools/dotc/transform/TreeChecker.scala b/src/dotty/tools/dotc/transform/TreeChecker.scala index 87e84e169..e22edf4df 100644 --- a/src/dotty/tools/dotc/transform/TreeChecker.scala +++ b/src/dotty/tools/dotc/transform/TreeChecker.scala @@ -45,23 +45,18 @@ class TreeChecker { promote(tree) case _ => val tree1 = super.typed(tree, pt) - def sameType(tp1: Type, tp2: Type) = + def isSubType(tp1: Type, tp2: Type) = (tp1 eq tp2) || // accept NoType / NoType - (tp1 =:= tp2) - def divergenceMsg = { - def explanation(tp1: Type, tp2: Type) = - if (tp1 <:< tp2) "" - else "\n why different:\n" + core.TypeComparer.explained((tp1 <:< tp2)(_)) + (tp1 <:< tp2) + def divergenceMsg(tp1: Type, tp2: Type) = s"""Types differ |Original type : ${tree.typeOpt.show} |After checking: ${tree1.tpe.show} |Original tree : ${tree.show} |After checking: ${tree1.show} - """.stripMargin + - explanation(tree1.tpe, tree.typeOpt) + - explanation(tree.typeOpt, tree1.tpe) - } - assert(sameType(tree1.tpe, tree.typeOpt), divergenceMsg) + |Why different : + """.stripMargin + core.TypeComparer.explained((tp1 <:< tp2)(_)) + assert(isSubType(tree1.tpe, tree.typeOpt), divergenceMsg(tree1.tpe, tree.typeOpt)) tree1 } } catch { |