Skip to content

Commit 2994dfe

Browse files
Merge pull request #7768 from dotty-staging/fix-#7736
Fix #7739: Handle private toplevel vars.
2 parents b1eb3a8 + f989722 commit 2994dfe

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,18 @@ object desugar {
150150
* def x: Int = expr
151151
* def x_=($1: <TypeTree()>): Unit = ()
152152
*
153-
* Generate the setter only for non-private class members and all trait members.
153+
* Generate the setter only for
154+
* - non-private class members
155+
* - all trait members
156+
* - all package object members
154157
*/
155158
def valDef(vdef0: ValDef)(implicit ctx: Context): Tree = {
156159
val vdef @ ValDef(name, tpt, rhs) = transformQuotedPatternName(vdef0)
157160
val mods = vdef.mods
158161
val setterNeeded =
159-
mods.is(Mutable) && ctx.owner.isClass && (!mods.is(Private) || ctx.owner.is(Trait))
162+
mods.is(Mutable)
163+
&& ctx.owner.isClass
164+
&& (!mods.is(Private) || ctx.owner.is(Trait) || ctx.owner.isPackageObject)
160165
if (setterNeeded) {
161166
// TODO: copy of vdef as getter needed?
162167
// val getter = ValDef(mods, name, tpt, rhs) withPos vdef.pos?

compiler/src/dotty/tools/dotc/typer/Namer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ class Namer { typer: Typer =>
358358
val effectiveOwner = owner.skipWeakOwner
359359
if (flags.is(Private) && effectiveOwner.is(Package)) {
360360
// If effective owner is a package p, widen private to private[p]
361-
flags1 = flags1 &~ Private
361+
flags1 = flags1 &~ PrivateLocal
362362
privateWithin = effectiveOwner
363363
}
364364

tests/pos/i7739.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
private var a: Int = 1

0 commit comments

Comments
 (0)