diff options
author | Martin Odersky <odersky@gmail.com> | 2013-10-13 13:14:39 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-10-13 13:14:39 +0200 |
commit | 0e88e6ffbaf4a9597793fa188e60d0e62a4af96b (patch) | |
tree | 4f96c8b4c498f703d699d21628c622076cf2b3db /src/dotty/tools/dotc/core/TyperState.scala | |
parent | 1f41bd2ff0770a3188186d38405f807dac5633b5 (diff) | |
download | dotty-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.scala | 18 |
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 } |