Skip to content

Commit 8086179

Browse files
committed
Enforce that mods in Modifiers don't add new information
Everything should be reflected in flags and privateWithin already.
1 parent 34ca5a3 commit 8086179

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
@@ -161,15 +161,26 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
161161
if (this.flags == flags) this
162162
else copy(flags = flags)
163163

164-
def withAddedMod(mod: Mod): Modifiers =
165-
if (mods.exists(_ eq mod)) this
166-
else withMods(mods :+ mod)
164+
def withAddedMod(mod: Mod): Modifiers =
165+
if (mods.exists(_ eq mod)) this
166+
else withMods(mods :+ mod)
167167

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

172-
def withAddedAnnotation(annot: Tree): Modifiers =
183+
def withAddedAnnotation(annot: Tree): Modifiers =
173184
if (annotations.exists(_ eq annot)) this
174185
else withAnnotations(annotations :+ annot)
175186

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)