diff --git a/compiler/src/dotty/tools/dotc/core/Definitions.scala b/compiler/src/dotty/tools/dotc/core/Definitions.scala index 1098d8822f05..675500b137ce 100644 --- a/compiler/src/dotty/tools/dotc/core/Definitions.scala +++ b/compiler/src/dotty/tools/dotc/core/Definitions.scala @@ -843,10 +843,10 @@ class Definitions { @tu lazy val EqlClass: ClassSymbol = requiredClass("scala.Eql") def Eql_eqlAny(using Context): TermSymbol = EqlClass.companionModule.requiredMethod(nme.eqlAny) - @tu lazy val TypeBoxClass: ClassSymbol = requiredClass("scala.internal.TypeBox") + @tu lazy val TypeBoxClass: ClassSymbol = requiredClass("scala.runtime.TypeBox") @tu lazy val TypeBox_CAP: TypeSymbol = TypeBoxClass.requiredType(tpnme.CAP) - @tu lazy val MatchCaseClass: ClassSymbol = requiredClass("scala.internal.MatchCase") + @tu lazy val MatchCaseClass: ClassSymbol = requiredClass("scala.runtime.MatchCase") @tu lazy val NotClass: ClassSymbol = requiredClass("scala.util.Not") @tu lazy val Not_value: Symbol = NotClass.companionModule.requiredMethod(nme.value) diff --git a/library/src-bootstrapped/scala/runtime/MatchCase.scala b/library/src-bootstrapped/scala/runtime/MatchCase.scala new file mode 100644 index 000000000000..2f1a27328bbc --- /dev/null +++ b/library/src-bootstrapped/scala/runtime/MatchCase.scala @@ -0,0 +1,5 @@ +package scala.runtime + +/** A type constructor for a case in a match type. + */ +final abstract class MatchCase[Pat, +Body] diff --git a/library/src-bootstrapped/scala/runtime/TypeBox.scala b/library/src-bootstrapped/scala/runtime/TypeBox.scala new file mode 100644 index 000000000000..ec2e42eeafc7 --- /dev/null +++ b/library/src-bootstrapped/scala/runtime/TypeBox.scala @@ -0,0 +1,11 @@ +package scala.runtime + +/** A type for skolems that are generated during capture conversion. Capture conversion + * narrows the type of a tree whose type has wildcard arguments. A typical situation + * is a tree `t` of type `C[_ >: L <: U]` and an expected type `C[X]` where `X` is an + * instantiatable type variable. To be able to instantiate `X`, we cast the tree to type + * `X[$n.CAP]` where `$n` is a fresh skolem type with underlying type `TypeBox[L, U]`. + */ +final abstract class TypeBox[-L <: U, +U] { + type CAP >: L <: U +} diff --git a/library/src/scala/internal/MatchCase.scala b/library/src-non-bootstrapped/scala/internal/MatchCase.scala similarity index 100% rename from library/src/scala/internal/MatchCase.scala rename to library/src-non-bootstrapped/scala/internal/MatchCase.scala diff --git a/library/src/scala/internal/TypeBox.scala b/library/src-non-bootstrapped/scala/internal/TypeBox.scala similarity index 100% rename from library/src/scala/internal/TypeBox.scala rename to library/src-non-bootstrapped/scala/internal/TypeBox.scala diff --git a/library/src/scala/Tuple.scala b/library/src/scala/Tuple.scala index a17e73c509be..bbd9041f052c 100644 --- a/library/src/scala/Tuple.scala +++ b/library/src/scala/Tuple.scala @@ -1,7 +1,6 @@ package scala import annotation.showAsInfix import compiletime._ -import internal._ /** Tuple of arbitrary arity */ sealed trait Tuple extends Product { diff --git a/tests/run-macros/tasty-construct-types/Macro_1.scala b/tests/run-macros/tasty-construct-types/Macro_1.scala index deaafe8ba372..e64cffa2965f 100644 --- a/tests/run-macros/tasty-construct-types/Macro_1.scala +++ b/tests/run-macros/tasty-construct-types/Macro_1.scala @@ -36,7 +36,7 @@ object Macros { TypeLambda( List("t"), _ => List(TypeBounds(TypeRepr.of[Nothing], TypeRepr.of[Any])), - tl => TypeRepr.of[scala.internal.MatchCase].appliedTo(List(TypeRepr.of[List].appliedTo(tl.param(0)), tl.param(0))))) + tl => TypeRepr.of[scala.runtime.MatchCase].appliedTo(List(TypeRepr.of[List].appliedTo(tl.param(0)), tl.param(0))))) ) assert(x1T =:= TypeRepr.of[1]) @@ -53,4 +53,3 @@ object Macros { } } } -