Skip to content

Commit 1bb0c64

Browse files
authored
Merge pull request #6907 from dotty-staging/fix-given-syntax
Fix #6864: Fix parsing problem for consecutive anonymous givens
2 parents 232b3fa + 4f5d136 commit 1bb0c64

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

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

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,20 +2338,24 @@ object Parsers {
23382338
(ofClass || ofInstance) && {
23392339
val lookahead = in.lookaheadScanner // skips newline on startup
23402340
lookahead.nextToken() // skip the `given`
2341-
if (lookahead.token == IDENTIFIER || lookahead.token == BACKQUOTED_IDENT) {
2342-
lookahead.nextToken()
2343-
if (lookahead.token == LBRACKET) {
2341+
if (lookahead.token == LBRACKET) true
2342+
else {
2343+
if (lookahead.token == IDENTIFIER && lookahead.name != nme.as ||
2344+
lookahead.token == BACKQUOTED_IDENT) {
23442345
lookahead.nextToken()
2345-
var openBrackets = 1
2346-
while (openBrackets > 0 && lookahead.token != EOF) {
2347-
if (lookahead.token == LBRACKET) openBrackets += 1
2348-
else if (lookahead.token == RBRACKET) openBrackets -= 1
2346+
if (lookahead.token == LBRACKET) {
23492347
lookahead.nextToken()
2348+
var openBrackets = 1
2349+
while (openBrackets > 0 && lookahead.token != EOF) {
2350+
if (lookahead.token == LBRACKET) openBrackets += 1
2351+
else if (lookahead.token == RBRACKET) openBrackets -= 1
2352+
lookahead.nextToken()
2353+
}
23502354
}
23512355
}
2356+
lookahead.token == FOR ||
2357+
lookahead.token == IDENTIFIER && lookahead.name == nme.as
23522358
}
2353-
lookahead.token == FOR ||
2354-
lookahead.token == IDENTIFIER && lookahead.name == nme.as
23552359
}
23562360

23572361
def recur(firstClause: Boolean, nparams: Int, contextualOnly: Boolean): List[List[ValDef]] = {

tests/pos/i6864.scala

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
class A
2+
class B
3+
4+
given as A
5+
given as B
6+
7+
trait Foo
8+
trait Bar
9+
10+
given as Foo
11+
given as Bar
12+
13+
trait C
14+
trait Baz[A]
15+
16+
given as C
17+
given [A] as Baz[A]

0 commit comments

Comments
 (0)