@@ -124,7 +124,6 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
124
124
private [this ] var hd : A = _
125
125
private [this ] var hdDefined : Boolean = false
126
126
127
-
128
127
def head : A = {
129
128
if (! hdDefined) {
130
129
hd = next()
@@ -161,12 +160,12 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
161
160
162
161
require(size >= 1 && step >= 1 , f " size= $size%d and step= $step%d, but both must be positive " )
163
162
164
- private [this ] var buffer : Array [B ] = null // current result
165
- private [this ] var prev : Array [B ] = null // if sliding, overlap from previous result
163
+ private [this ] var buffer : Array [B ] | Null = null // current result
164
+ private [this ] var prev : Array [B ] | Null = null // if sliding, overlap from previous result
166
165
private [this ] var first = true // if !first, advancing may skip ahead
167
166
private [this ] var filled = false // whether the buffer is "hot"
168
167
private [this ] var partial = true // whether to emit partial sequence
169
- private [this ] var padding : () -> B = null // what to pad short sequences with
168
+ private [this ] var padding : (( ) -> B ) | Null = null // what to pad short sequences with
170
169
private [this ] def pad = padding != null // irrespective of partial flag
171
170
private [this ] def newBuilder = {
172
171
val b = ArrayBuilder .make[Any ]
@@ -189,7 +188,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
189
188
* @note This method is mutually exclusive with `withPartial`.
190
189
* @group Configuration
191
190
*/
192
- def withPadding (x : - > B ): this .type = {
191
+ def withPadding (x : = > B ): this .type = {
193
192
padding = () => x
194
193
partial = true // redundant, as padding always results in complete segment
195
194
this
@@ -230,7 +229,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
230
229
val builder = newBuilder
231
230
var done = false
232
231
// keep prefix of previous buffer if stepping
233
- if (prev != null ) builder.addAll(prev)
232
+ if (prev != null ) builder.addAll(prev.nn )
234
233
// skip ahead
235
234
if (! first && step > size) {
236
235
var dropping = step - size
@@ -251,7 +250,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
251
250
if (index < size && pad) {
252
251
builder.sizeHint(size)
253
252
while (index < size) {
254
- builder.addOne(padding())
253
+ builder.addOne(padding.nn ())
255
254
index += 1
256
255
}
257
256
}
@@ -275,11 +274,11 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
275
274
filled = false
276
275
// if stepping, retain overlap in prev
277
276
if (step < size) {
278
- if (first) prev = buffer.drop(step)
279
- else if (buffer.length == size) Array .copy(src = buffer, srcPos = step, dest = prev, destPos = 0 , length = size - step)
277
+ if (first) prev = buffer.nn. drop(step)
278
+ else if (buffer.nn. length == size) Array .copy(src = buffer.nn , srcPos = step, dest = prev.nn , destPos = 0 , length = size - step)
280
279
else prev = null
281
280
}
282
- val res = immutable.ArraySeq .unsafeWrapArray(buffer).asInstanceOf [immutable.ArraySeq [B ]]
281
+ val res = immutable.ArraySeq .unsafeWrapArray(buffer.nn ).asInstanceOf [immutable.ArraySeq [B ]]
283
282
buffer = null
284
283
first = false
285
284
res
@@ -702,7 +701,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
702
701
* handling of structural calls. It's not what's intended here.
703
702
*/
704
703
final class Leading extends AbstractIterator [A ] {
705
- private [this ] var lookahead : mutable.Queue [A ] = null
704
+ private [this ] var lookahead : mutable.Queue [A ] | Null = null
706
705
private [this ] var hd : A = _
707
706
/* Status is kept with magic numbers
708
707
* 1 means next element is in hd and we're still reading into this iterator
@@ -713,10 +712,10 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
713
712
private [this ] var status = 0
714
713
private def store (a : A ): Unit = {
715
714
if (lookahead == null ) lookahead = new mutable.Queue [A ]
716
- lookahead += a
715
+ lookahead.nn += a
717
716
}
718
717
def hasNext = {
719
- if (status < 0 ) (lookahead ne null ) && lookahead.nonEmpty
718
+ if (status < 0 ) (lookahead ne null ) && lookahead.nn. nonEmpty
720
719
else if (status > 0 ) true
721
720
else {
722
721
if (self.hasNext) {
@@ -730,7 +729,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
730
729
def next () = {
731
730
if (hasNext) {
732
731
if (status == 1 ) { status = 0 ; hd }
733
- else lookahead.dequeue()
732
+ else lookahead.nn. dequeue()
734
733
}
735
734
else Iterator .empty.next()
736
735
}
@@ -757,7 +756,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
757
756
val leading = new Leading
758
757
759
758
val trailing = new AbstractIterator [A ] {
760
- private [this ] var myLeading = leading
759
+ private [this ] var myLeading : Leading | Null = leading
761
760
/* Status flag meanings:
762
761
* -1 not yet accessed
763
762
* 0 single element waiting in leading
@@ -772,13 +771,13 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
772
771
case 1 => if (self.hasNext) { status = 2 ; true } else { status = 3 ; false }
773
772
case 0 => true
774
773
case _ =>
775
- if (myLeading.finish()) { status = 0 ; true } else { status = 1 ; myLeading = null ; hasNext }
774
+ if (myLeading.nn. finish()) { status = 0 ; true } else { status = 1 ; myLeading = null ; hasNext }
776
775
}
777
776
def next () = {
778
777
if (hasNext) {
779
778
if (status == 0 ) {
780
779
status = 1
781
- val res = myLeading.trailer
780
+ val res = myLeading.nn. trailer
782
781
myLeading = null
783
782
res
784
783
} else {
@@ -873,7 +872,7 @@ trait Iterator[+A] extends IterableOnce[A] with IterableOnceOps[A, Iterator, Ite
873
872
*/
874
873
def duplicate : (Iterator [A ]^ {this }, Iterator [A ]^ {this }) = {
875
874
val gap = new scala.collection.mutable.Queue [A ]
876
- var ahead : Iterator [A ]^ = null
875
+ var ahead : ( Iterator [A ]^ ) | Null = null
877
876
class Partner extends AbstractIterator [A ] {
878
877
override def knownSize : Int = self.synchronized {
879
878
val thisSize = self.knownSize
@@ -1149,10 +1148,13 @@ object Iterator extends IterableFactory[Iterator] {
1149
1148
/** Creates an iterator to which other iterators can be appended efficiently.
1150
1149
* Nested ConcatIterators are merged to avoid blowing the stack.
1151
1150
*/
1152
- private final class ConcatIterator [+ A ](val from : Iterator [A @ uncheckedVariance]^ ) extends AbstractIterator [A ] {
1153
- private var current : Iterator [A ]^ {from} = from
1154
- private var tail : ConcatIteratorCell [A @ uncheckedVariance] = null
1155
- private var last : ConcatIteratorCell [A @ uncheckedVariance] = null
1151
+ private final class ConcatIterator [+ A ](val from : (Iterator [A @ uncheckedVariance]^ ) | Null ) extends AbstractIterator [A ] {
1152
+ @ annotation.stableNull
1153
+ private var current : Iterator [A ]^ {from} | Null = from
1154
+ @ annotation.stableNull
1155
+ private var tail : ConcatIteratorCell [A @ uncheckedVariance] | Null = null
1156
+ @ annotation.stableNull
1157
+ private var last : ConcatIteratorCell [A @ uncheckedVariance] | Null = null
1156
1158
private var currentHasNextChecked = false
1157
1159
1158
1160
def hasNext =
@@ -1171,7 +1173,7 @@ object Iterator extends IterableFactory[Iterator] {
1171
1173
currentHasNextChecked = c.currentHasNextChecked
1172
1174
if (c.tail != null ) {
1173
1175
if (last == null ) last = c.last
1174
- c.last.tail = tail
1176
+ c.last.nn. tail = tail
1175
1177
tail = c.tail
1176
1178
}
1177
1179
merge()
@@ -1186,9 +1188,9 @@ object Iterator extends IterableFactory[Iterator] {
1186
1188
false
1187
1189
}
1188
1190
else {
1189
- current = tail.headIterator
1190
- if (last eq tail) last = last.tail
1191
- tail = tail.tail
1191
+ current = tail.nn. headIterator
1192
+ if (last eq tail) last = last.nn. tail
1193
+ tail = tail.nn. tail
1192
1194
merge()
1193
1195
if (currentHasNextChecked) true
1194
1196
else if (current != null && current.hasNext) {
@@ -1203,7 +1205,7 @@ object Iterator extends IterableFactory[Iterator] {
1203
1205
def next () =
1204
1206
if (hasNext) {
1205
1207
currentHasNextChecked = false
1206
- current.next()
1208
+ current.nn. next()
1207
1209
} else Iterator .empty.next()
1208
1210
1209
1211
override def concat [B >: A ](that : => IterableOnce [B ]^ ): Iterator [B ]^ {this , that} = {
@@ -1213,15 +1215,15 @@ object Iterator extends IterableFactory[Iterator] {
1213
1215
last = c
1214
1216
}
1215
1217
else {
1216
- last.tail = c
1218
+ last.nn. tail = c
1217
1219
last = c
1218
1220
}
1219
1221
if (current == null ) current = Iterator .empty
1220
1222
this
1221
1223
}
1222
1224
}
1223
1225
1224
- private [this ] final class ConcatIteratorCell [A ](head : => IterableOnce [A ]^ , var tail : ConcatIteratorCell [A ]^ ) {
1226
+ private [this ] final class ConcatIteratorCell [A ](head : => IterableOnce [A ]^ , var tail : ( ConcatIteratorCell [A ]^ ) | Null ) {
1225
1227
def headIterator : Iterator [A ]^ {this } = head.iterator
1226
1228
}
1227
1229
@@ -1289,7 +1291,7 @@ object Iterator extends IterableFactory[Iterator] {
1289
1291
*/
1290
1292
private final class UnfoldIterator [A , S ](init : S )(f : S => Option [(A , S )]) extends AbstractIterator [A ] {
1291
1293
private [this ] var state : S = init
1292
- private [this ] var nextResult : Option [(A , S )] = null
1294
+ private [this ] var nextResult : Option [(A , S )] | Null = null
1293
1295
1294
1296
override def hasNext : Boolean = {
1295
1297
if (nextResult eq null ) {
@@ -1300,12 +1302,12 @@ object Iterator extends IterableFactory[Iterator] {
1300
1302
}
1301
1303
state = null .asInstanceOf [S ] // allow GC
1302
1304
}
1303
- nextResult.isDefined
1305
+ nextResult.nn. isDefined
1304
1306
}
1305
1307
1306
1308
override def next (): A = {
1307
1309
if (hasNext) {
1308
- val (value, newState) = nextResult.get
1310
+ val (value, newState) = nextResult.nn. get
1309
1311
state = newState
1310
1312
nextResult = null
1311
1313
value
0 commit comments