diff options
author | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-04-25 13:41:33 +0200 |
---|---|---|
committer | Grzegorz Kossakowski <grzegorz.kossakowski@gmail.com> | 2014-04-25 13:41:33 +0200 |
commit | c13f5a41a0e09add04eabbe9769e916ee22eccd8 (patch) | |
tree | d402575def436adea5040b0fb6e1f34527afc1a3 | |
parent | cac6383e6658dc5956540b76b9b46c3b664774ac (diff) | |
download | scala-c13f5a41a0e09add04eabbe9769e916ee22eccd8.tar.gz scala-c13f5a41a0e09add04eabbe9769e916ee22eccd8.tar.bz2 scala-c13f5a41a0e09add04eabbe9769e916ee22eccd8.zip |
Use named class for UndoPair.
Use specific, named class for UndoPair instead of generic Tuple2. This
makes analysis of heap dumps much easier because profilers let you inspect
memory consumption on per-class basis.
The UndoPair case class is defined in companion object to not hold an
outer pointer reference.
-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) +} |