From d31a9205e6a4d0400fa673d911230139c509ece4 Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Mon, 5 May 2025 16:50:49 +0200 Subject: [PATCH 1/2] Make caps.{Capability, Classifier, Shareable, Control} non-experimental These are all neccessary for boundary.Label --- compiler/src/dotty/tools/dotc/core/Definitions.scala | 4 ++-- library/src/scala/caps/package.scala | 4 ---- tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala | 4 ---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala index c5dd4662a7b8..2d24d994d30d 100644 --- a/compiler/src/dotty/tools/dotc/core/Definitions.scala +++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala @@ -2111,8 +2111,8 @@ class Definitions { */ @tu lazy val ccExperimental: Set[Symbol] = Set( CapsModule, CapsModule.moduleClass, PureClass, - Caps_Capability, // TODO: Remove when Capability is stabilized - Caps_Classifier, Caps_SharedCapability, Caps_Control, Caps_ExclusiveCapability, Caps_Mutable, Caps_Read, + /* Caps_Classifier, Caps_SharedCapability, Caps_Control, -- already stable */ + Caps_ExclusiveCapability, Caps_Mutable, Caps_Read, RequiresCapabilityAnnot, captureRoot, Caps_CapSet, Caps_ContainsTrait, Caps_ContainsModule, Caps_ContainsModule.moduleClass, UseAnnot, ConsumeAnnot, CapsUnsafeModule, CapsUnsafeModule.moduleClass, diff --git a/library/src/scala/caps/package.scala b/library/src/scala/caps/package.scala index 3cb0d5a0251c..c93ffb86e670 100644 --- a/library/src/scala/caps/package.scala +++ b/library/src/scala/caps/package.scala @@ -24,14 +24,12 @@ import annotation.{experimental, compileTimeOnly, retainsCap} * * Capability has exactly two subtraits: Shared and Exclusive. */ -@experimental sealed trait Capability extends Any /** A marker trait for classifier capabilities that can appear in `.only` * qualifiers. Capability classes directly extending `Classifier` are treated * as classifier capbilities */ -@experimental trait Classifier /** The universal capture reference. */ @@ -41,7 +39,6 @@ object cap extends Capability /** Marker trait for capabilities that can be safely shared in a concurrent context. * During separation checking, shared capabilities are not taken into account. */ -@experimental trait SharedCapability extends Capability, Classifier @experimental @@ -58,7 +55,6 @@ type Exclusive = ExclusiveCapability /** Base trait for capabilities that capture some continuation or return point in * the stack. Examples are exceptions, labels, Async, CanThrow. */ -@experimental trait Control extends SharedCapability, Classifier /** Marker trait for classes with methods that require an exclusive reference. */ diff --git a/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala b/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala index 1f27c0224a68..daffe740fc86 100644 --- a/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala +++ b/tests/run-tasty-inspector/stdlibExperimentalDefinitions.scala @@ -32,17 +32,13 @@ val experimentalDefinitionInLibrary = Set( "scala.annotation.retainsCap", "scala.Pure", "scala.caps.CapSet", - "scala.caps.Capability", - "scala.caps.Classifier", "scala.caps.Contains", "scala.caps.Contains$", "scala.caps.Contains$.containsImpl", "scala.caps.Exists", - "scala.caps.SharedCapability", "scala.caps.ExclusiveCapability", "scala.caps.Mutable", "scala.caps.Read", - "scala.caps.Control", "scala.caps.consume", "scala.caps.internal", "scala.caps.internal$", From a402cf33add05a7d235f8faef42786572e534a8e Mon Sep 17 00:00:00 2001 From: Natsu Kagami Date: Fri, 11 Jul 2025 14:45:50 +0200 Subject: [PATCH 2/2] Add MiMa filter --- project/MiMaFilters.scala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 5a4be70987a5..c01b787d559f 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -24,6 +24,12 @@ object MiMaFilters { ProblemFilters.exclude[MissingClassProblem]("scala.Conversion$"), ProblemFilters.exclude[MissingClassProblem]("scala.annotation.stableNull"), + + // Change `caps.Capability` to non-experimental + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Capability"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Classifier"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.SharedCapability"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps.Control"), ), // Additions since last LTS