aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/TyperState.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-10-13 13:14:39 +0200
committerMartin Odersky <odersky@gmail.com>2013-10-13 13:14:39 +0200
commit0e88e6ffbaf4a9597793fa188e60d0e62a4af96b (patch)
tree4f96c8b4c498f703d699d21628c622076cf2b3db /src/dotty/tools/dotc/core/TyperState.scala
parent1f41bd2ff0770a3188186d38405f807dac5633b5 (diff)
downloaddotty-0e88e6ffbaf4a9597793fa188e60d0e62a4af96b.tar.gz
dotty-0e88e6ffbaf4a9597793fa188e60d0e62a4af96b.tar.bz2
dotty-0e88e6ffbaf4a9597793fa188e60d0e62a4af96b.zip
Fixes to typevar instantiation
… with associatiated fixes and tightening of typestate consistency checking.
Diffstat (limited to 'src/dotty/tools/dotc/core/TyperState.scala')
-rw-r--r--src/dotty/tools/dotc/core/TyperState.scala18
1 files changed, 10 insertions, 8 deletions
diff --git a/src/dotty/tools/dotc/core/TyperState.scala b/src/dotty/tools/dotc/core/TyperState.scala
index 8ee219cec..a4663f824 100644
--- a/src/dotty/tools/dotc/core/TyperState.scala
+++ b/src/dotty/tools/dotc/core/TyperState.scala
@@ -50,7 +50,7 @@ extends TyperState(reporter) {
private var myConstraint: Constraint = previous.constraint
private var myUndetVars: Set[TypeVar] = previous.undetVars
private var myInstType: SimpleMap[TypeVar, Type] = previous.instType
- private var checkingEnabled: Boolean = committable
+ private var checkingEnabled: Boolean = true
override def constraint = myConstraint
override def undetVars = myUndetVars
@@ -103,12 +103,14 @@ extends TyperState(reporter) {
def checkConsistent(show: Showable => String = MutableTyperState.toStr): Unit = if (checkingEnabled) {
def err(msg: String, what: Showable) = s"$msg: ${show(what)}\n${show(this)}"
for (tvar <- undetVars)
- assert(constraint(tvar.origin).exists, err("unconstrained type var", tvar))
- val undetParams = undetVars map (_.origin)
- for (param <- constraint.domainParams)
- assert(undetParams contains param, err("junk constraint on", param))
- instType.foreachKey { tvar =>
- assert(undetVars contains tvar, err("junk instType on", tvar))
+ assert(constraint(tvar.origin).exists, err("unconstrained type var", tvar.origin))
+ if (committable) {
+ val undetParams = undetVars map (_.origin)
+ for (param <- constraint.domainParams)
+ assert(undetParams contains param, err("junk constraint on", param))
+ instType.foreachKey { tvar =>
+ assert(!(undetVars contains tvar), err("duplicate undetVar and instType", tvar))
+ }
}
}
@@ -118,7 +120,7 @@ extends TyperState(reporter) {
@elidable(elidable.FINER)
override def enableChecking(b: Boolean) = {
val prev = checkingEnabled
- checkingEnabled = checkingEnabled && b
+ checkingEnabled = b
prev
}