Skip to content

Commit 2796d11

Browse files
committed
Enforce that mods in Modifiers don't add new information
Everything should be reflected in flags and privateWithin already.
1 parent 0e82b01 commit 2796d11

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed

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

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,15 +163,26 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
163163
if (this.flags == flags) this
164164
else copy(flags = flags)
165165

166-
def withAddedMod(mod: Mod): Modifiers =
167-
if (mods.exists(_ eq mod)) this
168-
else withMods(mods :+ mod)
166+
def withAddedMod(mod: Mod): Modifiers =
167+
if (mods.exists(_ eq mod)) this
168+
else withMods(mods :+ mod)
169169

170-
def withMods(ms: List[Mod]): Modifiers =
171-
if (mods eq ms) this
172-
else copy(mods = ms)
170+
/** Modifiers with given list of Mods. It is checked that
171+
* all modifiers are already accounted for in `flags` and `privateWithin`.
172+
*/
173+
def withMods(ms: List[Mod]): Modifiers = {
174+
if (mods eq ms) this
175+
else {
176+
if (ms.nonEmpty)
177+
for (m <- ms)
178+
assert(flags.is(m.flags) ||
179+
m.isInstanceOf[Mod.Private] && !privateWithin.isEmpty,
180+
s"unaccounted modifier: $m in $this when adding $ms")
181+
copy(mods = ms)
182+
}
183+
}
173184

174-
def withAddedAnnotation(annot: Tree): Modifiers =
185+
def withAddedAnnotation(annot: Tree): Modifiers =
175186
if (annotations.exists(_ eq annot)) this
176187
else withAnnotations(annotations :+ annot)
177188

compiler/src/dotty/tools/dotc/parsing/Parsers.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2270,7 +2270,7 @@ object Parsers {
22702270
/** EnumCase = `case' (id ClassConstr [`extends' ConstrApps] | ids)
22712271
*/
22722272
def enumCase(start: Offset, mods: Modifiers): DefTree = {
2273-
val mods1 = mods.withAddedMod(atPos(in.offset)(Mod.Enum())) | Case
2273+
val mods1 = addMod(mods, atPos(in.offset)(Mod.Enum())) | Case
22742274
accept(CASE)
22752275

22762276
in.adjustSepRegions(ARROW)

0 commit comments

Comments
 (0)