Skip to content

Commit 19c42ee

Browse files
bracevachamzaremmal
authored andcommitted
Fix: adapt scala2-library-cc to Scala 2 semantics
1 parent 78c7473 commit 19c42ee

File tree

3 files changed

+13
-9
lines changed

3 files changed

+13
-9
lines changed

scala2-library-cc/src/scala/collection/concurrent/TrieMap.scala

+2-1
Original file line numberDiff line numberDiff line change
@@ -1071,6 +1071,7 @@ object TrieMap extends MapFactory[TrieMap] {
10711071

10721072
// non-final as an extension point for parallel collections
10731073
private[collection] class TrieMapIterator[K, V](var level: Int, private var ct: TrieMap[K, V], mustInit: Boolean = true) extends AbstractIterator[(K, V)] {
1074+
this:TrieMapIterator[K, V]^ =>
10741075
private val stack = new Array[Array[BasicNode]](7)
10751076
private val stackpos = new Array[Int](7)
10761077
private var depth = -1
@@ -1161,7 +1162,7 @@ private[collection] class TrieMapIterator[K, V](var level: Int, private var ct:
11611162
/** Returns a sequence of iterators over subsets of this iterator.
11621163
* It's used to ease the implementation of splitters for a parallel version of the TrieMap.
11631164
*/
1164-
protected def subdivide(): Seq[Iterator[(K, V)]] = if (subiter ne null) {
1165+
protected def subdivide(): Seq[Iterator[(K, V)]^{this}] = if (subiter ne null) {
11651166
// the case where an LNode is being iterated
11661167
val it = newIterator(level + 1, ct, _mustInit = false)
11671168
it.depth = -1

scala2-library-cc/src/scala/collection/immutable/Range.scala

+2-1
Original file line numberDiff line numberDiff line change
@@ -643,6 +643,7 @@ private class RangeIterator(
643643
lastElement: Int,
644644
initiallyEmpty: Boolean
645645
) extends AbstractIterator[Int] with Serializable {
646+
this: RangeIterator^ =>
646647
private[this] var _hasNext: Boolean = !initiallyEmpty
647648
private[this] var _next: Int = start
648649
override def knownSize: Int = if (_hasNext) (lastElement - _next) / step + 1 else 0
@@ -656,7 +657,7 @@ private class RangeIterator(
656657
value
657658
}
658659

659-
override def drop(n: Int): Iterator[Int] = {
660+
override def drop(n: Int): Iterator[Int]^{this} = {
660661
if (n > 0) {
661662
val longPos = _next.toLong + step * n
662663
if (step > 0) {

scala2-library-cc/src/scala/collection/mutable/UnrolledBuffer.scala

+9-7
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import scala.collection.generic.DefaultSerializable
1818
import scala.reflect.ClassTag
1919
import scala.collection.immutable.Nil
2020
import language.experimental.captureChecking
21+
import caps.unsafe.unsafeAssumePure
2122

2223
/** A buffer that stores elements in an unrolled linked list.
2324
*
@@ -259,13 +260,14 @@ object UnrolledBuffer extends StrictOptimizedClassTagSeqFactory[UnrolledBuffer]
259260
/** Unrolled buffer node.
260261
*/
261262
class Unrolled[T: ClassTag] private[collection] (var size: Int, var array: Array[T], var next: Unrolled[T], val buff: UnrolledBuffer[T] = null) {
263+
//this: Unrolled[T]^ =>
262264
private[collection] def this() = this(0, new Array[T](unrolledlength), null, null)
263265
private[collection] def this(b: UnrolledBuffer[T]) = this(0, new Array[T](unrolledlength), null, b)
264266

265267
private def nextlength = if (buff eq null) unrolledlength else buff.calcNextLength(array.length)
266268

267269
// adds and returns itself or the new unrolled if full
268-
@tailrec final def append(elem: T): Unrolled[T] = if (size < array.length) {
270+
@tailrec final def append(elem: T): Unrolled[T]^{this} = if (size < array.length) {
269271
array(size) = elem
270272
size += 1
271273
this
@@ -307,21 +309,21 @@ object UnrolledBuffer extends StrictOptimizedClassTagSeqFactory[UnrolledBuffer]
307309
if (idx < size) array(idx) else next.apply(idx - size)
308310
@tailrec final def update(idx: Int, newelem: T): Unit =
309311
if (idx < size) array(idx) = newelem else next.update(idx - size, newelem)
310-
@tailrec final def locate(idx: Int): Unrolled[T] =
312+
@tailrec final def locate(idx: Int): Unrolled[T]^{this} =
311313
if (idx < size) this else next.locate(idx - size)
312-
def prepend(elem: T) = if (size < array.length) {
314+
def prepend(elem: T): Unrolled[T] = if (size < array.length) {
313315
// shift the elements of the array right
314316
// then insert the element
315317
shiftright()
316318
array(0) = elem
317319
size += 1
318-
this
320+
this.unsafeAssumePure
319321
} else {
320322
// allocate a new node and store element
321323
// then make it point to this
322324
val newhead = new Unrolled[T](buff)
323325
newhead append elem
324-
newhead.next = this
326+
newhead.next = this.unsafeAssumePure
325327
newhead
326328
}
327329
// shifts right assuming enough space
@@ -340,7 +342,7 @@ object UnrolledBuffer extends StrictOptimizedClassTagSeqFactory[UnrolledBuffer]
340342
val r = array(idx)
341343
shiftleft(idx)
342344
size -= 1
343-
if (tryMergeWithNext()) buffer.lastPtr = this
345+
if (tryMergeWithNext()) buffer.lastPtr = this.unsafeAssumePure
344346
r
345347
} else next.remove(idx - size, buffer)
346348

@@ -397,7 +399,7 @@ object UnrolledBuffer extends StrictOptimizedClassTagSeqFactory[UnrolledBuffer]
397399
curr.next = newnextnode
398400

399401
// try to merge the last node of this with the newnextnode and fix tail pointer if needed
400-
if (curr.tryMergeWithNext()) buffer.lastPtr = curr
402+
if (curr.tryMergeWithNext()) buffer.lastPtr = curr.unsafeAssumePure
401403
else if (newnextnode.next eq null) buffer.lastPtr = newnextnode
402404
appended
403405
}

0 commit comments

Comments
 (0)