Skip to content

Commit 474ac9e

Browse files
committed
Make maybeCapability a compiler-generated symbol without source
It's used only during the capture checking phase, cannot appear in source or Tasty. So it's best contained as a synthetic symbol created directly by the compiler.
1 parent 8cfa482 commit 474ac9e

File tree

5 files changed

+10
-13
lines changed

5 files changed

+10
-13
lines changed

compiler/src/dotty/tools/dotc/cc/CaptureOps.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ extension (tp: Type)
240240
*
241241
* Array[_ >: C^{} <: C^{x}]
242242
*
243-
* but it has fewer issues with type inference.
243+
* but it has fewer issues with type inference.
244244
*/
245245
def maybe(using Context): CaptureRef = tp match
246246
case tp: CaptureRef if tp.isTrackableRef =>

compiler/src/dotty/tools/dotc/core/Definitions.scala

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,10 @@ class Definitions {
535535
List(AnyType), EmptyScope)
536536
@tu lazy val SingletonType: TypeRef = SingletonClass.typeRef
537537

538+
@tu lazy val MaybeCapabilityAnnot: ClassSymbol =
539+
completeClass(enterCompleteClassSymbol(
540+
ScalaPackageClass, tpnme.maybeCapability, Final, List(StaticAnnotationClass.typeRef)))
541+
538542
@tu lazy val CollectionSeqType: TypeRef = requiredClassRef("scala.collection.Seq")
539543
@tu lazy val SeqType: TypeRef = requiredClassRef("scala.collection.immutable.Seq")
540544
@tu lazy val SeqModule: Symbol = requiredModule("scala.collection.immutable.Seq")
@@ -993,7 +997,7 @@ class Definitions {
993997

994998
// Annotation base classes
995999
@tu lazy val AnnotationClass: ClassSymbol = requiredClass("scala.annotation.Annotation")
996-
// @tu lazy val StaticAnnotationClass: ClassSymbol = requiredClass("scala.annotation.StaticAnnotation")
1000+
@tu lazy val StaticAnnotationClass: ClassSymbol = requiredClass("scala.annotation.StaticAnnotation")
9971001
@tu lazy val RefiningAnnotationClass: ClassSymbol = requiredClass("scala.annotation.RefiningAnnotation")
9981002
@tu lazy val JavaAnnotationClass: ClassSymbol = requiredClass("java.lang.annotation.Annotation")
9991003

@@ -1054,7 +1058,6 @@ class Definitions {
10541058
@tu lazy val FunctionalInterfaceAnnot: ClassSymbol = requiredClass("java.lang.FunctionalInterface")
10551059
@tu lazy val TargetNameAnnot: ClassSymbol = requiredClass("scala.annotation.targetName")
10561060
@tu lazy val VarargsAnnot: ClassSymbol = requiredClass("scala.annotation.varargs")
1057-
@tu lazy val MaybeCapabilityAnnot = requiredClass("scala.annotation.internal.maybeCapability")
10581061
@tu lazy val ReachCapabilityAnnot = requiredClass("scala.annotation.internal.reachCapability")
10591062
@tu lazy val RequiresCapabilityAnnot: ClassSymbol = requiredClass("scala.annotation.internal.requiresCapability")
10601063
@tu lazy val RetainsAnnot: ClassSymbol = requiredClass("scala.annotation.retains")
@@ -2137,7 +2140,8 @@ class Definitions {
21372140
AnyValClass,
21382141
NullClass,
21392142
NothingClass,
2140-
SingletonClass)
2143+
SingletonClass,
2144+
MaybeCapabilityAnnot)
21412145

21422146
@tu lazy val syntheticCoreClasses: List[Symbol] = syntheticScalaClasses ++ List(
21432147
EmptyPackageVal,

compiler/src/dotty/tools/dotc/core/StdNames.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,7 @@ object StdNames {
537537
val ManifestFactory: N = "ManifestFactory"
538538
val manifestToTypeTag: N = "manifestToTypeTag"
539539
val map: N = "map"
540+
val maybeCapability: N = "maybeCapability"
540541
val materializeClassTag: N = "materializeClassTag"
541542
val materializeWeakTypeTag: N = "materializeWeakTypeTag"
542543
val materializeTypeTag: N = "materializeTypeTag"

library/src/scala/annotation/internal/maybeCapability.scala

Lines changed: 0 additions & 8 deletions
This file was deleted.

tests/neg/i19470.check

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
-- [E007] Type Mismatch Error: tests/neg/i19470.scala:9:12 -------------------------------------------------------------
22
9 | List(foo(f())) // error
33
| ^^^^^^^^
4-
| Found: Inv[? >: IO <: box IO^{f}]
4+
| Found: Inv[box IO^{f?}]
55
| Required: box Inv[box IO^?]^?
66
|
77
| longer explanation available when compiling with `-explain`

0 commit comments

Comments
 (0)