diff --git a/library/src/scala/AnyVal.scala b/library/src/scala/AnyVal.scala index 2605e1346d96..a5ca465a6c93 100644 --- a/library/src/scala/AnyVal.scala +++ b/library/src/scala/AnyVal.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `AnyVal` is the root class of all *value types*, which describe values diff --git a/library/src/scala/AnyValCompanion.scala b/library/src/scala/AnyValCompanion.scala index 9b9f3f9a6fda..9d8860ffe5ae 100644 --- a/library/src/scala/AnyValCompanion.scala +++ b/library/src/scala/AnyValCompanion.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** A common supertype for companion classes of primitive types. diff --git a/library/src/scala/Boolean.scala b/library/src/scala/Boolean.scala index f18927ffe4c9..a1d3474d1cc9 100644 --- a/library/src/scala/Boolean.scala +++ b/library/src/scala/Boolean.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Boolean` (equivalent to Java's `boolean` primitive type) is a diff --git a/library/src/scala/Byte.scala b/library/src/scala/Byte.scala index d516685a1698..c3a35c78e9e2 100644 --- a/library/src/scala/Byte.scala +++ b/library/src/scala/Byte.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Byte`, a 8-bit signed integer (equivalent to Java's `byte` primitive type) is a diff --git a/library/src/scala/Char.scala b/library/src/scala/Char.scala index 6e76f7d2e36c..93ca0f9e127f 100644 --- a/library/src/scala/Char.scala +++ b/library/src/scala/Char.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.immutable.NumericRange diff --git a/library/src/scala/Console.scala b/library/src/scala/Console.scala index f229c78beb9a..559e454e62fd 100644 --- a/library/src/scala/Console.scala +++ b/library/src/scala/Console.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import java.io.{ BufferedReader, InputStream, InputStreamReader, OutputStream, PrintStream, Reader } diff --git a/library/src/scala/Double.scala b/library/src/scala/Double.scala index f60a13767a74..97368fd60f04 100644 --- a/library/src/scala/Double.scala +++ b/library/src/scala/Double.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Double`, a 64-bit IEEE-754 floating point number (equivalent to Java's `double` primitive type) is a diff --git a/library/src/scala/DummyImplicit.scala b/library/src/scala/DummyImplicit.scala index 9e542ccb1d7b..34352ad67202 100644 --- a/library/src/scala/DummyImplicit.scala +++ b/library/src/scala/DummyImplicit.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** A type for which there is always an implicit value. */ diff --git a/library/src/scala/Dynamic.scala b/library/src/scala/Dynamic.scala index 5d33a6cbc3c3..49be6940772f 100644 --- a/library/src/scala/Dynamic.scala +++ b/library/src/scala/Dynamic.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** A marker trait that enables dynamic invocations. Instances `x` of this diff --git a/library/src/scala/Enumeration.scala b/library/src/scala/Enumeration.scala index deea5e00e41b..f0a6138a3a91 100644 --- a/library/src/scala/Enumeration.scala +++ b/library/src/scala/Enumeration.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.{SpecificIterableFactory, StrictOptimizedIterableOps, View, immutable, mutable} @@ -87,7 +88,7 @@ import scala.util.matching.Regex * identifies values at run-time. */ @SerialVersionUID(8476000850333817230L) -abstract class Enumeration (initial: Int) extends Serializable { +abstract class Enumeration (initial: Int) extends Serializable, caps.Pure { thisenum => def this() = this(0) @@ -232,7 +233,7 @@ abstract class Enumeration (initial: Int) extends Serializable { /** The type of the enumerated values. */ @SerialVersionUID(7091335633555234129L) - abstract class Value extends Ordered[Value] with Serializable { + abstract class Value extends Ordered[Value] with Serializable with caps.Pure { /** The id and bit location of this enumeration value. */ def id: Int /** A marker so we can tell whose values belong to whom come reflective-naming time. */ @@ -328,7 +329,7 @@ abstract class Enumeration (initial: Int) extends Serializable { */ def toBitMask: Array[Long] = nnIds.toBitMask - override protected def fromSpecific(coll: IterableOnce[Value]): ValueSet = ValueSet.fromSpecific(coll) + override protected def fromSpecific(coll: IterableOnce[Value]^): ValueSet = ValueSet.fromSpecific(coll) override protected def newSpecificBuilder = ValueSet.newBuilder def map(f: Value => Value): ValueSet = fromSpecific(new View.Map(this, f)) @@ -337,11 +338,11 @@ abstract class Enumeration (initial: Int) extends Serializable { // necessary for disambiguation: override def map[B](f: Value => B)(implicit @implicitNotFound(ValueSet.ordMsg) ev: Ordering[B]): immutable.SortedSet[B] = super[SortedSet].map[B](f) - override def flatMap[B](f: Value => IterableOnce[B])(implicit @implicitNotFound(ValueSet.ordMsg) ev: Ordering[B]): immutable.SortedSet[B] = + override def flatMap[B](f: Value => IterableOnce[B]^)(implicit @implicitNotFound(ValueSet.ordMsg) ev: Ordering[B]): immutable.SortedSet[B] = super[SortedSet].flatMap[B](f) - override def zip[B](that: IterableOnce[B])(implicit @implicitNotFound(ValueSet.zipOrdMsg) ev: Ordering[(Value, B)]): immutable.SortedSet[(Value, B)] = + override def zip[B](that: IterableOnce[B]^)(implicit @implicitNotFound(ValueSet.zipOrdMsg) ev: Ordering[(Value, B)]): immutable.SortedSet[(Value, B)] = super[SortedSet].zip[B](that) - override def collect[B](pf: PartialFunction[Value, B])(implicit @implicitNotFound(ValueSet.ordMsg) ev: Ordering[B]): immutable.SortedSet[B] = + override def collect[B](pf: PartialFunction[Value, B]^)(implicit @implicitNotFound(ValueSet.ordMsg) ev: Ordering[B]): immutable.SortedSet[B] = super[SortedSet].collect[B](pf) @transient private[Enumeration] lazy val byName: Map[String, Value] = iterator.map( v => v.toString -> v).toMap @@ -368,7 +369,7 @@ abstract class Enumeration (initial: Int) extends Serializable { def clear() = b.clear() def result() = new ValueSet(b.toImmutable) } - def fromSpecific(it: IterableOnce[Value]): ValueSet = + def fromSpecific(it: IterableOnce[Value]^): ValueSet = newBuilder.addAll(it).result() } } diff --git a/library/src/scala/Equals.scala b/library/src/scala/Equals.scala index 38d491893840..032c3aef9919 100644 --- a/library/src/scala/Equals.scala +++ b/library/src/scala/Equals.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** An interface containing operations for equality. diff --git a/library/src/scala/Float.scala b/library/src/scala/Float.scala index 2a328c771025..47c2af413a06 100644 --- a/library/src/scala/Float.scala +++ b/library/src/scala/Float.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Float`, a 32-bit IEEE-754 floating point number (equivalent to Java's `float` primitive type) is a diff --git a/library/src/scala/IArray.scala b/library/src/scala/IArray.scala index 53369fdcd8bb..f9528715857f 100644 --- a/library/src/scala/IArray.scala +++ b/library/src/scala/IArray.scala @@ -368,7 +368,7 @@ object IArray: * @param f the transformation function mapping elements to their sort keys * @return a new array consisting of the elements of this array sorted by the value `f` produces for each */ - extension [T](arr: IArray[T]) def sortBy[U](f: T => U)(using math.Ordering[U]): IArray[T] = + extension [T](arr: IArray[T]) def sortBy[U](f: T -> U)(using math.Ordering[U]): IArray[T] = genericArrayOps(arr).sortBy(f) /** Sorts this array according to a comparison function. @@ -376,13 +376,13 @@ object IArray: * @param f the comparison function returning true if its first argument should come first * @return a new array consisting of the elements of this array sorted according to `f` */ - extension [T](arr: IArray[T]) def sortWith(f: (T, T) => Boolean): IArray[T] = + extension [T](arr: IArray[T]) def sortWith(f: (T, T) -> Boolean): IArray[T] = genericArrayOps(arr).sortWith(f) /** Sorts this array according to an Ordering. * */ - extension [T](arr: IArray[T]) def sorted(using math.Ordering[T]^): IArray[T] = + extension [T](arr: IArray[T]) def sorted(using math.Ordering[T]): IArray[T] = genericArrayOps(arr).sorted /** Splits this array into a prefix/suffix pair according to a predicate. diff --git a/library/src/scala/Int.scala b/library/src/scala/Int.scala index decdc16d4dd6..4d7f0ff311e2 100644 --- a/library/src/scala/Int.scala +++ b/library/src/scala/Int.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Int`, a 32-bit signed integer (equivalent to Java's `int` primitive type) is a diff --git a/library/src/scala/Long.scala b/library/src/scala/Long.scala index de79de88e44e..cbc5a723740b 100644 --- a/library/src/scala/Long.scala +++ b/library/src/scala/Long.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.immutable.NumericRange diff --git a/library/src/scala/MatchError.scala b/library/src/scala/MatchError.scala index fa5e483ab951..26b3086722e6 100644 --- a/library/src/scala/MatchError.scala +++ b/library/src/scala/MatchError.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** This class implements errors which are thrown whenever an diff --git a/library/src/scala/NotImplementedError.scala b/library/src/scala/NotImplementedError.scala index 8adaa96ed319..63d44f89d7e3 100644 --- a/library/src/scala/NotImplementedError.scala +++ b/library/src/scala/NotImplementedError.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** Throwing this exception can be a temporary replacement for a method diff --git a/library/src/scala/Option.scala b/library/src/scala/Option.scala index d38baffb2ebd..b9640e4d4e3d 100644 --- a/library/src/scala/Option.scala +++ b/library/src/scala/Option.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` object Option { @@ -402,7 +403,7 @@ sealed abstract class Option[+A] extends IterableOnce[A] with Product with Seria * @param p the predicate used to test elements * @return a `WithFilter` that applies `p` to this option before subsequent `map`, `flatMap`, `foreach`, or `withFilter` operations */ - @inline final def withFilter(p: A => Boolean): WithFilter = new WithFilter(p) + @inline final def withFilter(p: A -> Boolean): WithFilter = new WithFilter(p) /** We need a whole WithFilter class to honor the "doesn't create a new * collection" contract even though it seems unlikely to matter much in a @@ -414,7 +415,7 @@ sealed abstract class Option[+A] extends IterableOnce[A] with Product with Seria def map[B](f: A => B): Option[B] = self filter p map f def flatMap[B](f: A => Option[B]): Option[B] = self filter p flatMap f def foreach[U](f: A => U): Unit = self filter p foreach f - def withFilter(q: A => Boolean): WithFilter = new WithFilter(x => p(x) && q(x)) + def withFilter(q: A => Boolean): WithFilter^{this, q} = new WithFilter(x => p(x) && q(x)) } /** Tests whether the option contains a given value as an element. @@ -520,7 +521,7 @@ sealed abstract class Option[+A] extends IterableOnce[A] with Product with Seria * * @tparam B the result type of the partial function */ - @inline final def collect[B](pf: PartialFunction[A, B]): Option[B] = + @inline final def collect[B](pf: PartialFunction[A, B]^): Option[B] = if (!isEmpty) pf.lift(this.get) else None /** Returns this $option if it is nonempty, diff --git a/library/src/scala/Product.scala b/library/src/scala/Product.scala index b65b9e183af3..60d88fe61287 100644 --- a/library/src/scala/Product.scala +++ b/library/src/scala/Product.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import language.experimental.captureChecking diff --git a/library/src/scala/Product1.scala b/library/src/scala/Product1.scala index 20e2b83a2294..018eea71fe6c 100644 --- a/library/src/scala/Product1.scala +++ b/library/src/scala/Product1.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` object Product1 { diff --git a/library/src/scala/ScalaReflectionException.scala b/library/src/scala/ScalaReflectionException.scala index aa10c98b2eaa..1614e8e4df7e 100644 --- a/library/src/scala/ScalaReflectionException.scala +++ b/library/src/scala/ScalaReflectionException.scala @@ -1,5 +1,6 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** An exception that indicates an error during Scala reflection. diff --git a/library/src/scala/Short.scala b/library/src/scala/Short.scala index 16ba60a6a521..7788c2ac5497 100644 --- a/library/src/scala/Short.scala +++ b/library/src/scala/Short.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Short`, a 16-bit signed integer (equivalent to Java's `short` primitive type) is a diff --git a/library/src/scala/Specializable.scala b/library/src/scala/Specializable.scala index 5728d8c4f03d..415696f16e10 100644 --- a/library/src/scala/Specializable.scala +++ b/library/src/scala/Specializable.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** A common supertype for companions of specializable types. diff --git a/library/src/scala/StringContext.scala b/library/src/scala/StringContext.scala index 28258c2ff7eb..b9cfa585387c 100644 --- a/library/src/scala/StringContext.scala +++ b/library/src/scala/StringContext.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import java.lang.{ StringBuilder => JLSBuilder } import scala.annotation.tailrec diff --git a/library/src/scala/Symbol.scala b/library/src/scala/Symbol.scala index 064c855cee6c..83132df15ec1 100644 --- a/library/src/scala/Symbol.scala +++ b/library/src/scala/Symbol.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** This class provides a simple way to get unique objects for equal strings. diff --git a/library/src/scala/UninitializedError.scala b/library/src/scala/UninitializedError.scala index e53c2698ef68..87c23eada2e7 100644 --- a/library/src/scala/UninitializedError.scala +++ b/library/src/scala/UninitializedError.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** This class represents uninitialized variable/value errors. diff --git a/library/src/scala/UninitializedFieldError.scala b/library/src/scala/UninitializedFieldError.scala index 10e8c5b2b80f..b58188b27072 100644 --- a/library/src/scala/UninitializedFieldError.scala +++ b/library/src/scala/UninitializedFieldError.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** This class implements errors which are thrown whenever a diff --git a/library/src/scala/Unit.scala b/library/src/scala/Unit.scala index 3faf3dc25935..9110a7e08de1 100644 --- a/library/src/scala/Unit.scala +++ b/library/src/scala/Unit.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** `Unit` is a subtype of [[scala.AnyVal]]. There is only one value of type diff --git a/library/src/scala/ValueOf.scala b/library/src/scala/ValueOf.scala index 8dc2a4db2ba2..5b3c7b318eec 100644 --- a/library/src/scala/ValueOf.scala +++ b/library/src/scala/ValueOf.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/Annotation.scala b/library/src/scala/annotation/Annotation.scala index 8997071d9321..323cdff0e0e3 100644 --- a/library/src/scala/annotation/Annotation.scala +++ b/library/src/scala/annotation/Annotation.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/ConstantAnnotation.scala b/library/src/scala/annotation/ConstantAnnotation.scala index e8ca55baaf1c..05b95c8c73e2 100644 --- a/library/src/scala/annotation/ConstantAnnotation.scala +++ b/library/src/scala/annotation/ConstantAnnotation.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/StaticAnnotation.scala b/library/src/scala/annotation/StaticAnnotation.scala index 0d0e2159731e..3c4349fb6e6f 100644 --- a/library/src/scala/annotation/StaticAnnotation.scala +++ b/library/src/scala/annotation/StaticAnnotation.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/TypeConstraint.scala b/library/src/scala/annotation/TypeConstraint.scala index 4cfd24a1bc9a..f4b579129b04 100644 --- a/library/src/scala/annotation/TypeConstraint.scala +++ b/library/src/scala/annotation/TypeConstraint.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** A marker for annotations that, when applied to a type, should be treated diff --git a/library/src/scala/annotation/compileTimeOnly.scala b/library/src/scala/annotation/compileTimeOnly.scala index 731e03a0bbc6..de0ad8ecbc5d 100644 --- a/library/src/scala/annotation/compileTimeOnly.scala +++ b/library/src/scala/annotation/compileTimeOnly.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/annotation/implicitAmbiguous.scala b/library/src/scala/annotation/implicitAmbiguous.scala index 809e7b8da162..121ff918f4db 100644 --- a/library/src/scala/annotation/implicitAmbiguous.scala +++ b/library/src/scala/annotation/implicitAmbiguous.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** To customize the error message that's emitted when an implicit search finds diff --git a/library/src/scala/annotation/implicitNotFound.scala b/library/src/scala/annotation/implicitNotFound.scala index 51bcc9c9a3e8..3f37a870fff4 100644 --- a/library/src/scala/annotation/implicitNotFound.scala +++ b/library/src/scala/annotation/implicitNotFound.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** To customize the error message that's emitted when an implicit of type diff --git a/library/src/scala/annotation/internal/$into.scala b/library/src/scala/annotation/internal/$into.scala index db6b996dae2a..9e100b00a650 100644 --- a/library/src/scala/annotation/internal/$into.scala +++ b/library/src/scala/annotation/internal/$into.scala @@ -1,5 +1,7 @@ package scala.annotation.internal +import language.experimental.captureChecking + /** An internal annotation on (part of) a parameter type that serves as a marker where * the original type was of the form `into[T]`. These annotated types are mapped back * to `into[T]` types when forming a method types from the parameter types. The idea is diff --git a/library/src/scala/annotation/internal/onlyCapability.scala b/library/src/scala/annotation/internal/onlyCapability.scala index 7bf5769d92bc..65b7901540bb 100644 --- a/library/src/scala/annotation/internal/onlyCapability.scala +++ b/library/src/scala/annotation/internal/onlyCapability.scala @@ -1,6 +1,8 @@ package scala.annotation package internal +import language.experimental.captureChecking + /** An annotation that represents a capability `c.only[T]`, * encoded as `x.type @onlyCapability[T]` * diff --git a/library/src/scala/annotation/meta/beanGetter.scala b/library/src/scala/annotation/meta/beanGetter.scala index fcd12d2f679f..cc33b6d1982d 100644 --- a/library/src/scala/annotation/meta/beanGetter.scala +++ b/library/src/scala/annotation/meta/beanGetter.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/beanSetter.scala b/library/src/scala/annotation/meta/beanSetter.scala index 3951ccf0da90..f13d00fcc617 100644 --- a/library/src/scala/annotation/meta/beanSetter.scala +++ b/library/src/scala/annotation/meta/beanSetter.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/companionClass.scala b/library/src/scala/annotation/meta/companionClass.scala index a1417e3808d9..8eb27dd69441 100644 --- a/library/src/scala/annotation/meta/companionClass.scala +++ b/library/src/scala/annotation/meta/companionClass.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/companionMethod.scala b/library/src/scala/annotation/meta/companionMethod.scala index 746c8bc73b60..07255378aa84 100644 --- a/library/src/scala/annotation/meta/companionMethod.scala +++ b/library/src/scala/annotation/meta/companionMethod.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/companionObject.scala b/library/src/scala/annotation/meta/companionObject.scala index 91bc7c300ac1..7cdfcb6bf4bd 100644 --- a/library/src/scala/annotation/meta/companionObject.scala +++ b/library/src/scala/annotation/meta/companionObject.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/defaultArg.scala b/library/src/scala/annotation/meta/defaultArg.scala index 0d39f65da7fc..92c623e5406e 100644 --- a/library/src/scala/annotation/meta/defaultArg.scala +++ b/library/src/scala/annotation/meta/defaultArg.scala @@ -13,6 +13,7 @@ package scala.annotation package meta +import language.experimental.captureChecking import scala.language.`2.13` /** This internal meta annotation is used by the compiler to support default annotation arguments. diff --git a/library/src/scala/annotation/meta/field.scala b/library/src/scala/annotation/meta/field.scala index 43c70f93e255..7afbc01cee1d 100644 --- a/library/src/scala/annotation/meta/field.scala +++ b/library/src/scala/annotation/meta/field.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/getter.scala b/library/src/scala/annotation/meta/getter.scala index 1d7e0f5db5b5..e358072b3079 100644 --- a/library/src/scala/annotation/meta/getter.scala +++ b/library/src/scala/annotation/meta/getter.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/languageFeature.scala b/library/src/scala/annotation/meta/languageFeature.scala index e93eef7d91d2..5ef2ce298bd3 100644 --- a/library/src/scala/annotation/meta/languageFeature.scala +++ b/library/src/scala/annotation/meta/languageFeature.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** An annotation giving particulars for a language feature in object `scala.language`. diff --git a/library/src/scala/annotation/meta/package.scala b/library/src/scala/annotation/meta/package.scala index 4a8016f41570..2d5de8ce3787 100644 --- a/library/src/scala/annotation/meta/package.scala +++ b/library/src/scala/annotation/meta/package.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/param.scala b/library/src/scala/annotation/meta/param.scala index 725d89ade8f5..669007629af5 100644 --- a/library/src/scala/annotation/meta/param.scala +++ b/library/src/scala/annotation/meta/param.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/setter.scala b/library/src/scala/annotation/meta/setter.scala index 5db7cae2da72..c523ab130a49 100644 --- a/library/src/scala/annotation/meta/setter.scala +++ b/library/src/scala/annotation/meta/setter.scala @@ -12,6 +12,7 @@ package scala.annotation.meta +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/meta/superArg.scala b/library/src/scala/annotation/meta/superArg.scala index f0f1f5a2c7fc..8f56456d6842 100644 --- a/library/src/scala/annotation/meta/superArg.scala +++ b/library/src/scala/annotation/meta/superArg.scala @@ -13,6 +13,7 @@ package scala.annotation package meta +import language.experimental.captureChecking import scala.language.`2.13` /** This internal annotation encodes arguments passed to annotation superclasses. Example: diff --git a/library/src/scala/annotation/migration.scala b/library/src/scala/annotation/migration.scala index 8daa003eba96..4bfa0dd7b55d 100644 --- a/library/src/scala/annotation/migration.scala +++ b/library/src/scala/annotation/migration.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/nowarn.scala b/library/src/scala/annotation/nowarn.scala index b7644ca40ab2..c1521fd5a10d 100644 --- a/library/src/scala/annotation/nowarn.scala +++ b/library/src/scala/annotation/nowarn.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** An annotation for local warning suppression. diff --git a/library/src/scala/annotation/showAsInfix.scala b/library/src/scala/annotation/showAsInfix.scala index 15e80f1313d9..ffa772e2917b 100644 --- a/library/src/scala/annotation/showAsInfix.scala +++ b/library/src/scala/annotation/showAsInfix.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/annotation/stableNull.scala b/library/src/scala/annotation/stableNull.scala index 045c8b29d123..3869d2991f40 100644 --- a/library/src/scala/annotation/stableNull.scala +++ b/library/src/scala/annotation/stableNull.scala @@ -1,5 +1,7 @@ package scala.annotation +import language.experimental.captureChecking + /** An annotation that can be used to mark a mutable field as trackable for nullability. * With explicit nulls, a normal mutable field cannot be tracked for nullability by flow typing, * since it can be updated to a null value at the same time. diff --git a/library/src/scala/annotation/strictfp.scala b/library/src/scala/annotation/strictfp.scala index 0b9bc894fc5c..4254cb3df5d4 100644 --- a/library/src/scala/annotation/strictfp.scala +++ b/library/src/scala/annotation/strictfp.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** If this annotation is present on a method or its enclosing class, diff --git a/library/src/scala/annotation/switch.scala b/library/src/scala/annotation/switch.scala index 222042f055a9..6ae1a66e1cef 100644 --- a/library/src/scala/annotation/switch.scala +++ b/library/src/scala/annotation/switch.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** An annotation to be applied to a match expression. If present, diff --git a/library/src/scala/annotation/tailrec.scala b/library/src/scala/annotation/tailrec.scala index 7d5fa19ef043..ea84bd898fd3 100644 --- a/library/src/scala/annotation/tailrec.scala +++ b/library/src/scala/annotation/tailrec.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** A method annotation which verifies that the method will be compiled diff --git a/library/src/scala/annotation/unchecked/uncheckedOverride.scala b/library/src/scala/annotation/unchecked/uncheckedOverride.scala index 40e8f3c58853..c58978e619ae 100644 --- a/library/src/scala/annotation/unchecked/uncheckedOverride.scala +++ b/library/src/scala/annotation/unchecked/uncheckedOverride.scala @@ -12,6 +12,7 @@ package scala.annotation.unchecked +import language.experimental.captureChecking import scala.annotation.StaticAnnotation import scala.language.`2.13` diff --git a/library/src/scala/annotation/unchecked/uncheckedStable.scala b/library/src/scala/annotation/unchecked/uncheckedStable.scala index 585c5a13ef37..5568152cc958 100644 --- a/library/src/scala/annotation/unchecked/uncheckedStable.scala +++ b/library/src/scala/annotation/unchecked/uncheckedStable.scala @@ -12,6 +12,7 @@ package scala.annotation.unchecked +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta.{field, getter} diff --git a/library/src/scala/annotation/unchecked/uncheckedVariance.scala b/library/src/scala/annotation/unchecked/uncheckedVariance.scala index fb426dbf877c..d7cab456fc14 100644 --- a/library/src/scala/annotation/unchecked/uncheckedVariance.scala +++ b/library/src/scala/annotation/unchecked/uncheckedVariance.scala @@ -12,6 +12,7 @@ package scala.annotation.unchecked +import language.experimental.captureChecking import scala.language.`2.13` /** An annotation for type arguments for which one wants to suppress variance checking. diff --git a/library/src/scala/annotation/unspecialized.scala b/library/src/scala/annotation/unspecialized.scala index 616542305fbc..c5d5afe9f4bf 100644 --- a/library/src/scala/annotation/unspecialized.scala +++ b/library/src/scala/annotation/unspecialized.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** A method annotation which suppresses the creation of diff --git a/library/src/scala/annotation/unused.scala b/library/src/scala/annotation/unused.scala index d1ab6b280acb..241f6bbd9615 100644 --- a/library/src/scala/annotation/unused.scala +++ b/library/src/scala/annotation/unused.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** Mark an element unused for a given context. diff --git a/library/src/scala/annotation/varargs.scala b/library/src/scala/annotation/varargs.scala index 967e2df00f6f..81de306a7738 100644 --- a/library/src/scala/annotation/varargs.scala +++ b/library/src/scala/annotation/varargs.scala @@ -12,6 +12,7 @@ package scala.annotation +import language.experimental.captureChecking import scala.language.`2.13` /** A method annotation which instructs the compiler to generate a diff --git a/library/src/scala/beans/BeanProperty.scala b/library/src/scala/beans/BeanProperty.scala index fe54e97933ba..f6c254806f8e 100644 --- a/library/src/scala/beans/BeanProperty.scala +++ b/library/src/scala/beans/BeanProperty.scala @@ -12,6 +12,7 @@ package scala.beans +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta.{beanGetter, beanSetter, field} diff --git a/library/src/scala/beans/BooleanBeanProperty.scala b/library/src/scala/beans/BooleanBeanProperty.scala index 657b17d564bb..d156dbdf3ee6 100644 --- a/library/src/scala/beans/BooleanBeanProperty.scala +++ b/library/src/scala/beans/BooleanBeanProperty.scala @@ -12,6 +12,7 @@ package scala.beans +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta.{beanGetter, beanSetter, field} diff --git a/library/src/scala/collection/ArrayOps.scala b/library/src/scala/collection/ArrayOps.scala index 6830912b1f9b..25a716e0ff6a 100644 --- a/library/src/scala/collection/ArrayOps.scala +++ b/library/src/scala/collection/ArrayOps.scala @@ -628,7 +628,7 @@ final class ArrayOps[A](private val xs: Array[A]) extends AnyVal { * @return an array consisting of the elements of this array * sorted according to the ordering `ord`. */ - def sorted[B >: A](implicit ord: Ordering[B]^): Array[A] = { + def sorted[B >: A](implicit ord: Ordering[B]): Array[A] = { val len = xs.length def boxed = if(len < ArrayOps.MaxStableSortLength) { val a = xs.clone() @@ -676,7 +676,7 @@ final class ArrayOps[A](private val xs: Array[A]) extends AnyVal { * @return an array consisting of the elements of this array * sorted according to the comparison function `lt`. */ - def sortWith(lt: (A, A) => Boolean): Array[A] = sorted(using Ordering.fromLessThan(lt)) + def sortWith(lt: (A, A) -> Boolean): Array[A] = sorted(using Ordering.fromLessThan(lt)) /** Sorts this array according to the Ordering which results from transforming * an implicitly given Ordering with a transformation function. @@ -691,7 +691,7 @@ final class ArrayOps[A](private val xs: Array[A]) extends AnyVal { * sorted according to the ordering where `x < y` if * `ord.lt(f(x), f(y))`. */ - def sortBy[B](f: A => B)(implicit ord: Ordering[B]): Array[A] = sorted(using ord.on(f)) + def sortBy[B](f: A -> B)(implicit ord: Ordering[B]): Array[A] = sorted(using ord.on(f)) /** Creates a non-strict filter of this array. * diff --git a/library/src/scala/collection/Seq.scala b/library/src/scala/collection/Seq.scala index 751fd2aeda3d..ca8123c372ba 100644 --- a/library/src/scala/collection/Seq.scala +++ b/library/src/scala/collection/Seq.scala @@ -723,7 +723,10 @@ transparent trait SeqOps[+A, +CC[_], +C] extends Any * @return a $coll consisting of the elements of this $coll * sorted according to the ordering `ord`. */ - def sorted[B >: A](implicit ord: Ordering[B]): C^{this} = { + def sorted[B >: A](implicit ord: Ordering[B]): C^{this} = sortedImpl + + // The actual sort implementation. `sorted` needs a more lenient capture set because of lazy seqs. + private[collection] def sortedImpl[B >: A](implicit ord: Ordering[B]): C^{this} = { val len = this.length val b = newSpecificBuilder if (len == 1) b += head @@ -760,7 +763,7 @@ transparent trait SeqOps[+A, +CC[_], +C] extends Any * // List("Bobby", "Bob", "John", "Steve", "Tom") * ``` */ - def sortWith(lt: (A, A) => Boolean): C^{this} = sorted(using Ordering.fromLessThan(lt)) + def sortWith(lt: (A, A) -> Boolean): C^{this} = sorted(using Ordering.fromLessThan(lt)) /** Sorts this $coll according to the Ordering which results from transforming * an implicitly given Ordering with a transformation function. @@ -787,7 +790,7 @@ transparent trait SeqOps[+A, +CC[_], +C] extends Any * // sorted: Array[String] = Array(The, dog, fox, the, lazy, over, brown, quick, jumped) * ``` */ - def sortBy[B](f: A => B)(implicit ord: Ordering[B]): C^{this} = sorted(using ord.on(f)) + def sortBy[B](f: A -> B)(implicit ord: Ordering[B]): C^{this} = sorted(using ord.on(f)) /** Produces the range of all indices of this sequence. * $willForceEvaluation diff --git a/library/src/scala/collection/SeqView.scala b/library/src/scala/collection/SeqView.scala index 5d4c02666896..4b26b2c8b638 100644 --- a/library/src/scala/collection/SeqView.scala +++ b/library/src/scala/collection/SeqView.scala @@ -161,7 +161,7 @@ object SeqView { override def sorted[B1 >: A](implicit ord1: Ordering[B1]): SeqView[A]^{this} = if (ord1 == Sorted.this.ord) outer else if (ord1.isReverseOf(Sorted.this.ord)) this - else new Sorted(elems, len, ord1) + else new Sorted(outer.elems, len, ord1) } @volatile private var evaluated = false diff --git a/library/src/scala/collection/StringOps.scala b/library/src/scala/collection/StringOps.scala index 79cb3f38176b..42eea09f38de 100644 --- a/library/src/scala/collection/StringOps.scala +++ b/library/src/scala/collection/StringOps.scala @@ -1735,7 +1735,7 @@ final class StringOps(private val s: String) extends AnyVal { self => * sorted according to the comparison function `lt`. * @note $unicodeunaware */ - def sortWith(lt: (Char, Char) => Boolean): String = new WrappedString(s).sortWith(lt).unwrap + def sortWith(lt: (Char, Char) -> Boolean): String = new WrappedString(s).sortWith(lt).unwrap /** Sorts this string according to the Ordering which results from transforming * an implicitly given Ordering with a transformation function. @@ -1754,7 +1754,7 @@ final class StringOps(private val s: String) extends AnyVal { self => * `ord.lt(f(x), f(y))`. * @note $unicodeunaware */ - def sortBy[B](f: Char => B)(implicit ord: Ordering[B]): String = new WrappedString(s).sortBy(f)(using ord).unwrap + def sortBy[B](f: Char -> B)(implicit ord: Ordering[B]): String = new WrappedString(s).sortBy(f)(using ord).unwrap /** Partitions this string into a map of strings according to some discriminator function. * diff --git a/library/src/scala/collection/immutable/StrictOptimizedSeqOps.scala b/library/src/scala/collection/immutable/StrictOptimizedSeqOps.scala index 4dbfce8a4a70..504b4a9f7f89 100644 --- a/library/src/scala/collection/immutable/StrictOptimizedSeqOps.scala +++ b/library/src/scala/collection/immutable/StrictOptimizedSeqOps.scala @@ -86,6 +86,6 @@ transparent trait StrictOptimizedSeqOps[+A, +CC[B] <: caps.Pure, +C] b.result() } - override def sorted[B >: A](implicit ord: Ordering[B]): C = super.sorted(using ord) + override def sorted[B >: A](implicit ord: Ordering[B]): C = sortedImpl(using ord) } diff --git a/library/src/scala/collection/mutable/IndexedSeq.scala b/library/src/scala/collection/mutable/IndexedSeq.scala index 4db79b6d5eb3..10dd9b447a89 100644 --- a/library/src/scala/collection/mutable/IndexedSeq.scala +++ b/library/src/scala/collection/mutable/IndexedSeq.scala @@ -78,7 +78,7 @@ transparent trait IndexedSeqOps[A, +CC[_] <: caps.Pure, +C <: AnyRef] * @param lt the less-than comparison function; should return `true` if the first argument strictly precedes the second in the desired ordering * @return this $coll sorted in place according to the comparison function `lt` */ - def sortInPlaceWith(lt: (A, A) => Boolean): this.type = sortInPlace()(using Ordering.fromLessThan(lt)) + def sortInPlaceWith(lt: (A, A) -> Boolean): this.type = sortInPlace()(using Ordering.fromLessThan(lt)) /** Sorts this $coll in place according to the Ordering which results from transforming * an implicitly given Ordering with a transformation function. @@ -90,6 +90,6 @@ transparent trait IndexedSeqOps[A, +CC[_] <: caps.Pure, +C <: AnyRef] * @param ord the implicit ordering on type `B` used to compare transformed elements * @return this $coll sorted in place according to the ordering induced by applying `f` and comparing with `ord` */ - def sortInPlaceBy[B](f: A => B)(implicit ord: Ordering[B]): this.type = sortInPlace()(using ord.on(f)) + def sortInPlaceBy[B](f: A -> B)(implicit ord: Ordering[B]): this.type = sortInPlace()(using ord.on(f)) } diff --git a/library/src/scala/compiletime/Erased.scala b/library/src/scala/compiletime/Erased.scala index 665639322122..14f53ff68035 100644 --- a/library/src/scala/compiletime/Erased.scala +++ b/library/src/scala/compiletime/Erased.scala @@ -1,7 +1,9 @@ package scala.compiletime import annotation.experimental +import language.experimental.captureChecking + /** A marker trait for erased values. vals or parameters whose type extends * `Erased` get an implicit `erased` modifier. */ -@experimental trait Erased \ No newline at end of file +@experimental trait Erased diff --git a/library/src/scala/concurrent/Awaitable.scala b/library/src/scala/concurrent/Awaitable.scala index 2443d4c58d69..bc6bb7244cd9 100644 --- a/library/src/scala/concurrent/Awaitable.scala +++ b/library/src/scala/concurrent/Awaitable.scala @@ -13,6 +13,7 @@ package scala.concurrent +import language.experimental.captureChecking import scala.language.`2.13` import scala.concurrent.duration.Duration diff --git a/library/src/scala/deprecated.scala b/library/src/scala/deprecated.scala index 094331b7c6d0..556acad5a413 100644 --- a/library/src/scala/deprecated.scala +++ b/library/src/scala/deprecated.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/deprecatedInheritance.scala b/library/src/scala/deprecatedInheritance.scala index 1f106cd29f28..b1a415076e4d 100644 --- a/library/src/scala/deprecatedInheritance.scala +++ b/library/src/scala/deprecatedInheritance.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/deprecatedName.scala b/library/src/scala/deprecatedName.scala index b0caca66f5c1..c63bd9b26c0e 100644 --- a/library/src/scala/deprecatedName.scala +++ b/library/src/scala/deprecatedName.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/deprecatedOverriding.scala b/library/src/scala/deprecatedOverriding.scala index aa588e25c2d7..444978ef02af 100644 --- a/library/src/scala/deprecatedOverriding.scala +++ b/library/src/scala/deprecatedOverriding.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/inline.scala b/library/src/scala/inline.scala index 67e86bf7dd68..004299d20673 100644 --- a/library/src/scala/inline.scala +++ b/library/src/scala/inline.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/io/AnsiColor.scala b/library/src/scala/io/AnsiColor.scala index 5625784067ac..7fa9b036bf3c 100644 --- a/library/src/scala/io/AnsiColor.scala +++ b/library/src/scala/io/AnsiColor.scala @@ -13,6 +13,7 @@ package scala package io +import language.experimental.captureChecking import scala.language.`2.13` /** ANSI escape codes providing control over text formatting and color on supporting text terminals. diff --git a/library/src/scala/io/BufferedSource.scala b/library/src/scala/io/BufferedSource.scala index a7f97aeb5995..b553c0badb10 100644 --- a/library/src/scala/io/BufferedSource.scala +++ b/library/src/scala/io/BufferedSource.scala @@ -12,6 +12,7 @@ package scala.io +import language.experimental.captureChecking import scala.language.`2.13` import java.io.{ InputStream, BufferedReader, InputStreamReader, PushbackReader } import Source.DefaultBufSize @@ -41,7 +42,7 @@ class BufferedSource(inputStream: InputStream, bufferSize: Int)(implicit val cod bufferedReader() } - override val iter = ( + override val iter: Iterator[Char]^{this} = ( Iterator continually (codec wrap charReader.read()) takeWhile (_ != -1) diff --git a/library/src/scala/io/Codec.scala b/library/src/scala/io/Codec.scala index f02647aaa644..477b9a7d5e5e 100644 --- a/library/src/scala/io/Codec.scala +++ b/library/src/scala/io/Codec.scala @@ -13,6 +13,7 @@ package scala package io +import language.experimental.captureChecking import scala.language.`2.13` import java.nio.charset.{CharacterCodingException, Charset, CharsetDecoder, CharsetEncoder, CodingErrorAction => Action} import java.nio.charset.StandardCharsets.{ISO_8859_1, UTF_8} @@ -35,8 +36,8 @@ import scala.language.implicitConversions * @param charSet the character set used for encoding and decoding operations */ class Codec(val charSet: Charset) { - type Configure[T] = (T => T, Boolean) - type Handler = CharacterCodingException => Int + type Configure[T] = (T -> T, Boolean) + type Handler = CharacterCodingException -> Int // these variables allow configuring the Codec object, and then // all decoders and encoders retrieved from it will use these settings. diff --git a/library/src/scala/io/Source.scala b/library/src/scala/io/Source.scala index b797753b0b12..eb67751bd2ae 100644 --- a/library/src/scala/io/Source.scala +++ b/library/src/scala/io/Source.scala @@ -17,6 +17,7 @@ import scala.collection.{AbstractIterator, BufferedIterator} import java.io.{Closeable, FileInputStream, FileNotFoundException, InputStream, PrintStream, File => JFile} import java.net.{URI, URL} +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.nowarn @@ -217,8 +218,8 @@ object Source { def createBufferedSource( inputStream: InputStream, bufferSize: Int = DefaultBufSize, - reset: (() => Source) | Null = null, - close: (() => Unit) | Null = null + reset: (() -> Source) | Null = null, + close: (() -> Unit) | Null = null )(implicit codec: Codec): BufferedSource = { // workaround for default arguments being unable to refer to other parameters val resetFn = if (reset == null) () => createBufferedSource(inputStream, bufferSize, reset, close)(using codec) else reset @@ -264,7 +265,7 @@ object Source { */ abstract class Source extends Iterator[Char] with Closeable { /** The actual iterator. */ - protected val iter: Iterator[Char] + protected val iter: Iterator[Char]^{this} // ------ public values @@ -275,10 +276,10 @@ abstract class Source extends Iterator[Char] with Closeable { private def lineNum(line: Int): String = (getLines() drop (line - 1) take 1).mkString - class LineIterator extends AbstractIterator[String] with Iterator[String] { + class LineIterator extends AbstractIterator[String] with Iterator[String] uses Source.this.iter { private val sb = new StringBuilder - lazy val iter: BufferedIterator[Char] = Source.this.iter.buffered + lazy val iter: BufferedIterator[Char]^{Source.this.iter} = Source.this.iter.buffered def isNewline(ch: Char): Boolean = ch == '\r' || ch == '\n' def getc(): Boolean = iter.hasNext && { val ch = iter.next() @@ -306,7 +307,7 @@ abstract class Source extends Iterator[Char] with Closeable { * It will treat any of \r\n, \r, or \n as a line separator (longest match) - if * you need more refined behavior you can subclass Source#LineIterator directly. */ - def getLines(): Iterator[String] = new LineIterator() + def getLines(): Iterator[String]^{this} = new LineIterator() /** Returns `**true**` if this source has more characters. */ def hasNext: Boolean = iter.hasNext @@ -315,7 +316,7 @@ abstract class Source extends Iterator[Char] with Closeable { def next(): Char = positioner.next() @nowarn("cat=deprecation") - class Positioner(encoder: Position) { + class Positioner(encoder: Position) uses Source.this.iter, Source.this initially { def this() = this(RelaxedPosition) /** the last character returned by next. */ var ch: Char = compiletime.uninitialized @@ -352,8 +353,8 @@ abstract class Source extends Iterator[Char] with Closeable { object RelaxedPosition extends Position { def checkInput(line: Int, column: Int): Unit = () } - object RelaxedPositioner extends Positioner(RelaxedPosition) { } - object NoPositioner extends Positioner(Position) { + object RelaxedPositioner extends Positioner(RelaxedPosition) uses Source.this { } + object NoPositioner extends Positioner(Position) uses Source.this { override def next(): Char = iter.next() } def ch: Char = positioner.ch @@ -402,16 +403,16 @@ abstract class Source extends Iterator[Char] with Closeable { } @annotation.stableNull - private var resetFunction: (() => Source) | Null = null + private var resetFunction: (() -> Source) | Null = null @annotation.stableNull - private var closeFunction: (() => Unit) | Null = null - private var positioner: Positioner = RelaxedPositioner + private var closeFunction: (() -> Unit) | Null = null + private var positioner: Positioner^{this} = RelaxedPositioner - def withReset(f: (() => Source) | Null): this.type = { + def withReset(f: (() -> Source) | Null): this.type = { resetFunction = f this } - def withClose(f: (() => Unit) | Null): this.type = { + def withClose(f: (() -> Unit) | Null): this.type = { closeFunction = f this } diff --git a/library/src/scala/io/StdIn.scala b/library/src/scala/io/StdIn.scala index 7a8cb6ccb806..daa93e99f51c 100644 --- a/library/src/scala/io/StdIn.scala +++ b/library/src/scala/io/StdIn.scala @@ -13,6 +13,7 @@ package scala package io +import language.experimental.captureChecking import scala.language.`2.13` import java.text.MessageFormat diff --git a/library/src/scala/language.scala b/library/src/scala/language.scala index df54f0791546..f32dcbaf4d67 100644 --- a/library/src/scala/language.scala +++ b/library/src/scala/language.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.compileTimeOnly diff --git a/library/src/scala/languageFeature.scala b/library/src/scala/languageFeature.scala index 8ce9724ecc17..fef96c92c172 100644 --- a/library/src/scala/languageFeature.scala +++ b/library/src/scala/languageFeature.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta diff --git a/library/src/scala/math/BigDecimal.scala b/library/src/scala/math/BigDecimal.scala index d39177add71e..cc3a08e1701d 100644 --- a/library/src/scala/math/BigDecimal.scala +++ b/library/src/scala/math/BigDecimal.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions diff --git a/library/src/scala/math/BigInt.scala b/library/src/scala/math/BigInt.scala index b6bd4d333d1f..f285c7ba94cb 100644 --- a/library/src/scala/math/BigInt.scala +++ b/library/src/scala/math/BigInt.scala @@ -15,6 +15,7 @@ package math import java.math.BigInteger +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.nowarn import scala.language.implicitConversions diff --git a/library/src/scala/math/Equiv.scala b/library/src/scala/math/Equiv.scala index c8c4b9999f23..7915b9299c16 100644 --- a/library/src/scala/math/Equiv.scala +++ b/library/src/scala/math/Equiv.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import java.util.Comparator import scala.annotation.migration @@ -65,10 +66,10 @@ object Equiv extends LowPriorityEquiv { def fromComparator[T](cmp: Comparator[T]): Equiv[T] = { (x, y) => cmp.compare(x, y) == 0 } - def fromFunction[T](cmp: (T, T) => Boolean): Equiv[T] = { + def fromFunction[T](cmp: (T, T) -> Boolean): Equiv[T] = { (x, y) => cmp(x, y) } - def by[T, S: Equiv](f: T => S): Equiv[T] = + def by[T, S: Equiv](f: T -> S): Equiv[T] = ((x, y) => implicitly[Equiv[S]].equiv(f(x), f(y))) @inline def apply[T: Equiv]: Equiv[T] = implicitly[Equiv[T]] @@ -78,7 +79,7 @@ object Equiv extends LowPriorityEquiv { private final val optionSeed = 43 private final val iterableSeed = 47 - private final class IterableEquiv[CC[X] <: Iterable[X], T](private val eqv: Equiv[T]) extends Equiv[CC[T]] { + private final class IterableEquiv[CC[X] <: Iterable[X]^, T](private val eqv: Equiv[T]) extends Equiv[CC[T]] { def equiv(x: CC[T], y: CC[T]): Boolean = { val xe = x.iterator val ye = y.iterator diff --git a/library/src/scala/math/Fractional.scala b/library/src/scala/math/Fractional.scala index e0469d9cb054..113a6bc1e50b 100644 --- a/library/src/scala/math/Fractional.scala +++ b/library/src/scala/math/Fractional.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions diff --git a/library/src/scala/math/Integral.scala b/library/src/scala/math/Integral.scala index b06936b28045..74f4be695b36 100644 --- a/library/src/scala/math/Integral.scala +++ b/library/src/scala/math/Integral.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions diff --git a/library/src/scala/math/Numeric.scala b/library/src/scala/math/Numeric.scala index 9463a88189c0..2e0470433ce7 100644 --- a/library/src/scala/math/Numeric.scala +++ b/library/src/scala/math/Numeric.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.StringParsers import scala.language.implicitConversions diff --git a/library/src/scala/math/Ordered.scala b/library/src/scala/math/Ordered.scala index 0ffa768a8ad1..408b95f1e544 100644 --- a/library/src/scala/math/Ordered.scala +++ b/library/src/scala/math/Ordered.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions diff --git a/library/src/scala/math/Ordering.scala b/library/src/scala/math/Ordering.scala index fef5dc742261..241f0142811d 100644 --- a/library/src/scala/math/Ordering.scala +++ b/library/src/scala/math/Ordering.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` import java.util.Comparator @@ -81,7 +82,7 @@ import scala.annotation.unchecked.uncheckedOverride * @tparam T the type of objects that this ordering can compare */ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializable { - outer => + outer: Ordering[T] => /** Returns whether a comparison between `x` and `y` is defined, and if so * the result of `compare(x, y)`. @@ -194,7 +195,7 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl * @param f the function to extract a `T` value from a `U` value * @return an `Ordering[U]` that orders values by applying `f` and comparing the results using this ordering */ - def on[U](f: U => T): Ordering[U] = new Ordering[U] { + def on[U](f: U -> T): Ordering[U] = new Ordering[U] { def compare(x: U, y: U) = outer.compare(f(x), f(y)) } @@ -242,7 +243,7 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl * @param ord the implicit ordering for the extracted key type `S` * @return an `Ordering[T]` that uses this ordering first, falling back to comparing by `f` when values are equal */ - def orElseBy[S](f: T => S)(implicit ord: Ordering[S]): Ordering[T] = (x, y) => { + def orElseBy[S](f: T -> S)(implicit ord: Ordering[S]): Ordering[T] = (x, y) => { val res1 = outer.compare(x, y) if (res1 != 0) res1 else ord.compare(f(x), f(y)) } @@ -254,7 +255,7 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl * * @param lhs the left-hand side value for infix comparison operations */ - class OrderingOps(lhs: T) { + class OrderingOps(lhs: T) uses Ordering.this { def <(rhs: T): Boolean = lt(lhs, rhs) def <=(rhs: T): Boolean = lteq(lhs, rhs) def >(rhs: T): Boolean = gt(lhs, rhs) @@ -275,7 +276,7 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl trait LowPriorityOrderingImplicits { - type AsComparable[A] = A => Comparable[? >: A] + type AsComparable[A] = A -> Comparable[? >: A] /** This would conflict with all the nice implicit Orderings * available, but thanks to the magic of prioritized implicits @@ -323,8 +324,9 @@ object Ordering extends LowPriorityOrderingImplicits { * @tparam T the type of objects that this ordering can compare * @param outer the original ordering to be reversed */ + /** A reverse ordering. */ private final class Reverse[T](private[Ordering] val outer: Ordering[T]) extends Ordering[T] { - override def reverse: Ordering[T] = outer + override def reverse: Ordering[T] = outer override def isReverseOf(other: Ordering[?]): Boolean = other == outer def compare(x: T, y: T): Int = outer.compare(y, x) @@ -407,7 +409,7 @@ object Ordering extends LowPriorityOrderingImplicits { * @param cmp a function that returns `true` if the first argument is less than the second * @return an `Ordering[T]` whose comparison is derived from `cmp` */ - def fromLessThan[T](cmp: (T, T) => Boolean): Ordering[T] = new Ordering[T] { + def fromLessThan[T](cmp: (T, T) -> Boolean): Ordering[T] = new Ordering[T] { def compare(x: T, y: T) = if (cmp(x, y)) -1 else if (cmp(y, x)) 1 else 0 // overrides to avoid multiple comparisons override def lt(x: T, y: T): Boolean = cmp(x, y) @@ -432,7 +434,7 @@ object Ordering extends LowPriorityOrderingImplicits { * @param ord the implicit ordering for the extracted key type `S` * @return an `Ordering[T]` that orders values by applying `f` and comparing the results */ - def by[T, S](f: T => S)(implicit ord: Ordering[S]): Ordering[T] = new Ordering[T] { + def by[T, S](f: T -> S)(implicit ord: Ordering[S]): Ordering[T] = new Ordering[T] { def compare(x: T, y: T) = ord.compare(f(x), f(y)) override def lt(x: T, y: T): Boolean = ord.lt(f(x), f(y)) override def gt(x: T, y: T): Boolean = ord.gt(f(x), f(y)) diff --git a/library/src/scala/math/PartialOrdering.scala b/library/src/scala/math/PartialOrdering.scala index 6480bac5c74b..87aedc2d96c4 100644 --- a/library/src/scala/math/PartialOrdering.scala +++ b/library/src/scala/math/PartialOrdering.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` /** A trait for representing partial orderings. It is important to @@ -43,7 +44,7 @@ import scala.language.`2.13` */ trait PartialOrdering[T] extends Equiv[T] { - outer => + outer: PartialOrdering[T] => /** Result of comparing `x` with operand `y`. * Returns `None` if operands are not comparable. diff --git a/library/src/scala/math/PartiallyOrdered.scala b/library/src/scala/math/PartiallyOrdered.scala index fa1ffebaf51b..9a05875036c3 100644 --- a/library/src/scala/math/PartiallyOrdered.scala +++ b/library/src/scala/math/PartiallyOrdered.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` /** A class for partially ordered data. diff --git a/library/src/scala/math/ScalaNumericConversions.scala b/library/src/scala/math/ScalaNumericConversions.scala index 44c6a2cf2a0b..7d23eb3ee52f 100644 --- a/library/src/scala/math/ScalaNumericConversions.scala +++ b/library/src/scala/math/ScalaNumericConversions.scala @@ -13,6 +13,7 @@ package scala package math +import language.experimental.captureChecking import scala.language.`2.13` /** A slightly more specific conversion trait for classes which diff --git a/library/src/scala/math/package.scala b/library/src/scala/math/package.scala index ba32a051dcd9..406187f405db 100644 --- a/library/src/scala/math/package.scala +++ b/library/src/scala/math/package.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** The package object `scala.math` contains methods for performing basic diff --git a/library/src/scala/native.scala b/library/src/scala/native.scala index 2feb692688d6..3f221f521dcc 100644 --- a/library/src/scala/native.scala +++ b/library/src/scala/native.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** Marker for native methods. diff --git a/library/src/scala/noinline.scala b/library/src/scala/noinline.scala index 71d980ad4c33..e250224a314f 100644 --- a/library/src/scala/noinline.scala +++ b/library/src/scala/noinline.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/package.scala b/library/src/scala/package.scala index ccf0187cb9ea..bd8a1879a41f 100644 --- a/library/src/scala/package.scala +++ b/library/src/scala/package.scala @@ -10,6 +10,7 @@ * additional information regarding copyright ownership. */ +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.migration diff --git a/library/src/scala/ref/PhantomReference.scala b/library/src/scala/ref/PhantomReference.scala index e8fddedc1e13..11699003e94e 100644 --- a/library/src/scala/ref/PhantomReference.scala +++ b/library/src/scala/ref/PhantomReference.scala @@ -12,6 +12,7 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` class PhantomReference[+T <: AnyRef](value: T, queue: ReferenceQueue[T]) extends ReferenceWrapper[T] { diff --git a/library/src/scala/ref/Reference.scala b/library/src/scala/ref/Reference.scala index 5c227370230b..bbce06dabb90 100644 --- a/library/src/scala/ref/Reference.scala +++ b/library/src/scala/ref/Reference.scala @@ -12,6 +12,7 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/ref/ReferenceQueue.scala b/library/src/scala/ref/ReferenceQueue.scala index 05d3db0f90b9..259cf3bdde02 100644 --- a/library/src/scala/ref/ReferenceQueue.scala +++ b/library/src/scala/ref/ReferenceQueue.scala @@ -12,6 +12,7 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` class ReferenceQueue[+T <: AnyRef] { diff --git a/library/src/scala/ref/ReferenceWrapper.scala b/library/src/scala/ref/ReferenceWrapper.scala index bc877757b5df..e58341b3e225 100644 --- a/library/src/scala/ref/ReferenceWrapper.scala +++ b/library/src/scala/ref/ReferenceWrapper.scala @@ -12,11 +12,12 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.nowarn @nowarn("cat=deprecation") -trait ReferenceWrapper[+T <: AnyRef] extends Reference[T] with Proxy { +trait ReferenceWrapper[+T <: AnyRef] extends Reference[T] with Proxy with caps.Pure { val underlying: java.lang.ref.Reference[? <: T] override def get = Option(underlying.get) def apply() = { diff --git a/library/src/scala/ref/SoftReference.scala b/library/src/scala/ref/SoftReference.scala index 571f5e837e24..caf1f688ab39 100644 --- a/library/src/scala/ref/SoftReference.scala +++ b/library/src/scala/ref/SoftReference.scala @@ -12,6 +12,7 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` class SoftReference[+T <: AnyRef](value : T, queue : ReferenceQueue[T] | Null) extends ReferenceWrapper[T] { diff --git a/library/src/scala/ref/WeakReference.scala b/library/src/scala/ref/WeakReference.scala index ce1fc9653db0..542e1c1ad890 100644 --- a/library/src/scala/ref/WeakReference.scala +++ b/library/src/scala/ref/WeakReference.scala @@ -12,6 +12,7 @@ package scala.ref +import language.experimental.captureChecking import scala.language.`2.13` /** A wrapper class for java.lang.ref.WeakReference diff --git a/library/src/scala/runtime/ArrayCharSequence.scala b/library/src/scala/runtime/ArrayCharSequence.scala index 554b212f38ec..d62959fec091 100644 --- a/library/src/scala/runtime/ArrayCharSequence.scala +++ b/library/src/scala/runtime/ArrayCharSequence.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` // Still need this one since the implicit class ArrayCharSequence only converts diff --git a/library/src/scala/runtime/ClassValueCompat.scala b/library/src/scala/runtime/ClassValueCompat.scala index 0236d467fef1..a27eefe1e4fb 100644 --- a/library/src/scala/runtime/ClassValueCompat.scala +++ b/library/src/scala/runtime/ClassValueCompat.scala @@ -12,10 +12,11 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` import scala.runtime.ClassValueCompat._ -private[scala] abstract class ClassValueCompat[T] extends ClassValueInterface[T] { self => +private[scala] abstract class ClassValueCompat[T] extends ClassValueInterface[T] { self: ClassValueCompat[T] => private val instance: ClassValueInterface[T] = if (classValueAvailable) new JavaClassValue() else new FallbackClassValue() diff --git a/library/src/scala/runtime/LambdaDeserialize.scala b/library/src/scala/runtime/LambdaDeserialize.scala index f39be095ef21..8ecc96c4ba1a 100644 --- a/library/src/scala/runtime/LambdaDeserialize.scala +++ b/library/src/scala/runtime/LambdaDeserialize.scala @@ -18,6 +18,7 @@ import java.util import scala.annotation.varargs import scala.collection.immutable +import language.experimental.captureChecking import scala.language.`2.13` final class LambdaDeserialize private (lookup: MethodHandles.Lookup, targetMethods: Array[MethodHandle]) { diff --git a/library/src/scala/runtime/LambdaDeserializer.scala b/library/src/scala/runtime/LambdaDeserializer.scala index c76bdfbcb366..73d62c80fcd1 100644 --- a/library/src/scala/runtime/LambdaDeserializer.scala +++ b/library/src/scala/runtime/LambdaDeserializer.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` import java.lang.invoke._ diff --git a/library/src/scala/runtime/LazyRef.scala b/library/src/scala/runtime/LazyRef.scala index 0ce72941d6da..b311dcc42f95 100644 --- a/library/src/scala/runtime/LazyRef.scala +++ b/library/src/scala/runtime/LazyRef.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` /** Classes used as holders for lazy vals defined in methods. */ diff --git a/library/src/scala/runtime/MethodCache.scala b/library/src/scala/runtime/MethodCache.scala index 8f2692979df8..6083bb1e28d0 100644 --- a/library/src/scala/runtime/MethodCache.scala +++ b/library/src/scala/runtime/MethodCache.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` import java.lang.reflect.{ Method => JMethod } import java.lang.{ Class => JClass } diff --git a/library/src/scala/runtime/ModuleSerializationProxy.scala b/library/src/scala/runtime/ModuleSerializationProxy.scala index e5707b30e24b..5d808b574118 100644 --- a/library/src/scala/runtime/ModuleSerializationProxy.scala +++ b/library/src/scala/runtime/ModuleSerializationProxy.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` import java.io.Serializable import java.security.PrivilegedActionException diff --git a/library/src/scala/runtime/NonLocalReturnControl.scala b/library/src/scala/runtime/NonLocalReturnControl.scala index 4ac84221cbfc..85e360f06112 100644 --- a/library/src/scala/runtime/NonLocalReturnControl.scala +++ b/library/src/scala/runtime/NonLocalReturnControl.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` import scala.util.control.ControlThrowable diff --git a/library/src/scala/runtime/Nothing$.scala b/library/src/scala/runtime/Nothing$.scala index b657fddc0383..9b3aa8aa25b4 100644 --- a/library/src/scala/runtime/Nothing$.scala +++ b/library/src/scala/runtime/Nothing$.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/runtime/Null$.scala b/library/src/scala/runtime/Null$.scala index 0202462c914a..9fcdb0866ff1 100644 --- a/library/src/scala/runtime/Null$.scala +++ b/library/src/scala/runtime/Null$.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` /** diff --git a/library/src/scala/runtime/PStatics.scala b/library/src/scala/runtime/PStatics.scala index ccab25d3b901..d00cc34d579a 100644 --- a/library/src/scala/runtime/PStatics.scala +++ b/library/src/scala/runtime/PStatics.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` // things that should be in `Statics`, but can't be yet for bincompat reasons diff --git a/library/src/scala/runtime/RichBoolean.scala b/library/src/scala/runtime/RichBoolean.scala index fe52a97a9d9b..a28873332f46 100644 --- a/library/src/scala/runtime/RichBoolean.scala +++ b/library/src/scala/runtime/RichBoolean.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichByte.scala b/library/src/scala/runtime/RichByte.scala index c3d2d3a7767a..b02846ee7e10 100644 --- a/library/src/scala/runtime/RichByte.scala +++ b/library/src/scala/runtime/RichByte.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichChar.scala b/library/src/scala/runtime/RichChar.scala index 24869e0f4dbe..0a1322db7a2c 100644 --- a/library/src/scala/runtime/RichChar.scala +++ b/library/src/scala/runtime/RichChar.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichDouble.scala b/library/src/scala/runtime/RichDouble.scala index 170c64b64566..0943f97173fc 100644 --- a/library/src/scala/runtime/RichDouble.scala +++ b/library/src/scala/runtime/RichDouble.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichFloat.scala b/library/src/scala/runtime/RichFloat.scala index d19400e2a5a6..1003fb6fb6ff 100644 --- a/library/src/scala/runtime/RichFloat.scala +++ b/library/src/scala/runtime/RichFloat.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichInt.scala b/library/src/scala/runtime/RichInt.scala index 62ff5c4f70d6..7e93d0c3dcc1 100644 --- a/library/src/scala/runtime/RichInt.scala +++ b/library/src/scala/runtime/RichInt.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.immutable.Range diff --git a/library/src/scala/runtime/RichLong.scala b/library/src/scala/runtime/RichLong.scala index 27b1706917e7..68c111ecba67 100644 --- a/library/src/scala/runtime/RichLong.scala +++ b/library/src/scala/runtime/RichLong.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/RichShort.scala b/library/src/scala/runtime/RichShort.scala index 9630f1d22753..99a9e06ae54d 100644 --- a/library/src/scala/runtime/RichShort.scala +++ b/library/src/scala/runtime/RichShort.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") diff --git a/library/src/scala/runtime/ScalaNumberProxy.scala b/library/src/scala/runtime/ScalaNumberProxy.scala index 98b860d2ab99..424a63f56539 100644 --- a/library/src/scala/runtime/ScalaNumberProxy.scala +++ b/library/src/scala/runtime/ScalaNumberProxy.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.immutable import scala.math.ScalaNumericAnyConversions @@ -82,7 +83,7 @@ trait FractionalProxy[T] extends Any with ScalaNumberProxy[T] { @deprecated("use the extension methods available on primitive types instead", since = "3.10.0") trait OrderedProxy[T] extends Any with Ordered[T] with Proxy.Typed[T] { - protected def ord: Ordering[T] + protected def ord: Ordering[T]^ def compare(y: T) = ord.compare(self, y) } diff --git a/library/src/scala/runtime/ScalaRunTime.scala b/library/src/scala/runtime/ScalaRunTime.scala index 57870f9734aa..dd81cc925b1a 100644 --- a/library/src/scala/runtime/ScalaRunTime.scala +++ b/library/src/scala/runtime/ScalaRunTime.scala @@ -13,6 +13,7 @@ package scala package runtime +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.{AbstractIterator, AnyConstr, SortedOps, StrictOptimizedIterableOps, StringOps, StringView, View} import scala.collection.generic.IsIterable @@ -66,7 +67,7 @@ object ScalaRunTime { * @param idx the index of the element to retrieve * @return the element at position `idx` in the array */ - def array_apply(xs: AnyRef, idx: Int): Any = { + def array_apply(xs: AnyRef^, idx: Int): Any = { (xs: @unchecked) match { case x: Array[AnyRef] => x(idx).asInstanceOf[Any] case x: Array[Int] => x(idx).asInstanceOf[Any] @@ -87,7 +88,7 @@ object ScalaRunTime { * @param idx the index of the element to set * @param value the value to store at the given index */ - def array_update(xs: AnyRef, idx: Int, value: Any): Unit = { + def array_update(xs: AnyRef^, idx: Int, value: Any): Unit = { (xs: @unchecked) match { case x: Array[AnyRef] => x(idx) = value.asInstanceOf[AnyRef] case x: Array[Int] => x(idx) = value.asInstanceOf[Int] @@ -107,11 +108,11 @@ object ScalaRunTime { * @param xs the array to measure, as an `AnyRef` * @return the number of elements in the array */ - @inline def array_length(xs: AnyRef): Int = java.lang.reflect.Array.getLength(xs) + @inline def array_length(xs: AnyRef^): Int = java.lang.reflect.Array.getLength(xs) // TODO: bytecode Object.clone() will in fact work here and avoids // the type switch. See Array_clone comment in BCodeBodyBuilder. - def array_clone(xs: AnyRef): AnyRef = (xs: @unchecked) match { + def array_clone(xs: AnyRef^): AnyRef = (xs: @unchecked) match { case x: Array[AnyRef] => x.clone() case x: Array[Int] => x.clone() case x: Array[Double] => x.clone() @@ -131,7 +132,7 @@ object ScalaRunTime { * @param src the source array to convert, which may be a primitive array * @return an `Array[Object]` containing the (boxed) elements of `src` */ - def toObjectArray(src: AnyRef): Array[Object] = { + def toObjectArray(src: AnyRef^): Array[Object] = { def copy[@specialized T <: AnyVal](src: Array[T]): Array[Object] = { val length = src.length if (length == 0) Array.emptyObjectArray diff --git a/library/src/scala/runtime/StructuralCallSite.scala b/library/src/scala/runtime/StructuralCallSite.scala index bdd6983a7dd8..ad4d868ed79f 100644 --- a/library/src/scala/runtime/StructuralCallSite.scala +++ b/library/src/scala/runtime/StructuralCallSite.scala @@ -12,6 +12,7 @@ package scala.runtime +import language.experimental.captureChecking import scala.language.`2.13` import java.lang.invoke._ import java.lang.ref.SoftReference diff --git a/library/src/scala/runtime/VarArgsBuilder.scala b/library/src/scala/runtime/VarArgsBuilder.scala index c9aa2b3be556..56243f8a0c7a 100644 --- a/library/src/scala/runtime/VarArgsBuilder.scala +++ b/library/src/scala/runtime/VarArgsBuilder.scala @@ -1,5 +1,6 @@ package scala.runtime +import language.experimental.captureChecking import scala.collection.immutable.ArraySeq import scala.reflect.ClassTag @@ -220,4 +221,4 @@ object VarArgsBuilder: i += 1 this -end VarArgsBuilder \ No newline at end of file +end VarArgsBuilder diff --git a/library/src/scala/specialized.scala b/library/src/scala/specialized.scala index d02ddcf06191..6333bce2eaa6 100644 --- a/library/src/scala/specialized.scala +++ b/library/src/scala/specialized.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import Specializable._ diff --git a/library/src/scala/sys/BooleanProp.scala b/library/src/scala/sys/BooleanProp.scala index 0a09f7b50d0c..d9960bb61eac 100644 --- a/library/src/scala/sys/BooleanProp.scala +++ b/library/src/scala/sys/BooleanProp.scala @@ -13,6 +13,7 @@ package scala package sys +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions diff --git a/library/src/scala/sys/Prop.scala b/library/src/scala/sys/Prop.scala index 26536056f2aa..8d69bf341735 100644 --- a/library/src/scala/sys/Prop.scala +++ b/library/src/scala/sys/Prop.scala @@ -13,6 +13,7 @@ package scala package sys +import language.experimental.captureChecking import scala.language.`2.13` /** A lightweight interface wrapping a property contained in some @@ -95,7 +96,7 @@ object Prop { * @param key the property name used for lookup * @return a new `Prop[T]` backed by the given key */ - def apply(key: String): Prop[T] + def apply(key: String): Prop[T]^{this} } implicit object FileProp extends CreatorImpl[java.io.File](s => new java.io.File(s)) diff --git a/library/src/scala/sys/PropImpl.scala b/library/src/scala/sys/PropImpl.scala index 9c08e6700c14..8a03a20a97ff 100644 --- a/library/src/scala/sys/PropImpl.scala +++ b/library/src/scala/sys/PropImpl.scala @@ -13,6 +13,7 @@ package scala package sys +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.mutable @@ -52,5 +53,5 @@ private[sys] class PropImpl[+T](val key: String, valueFn: String => T) extends P } private[sys] abstract class CreatorImpl[+T](f: String => T) extends Prop.Creator[T] { - def apply(key: String): Prop[T] = new PropImpl[T](key, f) + def apply(key: String): Prop[T]^{f} = new PropImpl[T](key, f) } diff --git a/library/src/scala/sys/ShutdownHookThread.scala b/library/src/scala/sys/ShutdownHookThread.scala index cbcedeb00256..7cc6df9cfcfa 100644 --- a/library/src/scala/sys/ShutdownHookThread.scala +++ b/library/src/scala/sys/ShutdownHookThread.scala @@ -13,6 +13,7 @@ package scala package sys +import language.experimental.captureChecking import scala.language.`2.13` /** A minimal Thread wrapper to enhance shutdown hooks. It knows @@ -34,7 +35,8 @@ object ShutdownHookThread { * @param body the code to execute when the JVM shuts down * @return the newly created and registered `ShutdownHookThread` */ - def apply(body: => Unit): ShutdownHookThread = { + def apply(body: -> Unit): ShutdownHookThread = { + // CC note: shutdown hooks capture until the end of the program, so they have to be pure. val t = new ShutdownHookThread(() => body, hookName()) Runtime.getRuntime.addShutdownHook(t) t diff --git a/library/src/scala/sys/SystemProperties.scala b/library/src/scala/sys/SystemProperties.scala index 93b6a64a8905..89da9104a5a0 100644 --- a/library/src/scala/sys/SystemProperties.scala +++ b/library/src/scala/sys/SystemProperties.scala @@ -13,6 +13,7 @@ package scala package sys +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.{mutable, Iterator} import scala.jdk.CollectionConverters._ diff --git a/library/src/scala/sys/package.scala b/library/src/scala/sys/package.scala index 694e4849e520..ff82ce3634ab 100644 --- a/library/src/scala/sys/package.scala +++ b/library/src/scala/sys/package.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.collection.immutable.ArraySeq import scala.jdk.CollectionConverters._ @@ -73,6 +74,7 @@ package object sys { s } + // CC note: shutdown hooks capture until the end of the program, so they must be pure. /** Registers a shutdown hook to be run when the VM exits. * The hook is automatically registered: the returned value can be ignored, * but is available in case the Thread requires further modification. @@ -84,7 +86,7 @@ package object sys { * @return the `ShutdownHookThread` which will run the shutdown hook * @see [[scala.sys.ShutdownHookThread]] */ - def addShutdownHook(body: => Unit): ShutdownHookThread = ShutdownHookThread(body) + def addShutdownHook(body: -> Unit): ShutdownHookThread = ShutdownHookThread(body) /** Returns all active thread in the current thread's thread group and subgroups. * diff --git a/library/src/scala/throws.scala b/library/src/scala/throws.scala index dc8a692ec677..77de2d61a656 100644 --- a/library/src/scala/throws.scala +++ b/library/src/scala/throws.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** Annotation for specifying the exceptions thrown by a method. diff --git a/library/src/scala/transient.scala b/library/src/scala/transient.scala index 3ca34fba9f69..663adbe462a5 100644 --- a/library/src/scala/transient.scala +++ b/library/src/scala/transient.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._ diff --git a/library/src/scala/typeConstraints.scala b/library/src/scala/typeConstraints.scala index 5308271d8ac5..76c71e372f10 100644 --- a/library/src/scala/typeConstraints.scala +++ b/library/src/scala/typeConstraints.scala @@ -12,6 +12,7 @@ package scala +// import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.implicitNotFound @@ -169,10 +170,10 @@ object <:< { override def substituteContra[F[_]](ff: F[Any]) = ff override def apply(x: Any) = x override def flip: Any =:= Any = this - override def compose[C](r: C => Any) = r + override def compose[C](r: C => Any): C => Any = r override def compose[C](r: C <:< Any) = r override def compose[C](r: C =:= Any) = r - override def andThen[C](r: Any => C) = r + override def andThen[C](r: Any => C): Any => C = r override def andThen[C](r: Any <:< C) = r override def andThen[C](r: Any =:= C) = r override def liftCo [F[_]] = asInstanceOf[F[Any] =:= F[Any]] diff --git a/library/src/scala/unchecked.scala b/library/src/scala/unchecked.scala index 6864317be3e6..9001c1d23a48 100644 --- a/library/src/scala/unchecked.scala +++ b/library/src/scala/unchecked.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` /** An annotation to designate that the annotated entity diff --git a/library/src/scala/util/ChainingOps.scala b/library/src/scala/util/ChainingOps.scala index 8c978f88d29f..c80c25dc246d 100644 --- a/library/src/scala/util/ChainingOps.scala +++ b/library/src/scala/util/ChainingOps.scala @@ -13,6 +13,7 @@ package scala package util +import language.experimental.captureChecking import scala.language.`2.13` import scala.language.implicitConversions import language.experimental.captureChecking diff --git a/library/src/scala/util/DynamicVariable.scala b/library/src/scala/util/DynamicVariable.scala index e7c90298d909..f57308ab738e 100644 --- a/library/src/scala/util/DynamicVariable.scala +++ b/library/src/scala/util/DynamicVariable.scala @@ -13,6 +13,7 @@ package scala package util +import language.experimental.captureChecking import scala.language.`2.13` import java.lang.InheritableThreadLocal diff --git a/library/src/scala/util/Either.scala b/library/src/scala/util/Either.scala index 2b6313409af6..b5f16a80da44 100644 --- a/library/src/scala/util/Either.scala +++ b/library/src/scala/util/Either.scala @@ -13,6 +13,7 @@ package scala package util +import language.experimental.captureChecking import scala.language.`2.13` import language.experimental.captureChecking diff --git a/library/src/scala/util/Properties.scala b/library/src/scala/util/Properties.scala index 250087adec48..a0d6adedbd4e 100644 --- a/library/src/scala/util/Properties.scala +++ b/library/src/scala/util/Properties.scala @@ -13,6 +13,7 @@ package scala package util +import language.experimental.captureChecking import scala.language.`2.13` import java.io.{IOException, PrintWriter} import java.util.jar.Attributes.{Name => AttributeName} diff --git a/library/src/scala/util/Random.scala b/library/src/scala/util/Random.scala index 0187130d0505..2eeff2a50c4b 100644 --- a/library/src/scala/util/Random.scala +++ b/library/src/scala/util/Random.scala @@ -13,6 +13,7 @@ package scala package util +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.{migration, tailrec} import scala.collection.mutable.ArrayBuffer @@ -262,7 +263,7 @@ class Random(val self: java.util.Random^) extends AnyRef with Serializable { * @param bf the implicit `BuildFrom` instance used to build the result collection * @return the shuffled collection */ - def shuffle[T, C](xs: IterableOnce[T])(implicit bf: BuildFrom[xs.type, T, C]): C = { + def shuffle[T, C](xs: IterableOnce[T]^)(implicit bf: BuildFrom[xs.type, T, C]): C = { val buf = new ArrayBuffer[T] ++= xs def swap(i1: Int, i2: Int): Unit = { diff --git a/library/src/scala/util/Sorting.scala b/library/src/scala/util/Sorting.scala index db1ced5eed11..0f3c4b669ec9 100644 --- a/library/src/scala/util/Sorting.scala +++ b/library/src/scala/util/Sorting.scala @@ -13,6 +13,8 @@ package scala package util +// Context bounds cannot carry a capture set +// import language.experimental.captureChecking import scala.language.`2.13` import scala.reflect.ClassTag import scala.math.Ordering @@ -289,7 +291,7 @@ object Sorting { * @param a the array to sort in place * @param f a function that returns `true` if its first argument is less than its second */ - @`inline` def stableSort[K](a: Array[K], f: (K, K) => Boolean): Unit = stableSort(a, f, 0, a.length) + @`inline` def stableSort[K](a: Array[K], f: (K, K) -> Boolean): Unit = stableSort(a, f, 0, a.length) // TODO: make this fast for primitive K (could be specialized if it didn't go through Ordering) /** Sorts array `a` or a part of it using function `f` that computes the less-than relation for each element. @@ -301,7 +303,7 @@ object Sorting { * @param from the first index in the array to sort * @param until the last index (exclusive) in the array to sort */ - def stableSort[K](a: Array[K], f: (K, K) => Boolean, from: Int, until: Int): Unit = sort(a, from, until, Ordering fromLessThan f) + def stableSort[K](a: Array[K], f: (K, K) -> Boolean, from: Int, until: Int): Unit = sort(a, from, until, Ordering fromLessThan f) /** A sorted Array, using the Ordering for the elements in the sequence `a`. Uses `java.util.Arrays.sort` unless `K` is a primitive type. * @@ -323,7 +325,7 @@ object Sorting { * @param f a function that returns `true` if its first argument is less than its second * @return a new array containing the elements of `a` sorted according to the less-than relation `f` */ - def stableSort[K: ClassTag](a: scala.collection.Seq[K], f: (K, K) => Boolean): Array[K] = { + def stableSort[K: ClassTag](a: scala.collection.Seq[K], f: (K, K) -> Boolean): Array[K] = { val ret = a.toArray sort(ret, 0, ret.length, Ordering fromLessThan f) ret @@ -337,7 +339,7 @@ object Sorting { * @param f a function that extracts a comparable key from each element * @return a new array containing the elements of `a` sorted by comparing the keys produced by `f` */ - def stableSort[K: ClassTag, M: Ordering](a: scala.collection.Seq[K], f: K => M): Array[K] = { + def stableSort[K: ClassTag, M: Ordering](a: scala.collection.Seq[K], f: K -> M): Array[K] = { val ret = a.toArray sort(ret, 0, ret.length, Ordering[M] on f) ret diff --git a/library/src/scala/util/control/Exception.scala b/library/src/scala/util/control/Exception.scala index 7b9221759488..e414b8992e4e 100644 --- a/library/src/scala/util/control/Exception.scala +++ b/library/src/scala/util/control/Exception.scala @@ -14,6 +14,7 @@ package scala package util package control +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.tailrec import scala.reflect.{ClassTag, classTag} @@ -174,7 +175,7 @@ import scala.language.implicitConversions object Exception { type Catcher[+T] = PartialFunction[Throwable, T] - def mkCatcher[Ex <: Throwable: ClassTag, T](isDef: Ex => Boolean, f: Ex => T): PartialFunction[Throwable, T] = new Catcher[T] { + def mkCatcher[Ex <: Throwable: ClassTag, T](isDef: Ex => Boolean, f: Ex => T): PartialFunction[Throwable, T]^{isDef, f} = new Catcher[T] { private def downcast(x: Throwable): Option[Ex] = if (classTag[Ex].runtimeClass.isAssignableFrom(x.getClass)) Some(x.asInstanceOf[Ex]) else None @@ -183,9 +184,9 @@ object Exception { def apply(x: Throwable): T = f(downcast(x).get) } - def mkThrowableCatcher[T](isDef: Throwable => Boolean, f: Throwable => T): PartialFunction[Throwable, T] = mkCatcher[Throwable, T](isDef, f) + def mkThrowableCatcher[T](isDef: Throwable => Boolean, f: Throwable => T): PartialFunction[Throwable, T]^{isDef, f} = mkCatcher[Throwable, T](isDef, f) - implicit def throwableSubtypeToCatcher[Ex <: Throwable: ClassTag, T](pf: PartialFunction[Ex, T]): Catcher[T] = + implicit def throwableSubtypeToCatcher[Ex <: Throwable: ClassTag, T](pf: PartialFunction[Ex, T]^): Catcher[T]^{pf} = mkCatcher(pf.isDefinedAt, pf.apply) /** !!! Not at all sure of every factor which goes into this, @@ -233,7 +234,7 @@ object Exception { * @group logic-container */ class Catch[+T]( - val pf: Catcher[T], + val pf: Catcher[T]^, val fin: Option[Finally] = None, val rethrow: Throwable => Boolean = shouldRethrow) extends Described { @@ -246,8 +247,8 @@ object Exception { * @param pf2 the additional exception handler to combine with the existing one * @return a new `Catch` that tries this catch's handler first, falling back to `pf2` */ - def or[U >: T](pf2: Catcher[U]): Catch[U] = new Catch(pf orElse pf2, fin, rethrow) - def or[U >: T](other: Catch[U]): Catch[U] = or(other.pf) + def or[U >: T](pf2: Catcher[U]^): Catch[U]^{this, pf2} = new Catch(pf orElse pf2, fin, rethrow) + def or[U >: T](other: Catch[U]^): Catch[U]^{this, other} = or(other.pf) /** Applies this catch logic to the supplied body. * @@ -268,7 +269,7 @@ object Exception { * @param body the additional logic to apply after all existing finally bodies * @return a new `Catch` with the same catch logic and `body` appended to the finally logic */ - def andFinally(body: => Unit): Catch[T] = { + def andFinally(body: => Unit): Catch[T]^{this, body} = { val appendedFin = fin map(_ and body) getOrElse new Finally(body) new Catch(pf, Some(appendedFin), rethrow) } @@ -308,7 +309,7 @@ object Exception { * @param f the function to apply to caught exceptions instead of the current handler * @return a new `Catch` that handles the same exceptions but produces results by applying `f` */ - def withApply[U](f: Throwable => U): Catch[U] = { + def withApply[U](f: Throwable => U): Catch[U]^{this, f} = { val pf2 = new Catcher[U] { def isDefinedAt(x: Throwable): Boolean = pf isDefinedAt x def apply(x: Throwable): U = f(x) @@ -317,9 +318,9 @@ object Exception { } /** Convenience methods. */ - def toOption: Catch[Option[T]] = withApply(_ => None) - def toEither: Catch[Either[Throwable, T]] = withApply(Left(_)) - def toTry: Catch[scala.util.Try[T]] = withApply(x => Failure(x)) + def toOption: Catch[Option[T]]^{this} = withApply(_ => None) + def toEither: Catch[Either[Throwable, T]]^{this} = withApply(Left(_)) + def toTry: Catch[scala.util.Try[T]]^{this} = withApply(x => Failure(x)) } final val nothingCatcher: Catcher[Nothing] = mkThrowableCatcher(_ => false, throw _) @@ -405,7 +406,7 @@ object Exception { * @param value the default value to return when one of the specified exceptions is caught * @return a `Catch[T]` that returns `value` when any of the specified exceptions is caught */ - def failAsValue[T](exceptions: Class[?]*)(value: => T): Catch[T] = + def failAsValue[T](exceptions: Class[?]*)(value: => T): Catch[T]^{value} = catching(exceptions*) withApply (_ => value) class By[T,R](f: T => R) { @@ -428,9 +429,9 @@ object Exception { * * @return a `By` builder whose `by` method takes a handler function and returns a configured `Catch[T]` */ - def handling[T](exceptions: Class[?]*): By[Throwable => T, Catch[T]] = { - def fun(f: Throwable => T): Catch[T] = catching(exceptions*) withApply f - new By[Throwable => T, Catch[T]](fun) + def handling[T](exceptions: Class[?]*): By[Throwable -> T, Catch[T]] = { /* CC note: By is invariant. :( */ + def fun(f: Throwable -> T): Catch[T] = catching(exceptions*) withApply f + new By[Throwable -> T, Catch[T]](fun) } /** Returns a `Catch` object with no catch logic and the argument as the finally logic. @@ -439,7 +440,7 @@ object Exception { * @tparam T the result type of the `Catch` body * @param body the finally logic to execute after the `Catch` body completes */ - def ultimately[T](body: => Unit): Catch[T] = noCatch andFinally body + def ultimately[T](body: => Unit): Catch[T]^{body} = noCatch andFinally body /** Creates a `Catch` object which unwraps any of the supplied exceptions. * @group composition-catch diff --git a/library/src/scala/util/control/NoStackTrace.scala b/library/src/scala/util/control/NoStackTrace.scala index b24b3a46f3a3..05d5b918649c 100644 --- a/library/src/scala/util/control/NoStackTrace.scala +++ b/library/src/scala/util/control/NoStackTrace.scala @@ -13,6 +13,7 @@ package scala package util.control +import language.experimental.captureChecking import scala.language.`2.13` /** A trait for exceptions which, for efficiency reasons, do not diff --git a/library/src/scala/util/control/NonFatal.scala b/library/src/scala/util/control/NonFatal.scala index 6c8e0c186ee5..3d6d145421e7 100644 --- a/library/src/scala/util/control/NonFatal.scala +++ b/library/src/scala/util/control/NonFatal.scala @@ -13,6 +13,7 @@ package scala package util.control +import language.experimental.captureChecking import scala.language.`2.13` /** Extractor of non-fatal Throwables. Will not match fatal errors like `VirtualMachineError` diff --git a/library/src/scala/volatile.scala b/library/src/scala/volatile.scala index 75b615ee6c7d..d6e5b01a78df 100644 --- a/library/src/scala/volatile.scala +++ b/library/src/scala/volatile.scala @@ -12,6 +12,7 @@ package scala +import language.experimental.captureChecking import scala.language.`2.13` import scala.annotation.meta._