diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-04-27 17:02:30 +0200 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-04-27 17:02:30 +0200 |
commit | ca9003e453873c496c72c431f0e5f9f3eaf31511 (patch) | |
tree | 8f135b9e3a259f2b2106f86e677aeafc75f22c41 | |
parent | 57b6b90af6218e96cb554e9563199d7889c0004a (diff) | |
parent | c13f5a41a0e09add04eabbe9769e916ee22eccd8 (diff) | |
download | scala-ca9003e453873c496c72c431f0e5f9f3eaf31511.tar.gz scala-ca9003e453873c496c72c431f0e5f9f3eaf31511.tar.bz2 scala-ca9003e453873c496c72c431f0e5f9f3eaf31511.zip |
Merge pull request #3702 from gkossakowski/undoPairs
Use named class for UndoPair.
-rw-r--r-- | src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala b/src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala index 564cbb1ce3..c1c43178e5 100644 --- a/src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala +++ b/src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala @@ -16,8 +16,9 @@ private[internal] trait TypeConstraints { private lazy val _undoLog = new UndoLog def undoLog = _undoLog + import TypeConstraints.UndoPair class UndoLog extends Clearable { - private type UndoPairs = List[(TypeVar, TypeConstraint)] + type UndoPairs = List[UndoPair[TypeVar, TypeConstraint]] //OPT this method is public so we can do `manual inlining` var log: UndoPairs = List() @@ -29,7 +30,7 @@ private[internal] trait TypeConstraints { def undoTo(limit: UndoPairs) { assertCorrectThread() while ((log ne limit) && log.nonEmpty) { - val (tv, constr) = log.head + val UndoPair(tv, constr) = log.head tv.constr = constr log = log.tail } @@ -40,7 +41,7 @@ private[internal] trait TypeConstraints { * which is already synchronized. */ private[reflect] def record(tv: TypeVar) = { - log ::= ((tv, tv.constr.cloneInternal)) + log ::= UndoPair(tv, tv.constr.cloneInternal) } def clear() { @@ -266,3 +267,9 @@ private[internal] trait TypeConstraints { tvars forall (tv => tv.instWithinBounds || util.andFalse(logBounds(tv))) } } + +private[internal] object TypeConstraints { + // UndoPair is declared in companion object to not hold an outer pointer reference + final case class UndoPair[TypeVar <: SymbolTable#TypeVar, + TypeConstraint <: TypeConstraints#TypeConstraint](tv: TypeVar, tConstraint: TypeConstraint) +} |