@@ -2631,23 +2631,8 @@ object Parsers {
26312631 addMod(mods, mod)
26322632 }
26332633
2634- private def compatible (flags1 : FlagSet , flags2 : FlagSet ): Boolean = (
2635- flags1.isEmpty
2636- || flags2.isEmpty
2637- || flags1.isTermFlags && flags2.isTermFlags
2638- || flags1.isTypeFlags && flags2.isTypeFlags
2639- )
2640-
2641- def addFlag (mods : Modifiers , flag : FlagSet ): Modifiers = {
2642- def getPrintableTypeFromFlagSet =
2643- Map (Trait -> " trait" , Method -> " method" , Mutable -> " variable" ).get(flag)
2644-
2645- if (compatible(mods.flags, flag)) mods | flag
2646- else {
2647- syntaxError(ModifiersNotAllowed (mods.flags, getPrintableTypeFromFlagSet))
2648- Modifiers (flag)
2649- }
2650- }
2634+ def addFlag (mods : Modifiers , flag : FlagSet ): Modifiers =
2635+ mods.withAddedFlags(flag, Span (in.offset))
26512636
26522637 /** Always add the syntactic `mod`, but check and conditionally add semantic `mod.flags`
26532638 */
@@ -3345,22 +3330,29 @@ object Parsers {
33453330 }
33463331 }
33473332
3333+ private def checkAccessOnly (mods : Modifiers , where : String ): Modifiers =
3334+ val mods1 = mods & (AccessFlags | Enum )
3335+ if mods1 ne mods then
3336+ syntaxError(s " Only access modifiers are allowed on enum $where" )
3337+ mods1
3338+
33483339 /** EnumDef ::= id ClassConstr InheritClauses [‘with’] EnumBody
33493340 */
33503341 def enumDef (start : Offset , mods : Modifiers ): TypeDef = atSpan(start, nameStart) {
3342+ val mods1 = checkAccessOnly(mods, " definitions" )
33513343 val modulName = ident()
33523344 in.endMarkerScope(modulName) {
33533345 val clsName = modulName.toTypeName
33543346 val constr = classConstr()
33553347 val templ = template(constr, isEnum = true )
3356- finalizeDef(TypeDef (clsName, templ), mods , start)
3348+ finalizeDef(TypeDef (clsName, templ), mods1 , start)
33573349 }
33583350 }
33593351
33603352 /** EnumCase = `case' (id ClassConstr [`extends' ConstrApps] | ids)
33613353 */
33623354 def enumCase (start : Offset , mods : Modifiers ): DefTree = {
3363- val mods1 = mods | EnumCase
3355+ val mods1 = checkAccessOnly( mods, " cases " ) | EnumCase
33643356 accept(CASE )
33653357
33663358 atSpan(start, nameStart) {
0 commit comments