summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-04-25 13:41:33 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-04-25 13:41:33 +0200
commitc13f5a41a0e09add04eabbe9769e916ee22eccd8 (patch)
treed402575def436adea5040b0fb6e1f34527afc1a3 /src/reflect
parentcac6383e6658dc5956540b76b9b46c3b664774ac (diff)
downloadscala-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.
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/tpe/TypeConstraints.scala13
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)
+}