Skip to content

Commit dd71307

Browse files
authored
Merge pull request scala#10811 from scalacenter/tasty/upgrade-3.5.0
Support Scala 3.5.0-RC4 in TASTy Reader
2 parents 35019a6 + db596f5 commit dd71307

24 files changed

+245
-138
lines changed

project/DottySupport.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import sbt.librarymanagement.{
1212
* Settings to support validation of TastyUnpickler against the release of dotty with the matching TASTy version
1313
*/
1414
object TastySupport {
15-
val supportedTASTyRelease = "3.4.2" // TASTY: 28.4-0
15+
val supportedTASTyRelease = "3.5.0-RC4" // TASTY: 28.5-1
1616
val scala3Compiler = "org.scala-lang" % "scala3-compiler_3" % supportedTASTyRelease
1717
val scala3Library = "org.scala-lang" % "scala3-library_3" % supportedTASTyRelease
1818

src/compiler/scala/tools/nsc/tasty/TastyUnpickler.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,9 @@ object TastyUnpickler {
7171
/** When Scala 3 is in an RC phase for a new minor version, we put here the TASTy of that Minor,
7272
* otherwise it should be empty.
7373
*/
74-
final val toolOverrides: List[TastyVersion] = Nil
74+
final val toolOverrides: List[TastyVersion] = List(
75+
TastyVersion(28, 5, 1) // 3.5.0-RC4 // TODO: remove this when 3.5.0 is released
76+
)
7577

7678
private def asScala3Compiler(version: TastyVersion): String =
7779
if (version.major == 28) {

src/compiler/scala/tools/nsc/tasty/TreeUnpickler.scala

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,10 @@ class TreeUnpickler[Tasty <: TastyUniverse](
409409
case METHODtype => readMethodic(MethodTermLambda, FlagSets.parseMethod, id)
410410
case TYPELAMBDAtype => readMethodic(HKTypeLambda, FlagSets.addDeferred, _.toTypeName)
411411
case PARAMtype => defn.ParamRef(readTypeRef(), readNat()) // reference to a parameter within a LambdaType
412+
case FLEXIBLEtype =>
413+
// dotty would wrap the inner type in FlexibleType (with lower bound >: tpe | Null),
414+
// but we can leave as-is - as Scala 2 does not have explicit nulls.
415+
readType()
412416
}
413417
assert(currentAddr === end, s"$start $currentAddr $end ${astTagToString(tag)}")
414418
result
@@ -694,6 +698,7 @@ class TreeUnpickler[Tasty <: TastyUniverse](
694698
case EXPORTED => addFlag(Exported)
695699
case OPEN => addFlag(Open)
696700
case INVISIBLE => addFlag(Invisible)
701+
case TRACKED => addFlag(Tracked)
697702
case PRIVATEqualified =>
698703
readByte()
699704
privateWithin = readWithin(ctx)
@@ -882,7 +887,7 @@ class TreeUnpickler[Tasty <: TastyUniverse](
882887
def TypeDef(repr: TastyRepr, localCtx: Context)(implicit ctx: Context): Unit = {
883888
val allowedShared = Enum | Opaque | Infix | Given
884889
val allowedTypeFlags = allowedShared | Exported
885-
val allowedClassFlags = allowedShared | Open | Transparent
890+
val allowedClassFlags = allowedShared | Open | Transparent | Tracked
886891
if (sym.isClass) {
887892
checkUnsupportedFlags(repr.unsupportedFlags &~ allowedClassFlags)
888893
sym.owner.ensureCompleted(CompleteOwner)
@@ -905,7 +910,7 @@ class TreeUnpickler[Tasty <: TastyUniverse](
905910
}
906911

907912
def TermParam(repr: TastyRepr, localCtx: Context)(implicit ctx: Context): Unit = {
908-
checkUnsupportedFlags(repr.unsupportedFlags &~ (ParamAlias | Exported | Given))
913+
checkUnsupportedFlags(repr.unsupportedFlags &~ (ParamAlias | Exported | Given | Tracked))
909914
val tpt = readTpt()(localCtx)
910915
ctx.setInfo(sym,
911916
if (nothingButMods(end) && sym.not(ParamSetter)) tpt.tpe
@@ -1220,19 +1225,23 @@ class TreeUnpickler[Tasty <: TastyUniverse](
12201225
exprReader.readTerm()
12211226
}
12221227
else unsupportedTermTreeError("block expression")
1223-
case ASSIGN => unsupportedTermTreeError("assignment expression")
1224-
case LAMBDA => unsupportedTermTreeError("anonymous function literal")
1225-
case MATCH => unsupportedTermTreeError("match expression")
1226-
case RETURN => unsupportedTermTreeError("return statement")
1227-
case WHILE => unsupportedTermTreeError("loop statement")
1228-
case TRY => unsupportedTermTreeError("try expression")
1229-
case BIND => unsupportedTermTreeError("bind pattern")
1230-
case ALTERNATIVE => unsupportedTermTreeError("pattern alternative")
1231-
case UNAPPLY => unsupportedTermTreeError("unapply pattern")
1232-
case INLINED => unsupportedTermTreeError("inlined expression")
1233-
case SELECTouter => metaprogrammingIsUnsupported // only within inline
1234-
case HOLE => abortMacroHole
1235-
case _ => readPathTerm()
1228+
case ASSIGN => unsupportedTermTreeError("assignment expression")
1229+
case LAMBDA => unsupportedTermTreeError("anonymous function literal")
1230+
case MATCH => unsupportedTermTreeError("match expression")
1231+
case RETURN => unsupportedTermTreeError("return statement")
1232+
case WHILE => unsupportedTermTreeError("loop statement")
1233+
case TRY => unsupportedTermTreeError("try expression")
1234+
case BIND => unsupportedTermTreeError("bind pattern")
1235+
case ALTERNATIVE => unsupportedTermTreeError("pattern alternative")
1236+
case UNAPPLY => unsupportedTermTreeError("unapply pattern")
1237+
case INLINED => unsupportedTermTreeError("inlined expression")
1238+
case SELECTouter => metaprogrammingIsUnsupported // only within inline
1239+
case QUOTE => abortQuote
1240+
case SPLICE => abortSplice
1241+
case QUOTEPATTERN => abortQuotePattern
1242+
case SPLICEPATTERN => abortSplicePattern
1243+
case HOLE => abortMacroHole
1244+
case _ => readPathTerm()
12361245
}
12371246
assert(currentAddr === end, s"$start $currentAddr $end ${astTagToString(tag)}")
12381247
result
@@ -1265,6 +1274,10 @@ class TreeUnpickler[Tasty <: TastyUniverse](
12651274
* A HOLE should never appear in TASTy for a top level class, only in quotes.
12661275
*/
12671276
private def abortMacroHole[T]: T = abortWith(msg = "Scala 3 macro hole in pickled TASTy")
1277+
private def abortQuote[T]: T = abortWith(msg = "Scala 3 quoted expression in pickled TASTy")
1278+
private def abortSplice[T]: T = abortWith(msg = "Scala 3 quoted splice in pickled TASTy")
1279+
private def abortQuotePattern[T]: T = abortWith(msg = "Scala 3 quoted pattern in pickled TASTy")
1280+
private def abortSplicePattern[T]: T = abortWith(msg = "Scala 3 quoted pattern splice in pickled TASTy")
12681281

12691282
private def signaturePolymorphicIsUnsupported[T](implicit ctx: Context): T =
12701283
unsupportedTermTreeError("signature polymorphic application")

src/compiler/scala/tools/nsc/tasty/bridge/FlagOps.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ trait FlagOps { self: TastyUniverse =>
2626

2727
val TastyOnlyFlags: TastyFlagSet = (
2828
Erased | Inline | InlineProxy | Opaque | Extension | Given | Exported | Transparent
29-
| Enum | Infix | Open | ParamAlias | Invisible
29+
| Enum | Infix | Open | ParamAlias | Invisible | Tracked
3030
)
3131

3232
type FlagParser = TastyFlagSet => Context => TastyFlagSet
@@ -139,6 +139,7 @@ trait FlagOps { self: TastyUniverse =>
139139
if (flags.is(ParamAlias)) sb += "<paramalias>"
140140
if (flags.is(Infix)) sb += "infix"
141141
if (flags.is(Invisible)) sb += "<invisible>"
142+
if (flags.is(Tracked)) sb += "<tracked>"
142143
sb.mkString(" | ")
143144
}
144145
}

src/compiler/scala/tools/tasty/TastyFlags.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ object TastyFlags {
6060
final val ParamAlias = Open.next
6161
final val Infix = ParamAlias.next
6262
final val Invisible = Infix.next
63+
final val Tracked = Invisible.next
6364

6465
def optFlag(cond: Boolean)(flag: TastyFlagSet): TastyFlagSet = if (cond) flag else EmptyTastyFlags
6566

@@ -125,6 +126,7 @@ object TastyFlags {
125126
if (is(ParamAlias)) sb += "ParamAlias"
126127
if (is(Infix)) sb += "Infix"
127128
if (is(Invisible)) sb += "Invisible"
129+
if (is(Tracked)) sb += "Tracked"
128130
sb.mkString(" | ")
129131
}
130132
}

src/compiler/scala/tools/tasty/TastyFormat.scala

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
package scala.tools.tasty
1414

15-
// revision: https://github.com/scala/scala3/commit/0938fe5603a17c7c786ac8fc6118a9d5d8b257de
15+
// revision: https://github.com/scala/scala3/commit/5189e6854ad1dacc3454542c2f124f5bcb7e2a9c
1616
object TastyFormat {
1717

1818
/** The first four bytes of a TASTy file, followed by four values:
@@ -34,9 +34,9 @@ object TastyFormat {
3434
/** Natural number. Each increment of the `MinorVersion`, within
3535
* a series declared by the `MajorVersion`, breaks forward
3636
* compatibility, but remains backwards compatible, with all
37-
* preceeding `MinorVersion`.
37+
* preceding `MinorVersion`.
3838
*/
39-
final val MinorVersion: Int = 4
39+
final val MinorVersion: Int = 5
4040

4141
/** Natural Number. The `ExperimentalVersion` allows for
4242
* experimentation with changes to TASTy without committing
@@ -222,6 +222,7 @@ object TastyFormat {
222222
final val INVISIBLE = 44
223223
final val EMPTYCLAUSE = 45
224224
final val SPLITCLAUSE = 46
225+
final val TRACKED = 47
225226

226227
// Tree Cat. 2: tag Nat
227228
final val firstNatTreeTag = SHAREDterm
@@ -261,7 +262,6 @@ object TastyFormat {
261262
final val EXPLICITtpt = 103
262263
final val ELIDED = 104
263264

264-
265265
// Tree Cat. 4: tag Nat AST
266266
final val firstNatASTTreeTag = IDENT
267267
final val IDENT = 110
@@ -327,14 +327,17 @@ object TastyFormat {
327327
final val TYPEREFin = 175
328328
final val SELECTin = 176
329329
final val EXPORT = 177
330-
// final val ??? = 178
331-
// final val ??? = 179
330+
final val QUOTE = 178
331+
final val SPLICE = 179
332332
final val METHODtype = 180
333333
final val APPLYsigpoly = 181
334+
final val QUOTEPATTERN = 182
335+
final val SPLICEPATTERN = 183
334336

335337
final val MATCHtype = 190
336338
final val MATCHtpt = 191
337339
final val MATCHCASEtype = 192
340+
final val FLEXIBLEtype = 193
338341

339342
final val HOLE = 255
340343

@@ -366,7 +369,7 @@ object TastyFormat {
366369
firstNatTreeTag <= tag && tag <= RENAMED ||
367370
firstASTTreeTag <= tag && tag <= BOUNDED ||
368371
firstNatASTTreeTag <= tag && tag <= NAMEDARG ||
369-
firstLengthTreeTag <= tag && tag <= MATCHCASEtype ||
372+
firstLengthTreeTag <= tag && tag <= FLEXIBLEtype ||
370373
tag == HOLE
371374

372375
def isParamTag(tag: Int): Boolean = tag == PARAM || tag == TYPEPARAM
@@ -411,7 +414,8 @@ object TastyFormat {
411414
| INVISIBLE
412415
| ANNOTATION
413416
| PRIVATEqualified
414-
| PROTECTEDqualified => true
417+
| PROTECTEDqualified
418+
| TRACKED => true
415419
case _ => false
416420
}
417421

@@ -568,11 +572,16 @@ object TastyFormat {
568572
case MATCHCASEtype => "MATCHCASEtype"
569573
case MATCHtpt => "MATCHtpt"
570574
case PARAMtype => "PARAMtype"
575+
case FLEXIBLEtype => "FLEXIBLEtype"
571576
case ANNOTATION => "ANNOTATION"
572577
case PRIVATEqualified => "PRIVATEqualified"
573578
case PROTECTEDqualified => "PROTECTEDqualified"
574579
case EXPLICITtpt => "EXPLICITtpt"
575580
case ELIDED => "ELIDED"
581+
case QUOTE => "QUOTE"
582+
case SPLICE => "SPLICE"
583+
case QUOTEPATTERN => "QUOTEPATTERN"
584+
case SPLICEPATTERN => "SPLICEPATTERN"
576585
case HOLE => "HOLE"
577586
}
578587

src/library/scala/Array.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ object Array {
5454
/**
5555
* Returns a new [[scala.collection.mutable.ArrayBuilder]].
5656
*/
57-
def newBuilder[T](implicit t: ClassTag[T]): ArrayBuilder[T] = ArrayBuilder.make[T](t)
57+
def newBuilder[T](implicit t: ClassTag[T]): ArrayBuilder[T] = ArrayBuilder.make[T](using t)
5858

5959
/** Build an array from the iterable collection.
6060
*

src/library/scala/collection/ArrayOps.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ final class ArrayOps[A](private val xs: Array[A]) extends AnyVal {
589589
val len = xs.length
590590
def boxed = if(len < ArrayOps.MaxStableSortLength) {
591591
val a = xs.clone()
592-
Sorting.stableSort(a)(ord.asInstanceOf[Ordering[A]])
592+
Sorting.stableSort(a)(using ord.asInstanceOf[Ordering[A]])
593593
a
594594
} else {
595595
val a = Array.copyAs[AnyRef](xs, len)(ClassTag.AnyRef)
@@ -1299,7 +1299,7 @@ final class ArrayOps[A](private val xs: Array[A]) extends AnyVal {
12991299
val bb = new ArrayBuilder.ofRef[Array[B]]()(ClassTag[Array[B]](aClass))
13001300
if (xs.length == 0) bb.result()
13011301
else {
1302-
def mkRowBuilder() = ArrayBuilder.make[B](ClassTag[B](aClass.getComponentType))
1302+
def mkRowBuilder() = ArrayBuilder.make[B](using ClassTag[B](aClass.getComponentType))
13031303
val bs = new ArrayOps(asArray(xs(0))).map((x: B) => mkRowBuilder())
13041304
for (xs <- this) {
13051305
var i = 0

src/library/scala/collection/Factory.scala

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -667,16 +667,16 @@ object ClassTagIterableFactory {
667667
* sound depending on the use of the `ClassTag` by the collection implementation. */
668668
@SerialVersionUID(3L)
669669
class AnyIterableDelegate[CC[_]](delegate: ClassTagIterableFactory[CC]) extends IterableFactory[CC] {
670-
def empty[A]: CC[A] = delegate.empty(ClassTag.Any).asInstanceOf[CC[A]]
671-
def from[A](it: IterableOnce[A]): CC[A] = delegate.from[Any](it)(ClassTag.Any).asInstanceOf[CC[A]]
672-
def newBuilder[A]: Builder[A, CC[A]] = delegate.newBuilder(ClassTag.Any).asInstanceOf[Builder[A, CC[A]]]
673-
override def apply[A](elems: A*): CC[A] = delegate.apply[Any](elems: _*)(ClassTag.Any).asInstanceOf[CC[A]]
674-
override def iterate[A](start: A, len: Int)(f: A => A): CC[A] = delegate.iterate[A](start, len)(f)(ClassTag.Any.asInstanceOf[ClassTag[A]])
675-
override def unfold[A, S](init: S)(f: S => Option[(A, S)]): CC[A] = delegate.unfold[A, S](init)(f)(ClassTag.Any.asInstanceOf[ClassTag[A]])
676-
override def range[A](start: A, end: A)(implicit i: Integral[A]): CC[A] = delegate.range[A](start, end)(i, ClassTag.Any.asInstanceOf[ClassTag[A]])
677-
override def range[A](start: A, end: A, step: A)(implicit i: Integral[A]): CC[A] = delegate.range[A](start, end, step)(i, ClassTag.Any.asInstanceOf[ClassTag[A]])
678-
override def fill[A](n: Int)(elem: => A): CC[A] = delegate.fill[Any](n)(elem)(ClassTag.Any).asInstanceOf[CC[A]]
679-
override def tabulate[A](n: Int)(f: Int => A): CC[A] = delegate.tabulate[Any](n)(f)(ClassTag.Any).asInstanceOf[CC[A]]
670+
def empty[A]: CC[A] = delegate.empty(using ClassTag.Any).asInstanceOf[CC[A]]
671+
def from[A](it: IterableOnce[A]): CC[A] = delegate.from[Any](it)(using ClassTag.Any).asInstanceOf[CC[A]]
672+
def newBuilder[A]: Builder[A, CC[A]] = delegate.newBuilder(using ClassTag.Any).asInstanceOf[Builder[A, CC[A]]]
673+
override def apply[A](elems: A*): CC[A] = delegate.apply[Any](elems: _*)(using ClassTag.Any).asInstanceOf[CC[A]]
674+
override def iterate[A](start: A, len: Int)(f: A => A): CC[A] = delegate.iterate[A](start, len)(f)(using ClassTag.Any.asInstanceOf[ClassTag[A]])
675+
override def unfold[A, S](init: S)(f: S => Option[(A, S)]): CC[A] = delegate.unfold[A, S](init)(f)(using ClassTag.Any.asInstanceOf[ClassTag[A]])
676+
override def range[A](start: A, end: A)(implicit i: Integral[A]): CC[A] = delegate.range[A](start, end)(using i, ClassTag.Any.asInstanceOf[ClassTag[A]])
677+
override def range[A](start: A, end: A, step: A)(implicit i: Integral[A]): CC[A] = delegate.range[A](start, end, step)(using i, ClassTag.Any.asInstanceOf[ClassTag[A]])
678+
override def fill[A](n: Int)(elem: => A): CC[A] = delegate.fill[Any](n)(elem)(using ClassTag.Any).asInstanceOf[CC[A]]
679+
override def tabulate[A](n: Int)(f: Int => A): CC[A] = delegate.tabulate[Any](n)(f)(using ClassTag.Any).asInstanceOf[CC[A]]
680680
}
681681
}
682682

src/library/scala/collection/Iterable.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ trait IterableOps[+A, +CC[_], +C] extends Any with IterableOnce[A] with Iterable
518518
* element (which may be the only element) will be smaller
519519
* if there are fewer than `size` elements remaining to be grouped.
520520
* @example `List(1, 2, 3, 4, 5).sliding(2, 2) = Iterator(List(1, 2), List(3, 4), List(5))`
521-
* @example `List(1, 2, 3, 4, 5, 6).sliding(2, 3) = Iterator(List(1, 2), List(4, 5))`
521+
* @example `List(1, 2, 3, 4, 5, 6).sliding(2, 3) = Iterator(List(1, 2), List(4, 5))`
522522
*/
523523
def sliding(size: Int, step: Int): Iterator[C] =
524524
iterator.sliding(size, step).map(fromSpecific)
@@ -708,7 +708,7 @@ trait IterableOps[+A, +CC[_], +C] extends Any with IterableOnce[A] with Iterable
708708
* @tparam A2 the element type of the second resulting collection
709709
* @param f the 'split function' mapping the elements of this $coll to an [[scala.util.Either]]
710710
*
711-
* @return a pair of ${coll}s: the first one made of those values returned by `f` that were wrapped in [[scala.util.Left]],
711+
* @return a pair of ${coll}s: the first one made of those values returned by `f` that were wrapped in [[scala.util.Left]],
712712
* and the second one made of those wrapped in [[scala.util.Right]].
713713
*/
714714
def partitionMap[A1, A2](f: A => Either[A1, A2]): (CC[A1], CC[A2]) = {
@@ -982,9 +982,9 @@ trait SortedSetFactoryDefaults[+A,
982982
+WithFilterCC[x] <: IterableOps[x, WithFilterCC, WithFilterCC[x]] with Set[x]] extends SortedSetOps[A @uncheckedVariance, CC, CC[A @uncheckedVariance]] {
983983
self: IterableOps[A, WithFilterCC, _] =>
984984

985-
override protected def fromSpecific(coll: IterableOnce[A @uncheckedVariance]): CC[A @uncheckedVariance] = sortedIterableFactory.from(coll)(ordering)
986-
override protected def newSpecificBuilder: mutable.Builder[A @uncheckedVariance, CC[A @uncheckedVariance]] = sortedIterableFactory.newBuilder[A](ordering)
987-
override def empty: CC[A @uncheckedVariance] = sortedIterableFactory.empty(ordering)
985+
override protected def fromSpecific(coll: IterableOnce[A @uncheckedVariance]): CC[A @uncheckedVariance] = sortedIterableFactory.from(coll)(using ordering)
986+
override protected def newSpecificBuilder: mutable.Builder[A @uncheckedVariance, CC[A @uncheckedVariance]] = sortedIterableFactory.newBuilder[A](using ordering)
987+
override def empty: CC[A @uncheckedVariance] = sortedIterableFactory.empty(using ordering)
988988

989989
override def withFilter(p: A => Boolean): SortedSetOps.WithFilter[A, WithFilterCC, CC] =
990990
new SortedSetOps.WithFilter[A, WithFilterCC, CC](this, p)
@@ -1036,9 +1036,9 @@ trait SortedMapFactoryDefaults[K, +V,
10361036
+UnsortedCC[x, y] <: Map[x, y]] extends SortedMapOps[K, V, CC, CC[K, V @uncheckedVariance]] with MapOps[K, V, UnsortedCC, CC[K, V @uncheckedVariance]] {
10371037
self: IterableOps[(K, V), WithFilterCC, _] =>
10381038

1039-
override def empty: CC[K, V @uncheckedVariance] = sortedMapFactory.empty(ordering)
1040-
override protected def fromSpecific(coll: IterableOnce[(K, V @uncheckedVariance)]): CC[K, V @uncheckedVariance] = sortedMapFactory.from(coll)(ordering)
1041-
override protected def newSpecificBuilder: mutable.Builder[(K, V @uncheckedVariance), CC[K, V @uncheckedVariance]] = sortedMapFactory.newBuilder[K, V](ordering)
1039+
override def empty: CC[K, V @uncheckedVariance] = sortedMapFactory.empty(using ordering)
1040+
override protected def fromSpecific(coll: IterableOnce[(K, V @uncheckedVariance)]): CC[K, V @uncheckedVariance] = sortedMapFactory.from(coll)(using ordering)
1041+
override protected def newSpecificBuilder: mutable.Builder[(K, V @uncheckedVariance), CC[K, V @uncheckedVariance]] = sortedMapFactory.newBuilder[K, V](using ordering)
10421042

10431043
override def withFilter(p: ((K, V)) => Boolean): collection.SortedMapOps.WithFilter[K, V, WithFilterCC, UnsortedCC, CC] =
10441044
new collection.SortedMapOps.WithFilter[K, V, WithFilterCC, UnsortedCC, CC](this, p)

src/library/scala/collection/SortedMap.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -179,16 +179,16 @@ trait SortedMapOps[K, +V, +CC[X, Y] <: Map[X, Y] with SortedMapOps[X, Y, CC, _],
179179
override def concat[V2 >: V](suffix: IterableOnce[(K, V2)]): CC[K, V2] = sortedMapFactory.from(suffix match {
180180
case it: Iterable[(K, V2)] => new View.Concat(this, it)
181181
case _ => iterator.concat(suffix.iterator)
182-
})(ordering)
182+
})(using ordering)
183183

184184
/** Alias for `concat` */
185185
@`inline` override final def ++ [V2 >: V](xs: IterableOnce[(K, V2)]): CC[K, V2] = concat(xs)
186186

187187
@deprecated("Consider requiring an immutable Map or fall back to Map.concat", "2.13.0")
188-
override def + [V1 >: V](kv: (K, V1)): CC[K, V1] = sortedMapFactory.from(new View.Appended(this, kv))(ordering)
188+
override def + [V1 >: V](kv: (K, V1)): CC[K, V1] = sortedMapFactory.from(new View.Appended(this, kv))(using ordering)
189189

190190
@deprecated("Use ++ with an explicit collection argument instead of + with varargs", "2.13.0")
191-
override def + [V1 >: V](elem1: (K, V1), elem2: (K, V1), elems: (K, V1)*): CC[K, V1] = sortedMapFactory.from(new View.Concat(new View.Appended(new View.Appended(this, elem1), elem2), elems))(ordering)
191+
override def + [V1 >: V](elem1: (K, V1), elem2: (K, V1), elems: (K, V1)*): CC[K, V1] = sortedMapFactory.from(new View.Concat(new View.Appended(new View.Appended(this, elem1), elem2), elems))(using ordering)
192192
}
193193

194194
object SortedMapOps {

0 commit comments

Comments
 (0)