Skip to content

Commit f637591

Browse files
authored
Exclusive capabilities revised (#22544)
This time hopefully without the timeout in the CI
2 parents f5ba8d6 + 071bf19 commit f637591

File tree

156 files changed

+4061
-744
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

156 files changed

+4061
-744
lines changed

compiler/src/dotty/tools/backend/jvm/BTypesFromSymbols.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ class BTypesFromSymbols[I <: DottyBackendInterface](val int: I, val frontendAcce
285285
// tests/run/serialize.scala and https://github.com/typelevel/cats-effect/pull/2360).
286286
val privateFlag = !sym.isClass && (sym.is(Private) || (sym.isPrimaryConstructor && sym.owner.isTopLevelModuleClass))
287287

288-
val finalFlag = sym.is(Final) && !toDenot(sym).isClassConstructor && !sym.is(Mutable, butNot = Accessor) && !sym.enclosingClass.is(Trait)
288+
val finalFlag = sym.is(Final) && !toDenot(sym).isClassConstructor && !sym.isMutableVar && !sym.enclosingClass.is(Trait)
289289

290290
import asm.Opcodes.*
291291
import GenBCodeOps.addFlagIf

compiler/src/dotty/tools/dotc/ast/Desugar.scala

+2
Original file line numberDiff line numberDiff line change
@@ -2243,6 +2243,8 @@ object desugar {
22432243
New(ref(defn.RepeatedAnnot.typeRef), Nil :: Nil))
22442244
else if op.name == nme.CC_REACH then
22452245
Apply(ref(defn.Caps_reachCapability), t :: Nil)
2246+
else if op.name == nme.CC_READONLY then
2247+
Apply(ref(defn.Caps_readOnlyCapability), t :: Nil)
22462248
else
22472249
assert(ctx.mode.isExpr || ctx.reporter.errorsReported || ctx.mode.is(Mode.Interactive), ctx.mode)
22482250
Select(t, op.name)

compiler/src/dotty/tools/dotc/ast/TreeInfo.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -759,7 +759,7 @@ trait TypedTreeInfo extends TreeInfo[Type] { self: Trees.Instance[Type] =>
759759
*/
760760
def isVariableOrGetter(tree: Tree)(using Context): Boolean = {
761761
def sym = tree.symbol
762-
def isVar = sym.is(Mutable)
762+
def isVar = sym.isMutableVarOrAccessor
763763
def isGetter =
764764
mayBeVarGetter(sym) && sym.owner.info.member(sym.name.asTermName.setterName).exists
765765

compiler/src/dotty/tools/dotc/ast/untpd.scala

+3
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
206206

207207
case class Var()(implicit @constructorOnly src: SourceFile) extends Mod(Flags.Mutable)
208208

209+
case class Mut()(implicit @constructorOnly src: SourceFile) extends Mod(Flags.Mutable)
210+
209211
case class Implicit()(implicit @constructorOnly src: SourceFile) extends Mod(Flags.Implicit)
210212

211213
case class Given()(implicit @constructorOnly src: SourceFile) extends Mod(Flags.Given)
@@ -332,6 +334,7 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
332334

333335
def isEnumCase: Boolean = isEnum && is(Case)
334336
def isEnumClass: Boolean = isEnum && !is(Case)
337+
def isMutableVar: Boolean = is(Mutable) && mods.exists(_.isInstanceOf[Mod.Var])
335338
}
336339

337340
@sharable val EmptyModifiers: Modifiers = Modifiers()

0 commit comments

Comments
 (0)