From 8ebfe235e899aa762ff9d1d160f8dc9e0fb7f4ee Mon Sep 17 00:00:00 2001 From: odersky Date: Mon, 24 Oct 2022 17:23:56 +0200 Subject: [PATCH 1/3] Make definitions used in capture checking again @experimental #16199 dropped their experimental status to allow experimenting with compiling the compiler under -Ycc, but that was meant as a local change that should not have been propagated to main. --- library/src/scala/annotation/retains.scala | 4 ++-- library/src/scala/caps.scala | 2 +- project/MiMaFilters.scala | 4 ---- .../tasty-inspector/stdlibExperimentalDefinitions.scala | 5 ++++- 4 files changed, 7 insertions(+), 8 deletions(-) diff --git a/library/src/scala/annotation/retains.scala b/library/src/scala/annotation/retains.scala index 0a06eecde604..0e4e35a14b97 100644 --- a/library/src/scala/annotation/retains.scala +++ b/library/src/scala/annotation/retains.scala @@ -11,8 +11,8 @@ package scala.annotation * The annotation can also be written explicitly if one wants to avoid the * non-standard capturing type syntax. */ -// @experimental // suppressed so we can use in compiler +@experimental class retains(xs: Any*) extends annotation.StaticAnnotation -// @experimental // suppressed so we can use in compiler +@experimental class retainsUniversal extends annotation.StaticAnnotation diff --git a/library/src/scala/caps.scala b/library/src/scala/caps.scala index c33cb6fa98df..fd697b946d48 100644 --- a/library/src/scala/caps.scala +++ b/library/src/scala/caps.scala @@ -2,7 +2,7 @@ package scala import annotation.experimental -// @experimental , suppress @experimental so we can use in compiler itself +@experimental object caps: /** If argument is of type `cs T`, converts to type `box cs T`. This diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index ff4e1f7ebce2..491ef19d70cf 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -4,9 +4,5 @@ import com.typesafe.tools.mima.core._ object MiMaFilters { val Library: Seq[ProblemFilter] = Seq( ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.MappedAlternative"), - ProblemFilters.exclude[MissingClassProblem]("scala.caps"), - ProblemFilters.exclude[MissingClassProblem]("scala.caps$"), - ProblemFilters.exclude[MissingClassProblem]("scala.annotation.retains"), - ProblemFilters.exclude[MissingClassProblem]("scala.annotation.retainsUniversal"), ) } diff --git a/tests/run-custom-args/tasty-inspector/stdlibExperimentalDefinitions.scala b/tests/run-custom-args/tasty-inspector/stdlibExperimentalDefinitions.scala index 261c305b53d7..22232ea55f69 100644 --- a/tests/run-custom-args/tasty-inspector/stdlibExperimentalDefinitions.scala +++ b/tests/run-custom-args/tasty-inspector/stdlibExperimentalDefinitions.scala @@ -50,8 +50,11 @@ val experimentalDefinitionInLibrary = Set( "scala.annotation.capability", "scala.annotation.internal.CaptureChecked", "scala.annotation.internal.requiresCapability", - //"scala.annotation.retains", + "scala.annotation.retains", + "scala.annotation.retainsUniversal", "scala.annotation.retainsByName", + "scala.caps", + "scala.caps$", //// New APIs: Mirror // Can be stabilized in 3.3.0 or later. From 92f35471710f11a8de46b341e99c7caa5194bef7 Mon Sep 17 00:00:00 2001 From: odersky Date: Mon, 24 Oct 2022 21:43:35 +0200 Subject: [PATCH 2/3] Try to update MimaFilters It seems to not like scala.caps, even though it is experimental. --- library/src/scala/caps.scala | 3 +-- project/MiMaFilters.scala | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library/src/scala/caps.scala b/library/src/scala/caps.scala index fd697b946d48..886cfbcfb057 100644 --- a/library/src/scala/caps.scala +++ b/library/src/scala/caps.scala @@ -2,8 +2,7 @@ package scala import annotation.experimental -@experimental -object caps: +@experimental object caps: /** If argument is of type `cs T`, converts to type `box cs T`. This * avoids the error that would be raised when boxing `*`. diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 491ef19d70cf..3d5541df4041 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -4,5 +4,6 @@ import com.typesafe.tools.mima.core._ object MiMaFilters { val Library: Seq[ProblemFilter] = Seq( ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.MappedAlternative"), + ProblemFilters.exclude[MissingClassProblem]("scala.caps"), ) } From ea8e4c04ada1d5ed9d1b1074dc021ab972a3621c Mon Sep 17 00:00:00 2001 From: odersky Date: Mon, 24 Oct 2022 21:53:32 +0200 Subject: [PATCH 3/3] Exclude files in dotty package from experimental checks --- compiler/src/dotty/tools/dotc/core/StdNames.scala | 1 + compiler/src/dotty/tools/dotc/transform/SymUtils.scala | 2 ++ .../no-experimental/dotty-experimental.scala | 6 ++++++ 3 files changed, 9 insertions(+) create mode 100644 tests/pos-custom-args/no-experimental/dotty-experimental.scala diff --git a/compiler/src/dotty/tools/dotc/core/StdNames.scala b/compiler/src/dotty/tools/dotc/core/StdNames.scala index bff957721b23..a38331b71b05 100644 --- a/compiler/src/dotty/tools/dotc/core/StdNames.scala +++ b/compiler/src/dotty/tools/dotc/core/StdNames.scala @@ -445,6 +445,7 @@ object StdNames { val derived: N = "derived" val derives: N = "derives" val doubleHash: N = "doubleHash" + val dotty: N = "dotty" val drop: N = "drop" val dynamics: N = "dynamics" val elem: N = "elem" diff --git a/compiler/src/dotty/tools/dotc/transform/SymUtils.scala b/compiler/src/dotty/tools/dotc/transform/SymUtils.scala index 0a6fa9217303..6010fe2a2a44 100644 --- a/compiler/src/dotty/tools/dotc/transform/SymUtils.scala +++ b/compiler/src/dotty/tools/dotc/transform/SymUtils.scala @@ -363,6 +363,8 @@ object SymUtils: self.hasAnnotation(defn.ExperimentalAnnot) || isDefaultArgumentOfExperimentalMethod || (!self.is(Package) && self.owner.isInExperimentalScope) + || self.topLevelClass.ownersIterator.exists(p => + p.is(Package) && p.owner.isRoot && p.name == tpnme.dotty) /** The declared self type of this class, as seen from `site`, stripping * all refinements for opaque types. diff --git a/tests/pos-custom-args/no-experimental/dotty-experimental.scala b/tests/pos-custom-args/no-experimental/dotty-experimental.scala new file mode 100644 index 000000000000..74e79c85eaaa --- /dev/null +++ b/tests/pos-custom-args/no-experimental/dotty-experimental.scala @@ -0,0 +1,6 @@ +package dotty.tools +object test { + + val x = caps.unsafeBox + +}