Skip to content

Commit f697d08

Browse files
committed
Drop IrrefutableGenFrom
1 parent c3cec8e commit f697d08

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(_))
@@ -1341,7 +1341,7 @@ object desugar {
13411341
}
13421342

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

@@ -1368,11 +1368,11 @@ object desugar {
13681368
val pdefs = (valeqs, defpats, rhss).zipped.map(makePatDef(_, Modifiers(), _, _))
13691369
val rhs1 = makeFor(nme.map, nme.flatMap, GenFrom(defpat0, rhs, gen.filtering) :: Nil, Block(pdefs, makeTuple(id0 :: ids)))
13701370
val allpats = pat :: pats
1371-
val vfrom1 = new IrrefutableGenFrom(makeTuple(allpats), rhs1)
1371+
val vfrom1 = new GenFrom(makeTuple(allpats), rhs1, filtering = false)
13721372
makeFor(mapName, flatMapName, vfrom1 :: rest1, body)
13731373
case (gen: GenFrom) :: test :: rest =>
13741374
val filtered = Apply(rhsSelect(gen, nme.withFilter), makeLambda(gen.pat, test))
1375-
val genFrom = new IrrefutableGenFrom(gen.pat, filtered)
1375+
val genFrom = new GenFrom(gen.pat, filtered, filtering = false)
13761376
makeFor(mapName, flatMapName, genFrom :: rest, body)
13771377
case _ =>
13781378
EmptyTree //may happen for erroneous input
@@ -1559,7 +1559,4 @@ object desugar {
15591559
collect(tree)
15601560
buf.toList
15611561
}
1562-
1563-
private class IrrefutableGenFrom(pat: Tree, expr: Tree)(implicit @constructorOnly src: SourceFile)
1564-
extends GenFrom(pat, expr, false)
15651562
}

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1705,20 +1705,20 @@ object Parsers {
17051705
else {
17061706
val pat = pattern1()
17071707
if (in.token == EQUALS) atSpan(startOffset(pat), in.skipToken()) { GenAlias(pat, expr()) }
1708-
else generatorRest(pat, filtering = false)
1708+
else generatorRest(pat, casePat = false)
17091709
}
17101710

17111711
/** Generator ::= [‘case’] Pattern `<-' Expr
17121712
*/
17131713
def generator(): Tree = {
1714-
val filtering =
1715-
if (in.token == CASE) { in.skipCASE(); true }
1716-
else !ctx.settings.strict.value // don't filter under -strict
1717-
generatorRest(pattern1(), filtering)
1714+
val casePat = if (in.token == CASE) { in.skipCASE(); true } else false
1715+
generatorRest(pattern1(), casePat)
17181716
}
17191717

1720-
def generatorRest(pat: Tree, filtering: Boolean): GenFrom =
1721-
atSpan(startOffset(pat), accept(LARROW)) { GenFrom(pat, expr(), filtering) }
1718+
def generatorRest(pat: Tree, casePat: Boolean): GenFrom =
1719+
atSpan(startOffset(pat), accept(LARROW)) {
1720+
GenFrom(pat, expr(), filtering = casePat || !ctx.settings.strict.value) // don't filter under -strict
1721+
}
17221722

17231723
/** ForExpr ::= `for' (`(' Enumerators `)' | `{' Enumerators `}')
17241724
* {nl} [`yield'] Expr
@@ -1743,7 +1743,7 @@ object Parsers {
17431743
atSpan(lparenOffset) { makeTupleOrParens(pats) } // note: alternatives `|' need to be weeded out by typer.
17441744
}
17451745
else pats.head
1746-
generatorRest(pat, filtering = false) :: enumeratorsRest()
1746+
generatorRest(pat, casePat = false) :: enumeratorsRest()
17471747
}
17481748
if (wrappedEnums) {
17491749
accept(RPAREN)

0 commit comments

Comments
 (0)