Skip to content

Commit adeeedd

Browse files
committed
Fix positions problem when pickling wildcard givens
DocStrings failed -Ytest-pickler, since a `given _` in an importy clause started with a position that spanned the whole string, and ended after unpickling with a position that just contained the `given`.
1 parent 85d5d70 commit adeeedd

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3036,7 +3036,7 @@ object Parsers {
30363036
def importExpr(mkTree: ImportConstr): () => Tree = {
30373037

30383038
/** '_' */
3039-
def wildcardSelectorId(name: TermName) = atSpan(in.skipToken()) { Ident(name) }
3039+
def wildcardSelectorId() = atSpan(in.skipToken()) { Ident(nme.WILDCARD) }
30403040

30413041
/** ImportSelectors ::= id [‘=>’ id | ‘=>’ ‘_’] [‘,’ ImportSelectors]
30423042
* | WildCardSelector {‘,’ WildCardSelector}
@@ -3048,14 +3048,15 @@ object Parsers {
30483048
val selector = atSpan(in.offset) {
30493049
in.token match
30503050
case USCORE =>
3051-
ImportSelector(wildcardSelectorId(nme.WILDCARD))
3051+
ImportSelector(wildcardSelectorId())
30523052
case GIVEN =>
3053-
val id = wildcardSelectorId(nme.EMPTY)
3053+
val start = in.skipToken()
3054+
def givenSelector() = atSpan(start) { Ident(nme.EMPTY) }
30543055
if in.token == USCORE then
30553056
in.nextToken()
3056-
ImportSelector(id)
3057+
ImportSelector(givenSelector()) // Let the selector span all of `given _`; needed for -Ytest-pickler
30573058
else
3058-
ImportSelector(id, bound = infixType())
3059+
ImportSelector(givenSelector(), bound = infixType())
30593060
case _ =>
30603061
val from = termIdent()
30613062
if !idOK then syntaxError(i"named imports cannot follow wildcard imports")
@@ -3077,7 +3078,7 @@ object Parsers {
30773078
val handleImport: Tree => Tree = tree =>
30783079
in.token match
30793080
case USCORE =>
3080-
mkTree(tree, ImportSelector(wildcardSelectorId(nme.WILDCARD)) :: Nil)
3081+
mkTree(tree, ImportSelector(wildcardSelectorId()) :: Nil)
30813082
case LBRACE =>
30823083
mkTree(tree, inBraces(importSelectors(idOK = true)))
30833084
case _ =>

0 commit comments

Comments
 (0)