summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-04-27 17:02:30 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-04-27 17:02:30 +0200
commitca9003e453873c496c72c431f0e5f9f3eaf31511 (patch)
tree8f135b9e3a259f2b2106f86e677aeafc75f22c41
parent57b6b90af6218e96cb554e9563199d7889c0004a (diff)
parentc13f5a41a0e09add04eabbe9769e916ee22eccd8 (diff)
downloadscala-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.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)
+}