diff --git a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala index 9fb346246582..28f7ac1f32fa 100644 --- a/compiler/src/dotty/tools/dotc/parsing/Parsers.scala +++ b/compiler/src/dotty/tools/dotc/parsing/Parsers.scala @@ -2338,20 +2338,24 @@ object Parsers { (ofClass || ofInstance) && { val lookahead = in.lookaheadScanner // skips newline on startup lookahead.nextToken() // skip the `given` - if (lookahead.token == IDENTIFIER || lookahead.token == BACKQUOTED_IDENT) { - lookahead.nextToken() - if (lookahead.token == LBRACKET) { + if (lookahead.token == LBRACKET) true + else { + if (lookahead.token == IDENTIFIER && lookahead.name != nme.as || + lookahead.token == BACKQUOTED_IDENT) { lookahead.nextToken() - var openBrackets = 1 - while (openBrackets > 0 && lookahead.token != EOF) { - if (lookahead.token == LBRACKET) openBrackets += 1 - else if (lookahead.token == RBRACKET) openBrackets -= 1 + if (lookahead.token == LBRACKET) { lookahead.nextToken() + var openBrackets = 1 + while (openBrackets > 0 && lookahead.token != EOF) { + if (lookahead.token == LBRACKET) openBrackets += 1 + else if (lookahead.token == RBRACKET) openBrackets -= 1 + lookahead.nextToken() + } } } + lookahead.token == FOR || + lookahead.token == IDENTIFIER && lookahead.name == nme.as } - lookahead.token == FOR || - lookahead.token == IDENTIFIER && lookahead.name == nme.as } def recur(firstClause: Boolean, nparams: Int, contextualOnly: Boolean): List[List[ValDef]] = { diff --git a/tests/pos/i6864.scala b/tests/pos/i6864.scala new file mode 100644 index 000000000000..c5ac6c3d6d4a --- /dev/null +++ b/tests/pos/i6864.scala @@ -0,0 +1,17 @@ +class A +class B + +given as A +given as B + +trait Foo +trait Bar + +given as Foo +given as Bar + +trait C +trait Baz[A] + +given as C +given [A] as Baz[A] \ No newline at end of file