Skip to content

Commit 9f52acf

Browse files
committed
Refactor, simplify and extend wildcard checking
This is mostly a refactoring, though `findWildcardType(t, alsoNonValue = true)` is new behavior that belongs later. `rejectWildcard` had leftover tortous abstration, which is removed here.
1 parent ddb74f4 commit 9f52acf

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

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

+14-9
Original file line numberDiff line numberDiff line change
@@ -1012,23 +1012,28 @@ object Parsers {
10121012
* If it is, returns the [[Position]] where the wildcard occurs.
10131013
*/
10141014
@tailrec
1015-
private final def findWildcardType(t: Tree): Option[Position] = t match {
1016-
case TypeBoundsTree(_, _) => Some(t.pos)
1017-
case Parens(t1) => findWildcardType(t1)
1018-
case Annotated(t1, _) => findWildcardType(t1)
1015+
private final def findWildcardType(t: Tree, alsoNonValue: Boolean): Option[Tree] = t match {
1016+
case TypeBoundsTree(_, _) => Some(t)
1017+
case ByNameTypeTree(_) if alsoNonValue => Some(t)
1018+
case Parens(t1) => findWildcardType(t1, alsoNonValue)
1019+
case Annotated(t1, _) => findWildcardType(t1, alsoNonValue)
10191020
case _ => None
10201021
}
10211022

1022-
def rejectWildcard(t: Tree, report: Position => Unit, fallbackTree: Tree): Tree =
1023-
findWildcardType(t) match {
1024-
case Some(wildcardPos) =>
1025-
report(wildcardPos)
1023+
def rejectWildcard(t: Tree, fallbackTree: Tree): Tree =
1024+
findWildcardType(t, false) match {
1025+
case Some(wildcardTree) =>
1026+
syntaxError(UnboundWildcardType(), wildcardTree.pos)
10261027
fallbackTree
10271028
case None => t
10281029
}
10291030

1031+
10301032
def checkWildcard(t: Tree, wildOK: Boolean = false, fallbackTree: Tree = scalaAny): Tree =
1031-
if (wildOK) t else rejectWildcard(t, syntaxError(UnboundWildcardType(), _), fallbackTree)
1033+
if (wildOK)
1034+
t
1035+
else
1036+
rejectWildcard(t, fallbackTree)
10321037

10331038
/* ----------- EXPRESSIONS ------------------------------------------------ */
10341039

0 commit comments

Comments
 (0)