File tree Expand file tree Collapse file tree 3 files changed +8
-4
lines changed
compiler/src/dotty/tools/dotc/parsing Expand file tree Collapse file tree 3 files changed +8
-4
lines changed Original file line number Diff line number Diff line change @@ -201,11 +201,11 @@ object Parsers {
201201 canStartExpressionTokens.contains(in.token) &&
202202 ! in.isSoftModifierInModifierPosition
203203
204- def isDefIntro (allowedMods : BitSet ): Boolean =
204+ def isDefIntro (allowedMods : BitSet , excludedSoftModifiers : Set [ TermName ] = Set .empty ): Boolean =
205205 in.token == AT ||
206206 (defIntroTokens `contains` in.token) ||
207207 (allowedMods `contains` in.token) ||
208- in.isSoftModifierInModifierPosition
208+ in.isSoftModifierInModifierPosition && ! excludedSoftModifiers.contains(in.name)
209209
210210 def isStatSep : Boolean =
211211 in.token == NEWLINE || in.token == NEWLINES || in.token == SEMI
@@ -3014,7 +3014,7 @@ object Parsers {
30143014 stats += implicitClosure(in.offset, Location .InBlock , modifiers(closureMods))
30153015 else if (isExprIntro)
30163016 stats += expr(Location .InBlock )
3017- else if (isDefIntro(localModifierTokens))
3017+ else if (isDefIntro(localModifierTokens, excludedSoftModifiers = Set (nme.`opaque`) ))
30183018 if (closureMods.contains(in.token)) {
30193019 val start = in.offset
30203020 var imods = modifiers(closureMods)
Original file line number Diff line number Diff line change @@ -320,12 +320,12 @@ Binding ::= (id | ‘_’) [‘:’ Type]
320320Modifier ::= LocalModifier
321321 | AccessModifier
322322 | ‘override’
323+ | ‘opaque’
323324LocalModifier ::= ‘abstract’
324325 | ‘final’
325326 | ‘sealed’
326327 | ‘implicit’
327328 | ‘lazy’
328- | ‘opaque’
329329 | ‘inline’
330330 | ‘erased’
331331AccessModifier ::= (‘private’ | ‘protected’) [AccessQualifier]
Original file line number Diff line number Diff line change @@ -18,6 +18,10 @@ object opaquetypes {
1818 val s : O = " " // should be OK
1919 }
2020
21+ def foo () = {
22+ opaque type X = Int // error
23+ }
24+
2125}
2226
2327object logs {
You can’t perform that action at this time.
0 commit comments