Skip to content

Commit 4f5d136

Browse files
committed
Refine lookahead test for given instances
1 parent 73033e9 commit 4f5d136

File tree

3 files changed

+30
-15
lines changed

3 files changed

+30
-15
lines changed

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2338,21 +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.name != nme.as ||
2342-
lookahead.token == BACKQUOTED_IDENT) {
2343-
lookahead.nextToken()
2344-
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) {
23452345
lookahead.nextToken()
2346-
var openBrackets = 1
2347-
while (openBrackets > 0 && lookahead.token != EOF) {
2348-
if (lookahead.token == LBRACKET) openBrackets += 1
2349-
else if (lookahead.token == RBRACKET) openBrackets -= 1
2346+
if (lookahead.token == LBRACKET) {
23502347
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+
}
23512354
}
23522355
}
2356+
lookahead.token == FOR ||
2357+
lookahead.token == IDENTIFIER && lookahead.name == nme.as
23532358
}
2354-
lookahead.token == FOR ||
2355-
lookahead.token == IDENTIFIER && lookahead.name == nme.as
23562359
}
23572360

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

tests/pos/givens.scala

Lines changed: 0 additions & 5 deletions
This file was deleted.

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)