Skip to content

Commit d0de736

Browse files
committed
Drop IrrefutableGenFrom
1 parent f9fd355 commit d0de736

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1119,11 +1119,11 @@ object desugar {
11191119
*
11201120
* { cases }
11211121
* ==>
1122-
* x$1 => (x$1 @unchecked) match { cases }
1122+
* x$1 => (x$1 @unchecked?) match { cases }
11231123
*
11241124
* If `nparams` != 1, expand instead to
11251125
*
1126-
* (x$1, ..., x$n) => (x$0, ..., x${n-1} @unchecked) match { cases }
1126+
* (x$1, ..., x$n) => (x$0, ..., x${n-1} @unchecked?) match { cases }
11271127
*/
11281128
def makeCaseLambda(cases: List[CaseDef], nparams: Int = 1, unchecked: Boolean = true)(implicit ctx: Context): Function = {
11291129
val params = (1 to nparams).toList.map(makeSyntheticParameter(_))
@@ -1342,7 +1342,7 @@ object desugar {
13421342
}
13431343

13441344
def isIrrefutableGenFrom(gen: GenFrom): Boolean =
1345-
gen.isInstanceOf[IrrefutableGenFrom] ||
1345+
!gen.filtering ||
13461346
IdPattern.unapply(gen.pat).isDefined ||
13471347
isIrrefutable(gen.pat, gen.expr)
13481348

@@ -1369,11 +1369,11 @@ object desugar {
13691369
val pdefs = (valeqs, defpats, rhss).zipped.map(makePatDef(_, Modifiers(), _, _))
13701370
val rhs1 = makeFor(nme.map, nme.flatMap, GenFrom(defpat0, rhs, gen.filtering) :: Nil, Block(pdefs, makeTuple(id0 :: ids)))
13711371
val allpats = pat :: pats
1372-
val vfrom1 = new IrrefutableGenFrom(makeTuple(allpats), rhs1)
1372+
val vfrom1 = new GenFrom(makeTuple(allpats), rhs1, filtering = false)
13731373
makeFor(mapName, flatMapName, vfrom1 :: rest1, body)
13741374
case (gen: GenFrom) :: test :: rest =>
13751375
val filtered = Apply(rhsSelect(gen, nme.withFilter), makeLambda(gen.pat, test))
1376-
val genFrom = new IrrefutableGenFrom(gen.pat, filtered)
1376+
val genFrom = new GenFrom(gen.pat, filtered, filtering = false)
13771377
makeFor(mapName, flatMapName, genFrom :: rest, body)
13781378
case _ =>
13791379
EmptyTree //may happen for erroneous input
@@ -1568,7 +1568,4 @@ object desugar {
15681568
collect(tree)
15691569
buf.toList
15701570
}
1571-
1572-
private class IrrefutableGenFrom(pat: Tree, expr: Tree)(implicit @constructorOnly src: SourceFile)
1573-
extends GenFrom(pat, expr, false)
15741571
}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,20 +1724,20 @@ object Parsers {
17241724
else {
17251725
val pat = pattern1()
17261726
if (in.token == EQUALS) atSpan(startOffset(pat), in.skipToken()) { GenAlias(pat, expr()) }
1727-
else generatorRest(pat, filtering = false)
1727+
else generatorRest(pat, casePat = false)
17281728
}
17291729

17301730
/** Generator ::= [‘case’] Pattern `<-' Expr
17311731
*/
17321732
def generator(): Tree = {
1733-
val filtering =
1734-
if (in.token == CASE) { in.skipCASE(); true }
1735-
else !ctx.settings.strict.value // don't filter under -strict
1736-
generatorRest(pattern1(), filtering)
1733+
val casePat = if (in.token == CASE) { in.skipCASE(); true } else false
1734+
generatorRest(pattern1(), casePat)
17371735
}
17381736

1739-
def generatorRest(pat: Tree, filtering: Boolean): GenFrom =
1740-
atSpan(startOffset(pat), accept(LARROW)) { GenFrom(pat, expr(), filtering) }
1737+
def generatorRest(pat: Tree, casePat: Boolean): GenFrom =
1738+
atSpan(startOffset(pat), accept(LARROW)) {
1739+
GenFrom(pat, expr(), filtering = casePat || !ctx.settings.strict.value) // don't filter under -strict
1740+
}
17411741

17421742
/** ForExpr ::= `for' (`(' Enumerators `)' | `{' Enumerators `}')
17431743
* {nl} [`yield'] Expr
@@ -1762,7 +1762,7 @@ object Parsers {
17621762
atSpan(lparenOffset) { makeTupleOrParens(pats) } // note: alternatives `|' need to be weeded out by typer.
17631763
}
17641764
else pats.head
1765-
generatorRest(pat, filtering = false) :: enumeratorsRest()
1765+
generatorRest(pat, casePat = false) :: enumeratorsRest()
17661766
}
17671767
if (wrappedEnums) {
17681768
accept(RPAREN)

0 commit comments

Comments
 (0)