@@ -99,7 +99,7 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
9999 case class DoWhile (body : Tree , cond : Tree )(implicit @ constructorOnly src : SourceFile ) extends TermTree
100100 case class ForYield (enums : List [Tree ], expr : Tree )(implicit @ constructorOnly src : SourceFile ) extends TermTree
101101 case class ForDo (enums : List [Tree ], body : Tree )(implicit @ constructorOnly src : SourceFile ) extends TermTree
102- case class GenFrom (pat : Tree , expr : Tree , filtering : Boolean )(implicit @ constructorOnly src : SourceFile ) extends Tree
102+ case class GenFrom (pat : Tree , expr : Tree , checkMode : GenCheckMode )(implicit @ constructorOnly src : SourceFile ) extends Tree
103103 case class GenAlias (pat : Tree , expr : Tree )(implicit @ constructorOnly src : SourceFile ) extends Tree
104104 case class ContextBounds (bounds : TypeBoundsTree , cxBounds : List [Tree ])(implicit @ constructorOnly src : SourceFile ) extends TypTree
105105 case class PatDef (mods : Modifiers , pats : List [Tree ], tpt : Tree , rhs : Tree )(implicit @ constructorOnly src : SourceFile ) extends DefTree
@@ -116,6 +116,14 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
116116 * `Positioned#checkPos` */
117117 class XMLBlock (stats : List [Tree ], expr : Tree )(implicit @ constructorOnly src : SourceFile ) extends Block (stats, expr)
118118
119+ /** An enum to control checking or filtering of patterns in GenFrom trees */
120+ class GenCheckMode (val x : Int ) extends AnyVal
121+ object GenCheckMode {
122+ val Ignore = new GenCheckMode (0 ) // neither filter nor check since filtering was done before
123+ val Check = new GenCheckMode (1 ) // check that pattern is irrefutable
124+ val Filter = new GenCheckMode (2 ) // filter out non-matching elements
125+ }
126+
119127 // ----- Modifiers -----------------------------------------------------
120128 /** Mod is intended to record syntactic information about modifiers, it's
121129 * NOT a replacement of FlagSet.
@@ -525,9 +533,9 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
525533 case tree : ForDo if (enums eq tree.enums) && (body eq tree.body) => tree
526534 case _ => finalize(tree, untpd.ForDo (enums, body)(tree.source))
527535 }
528- def GenFrom (tree : Tree )(pat : Tree , expr : Tree , filtering : Boolean )(implicit ctx : Context ): Tree = tree match {
529- case tree : GenFrom if (pat eq tree.pat) && (expr eq tree.expr) && (filtering == tree.filtering ) => tree
530- case _ => finalize(tree, untpd.GenFrom (pat, expr, filtering )(tree.source))
536+ def GenFrom (tree : Tree )(pat : Tree , expr : Tree , checkMode : GenCheckMode )(implicit ctx : Context ): Tree = tree match {
537+ case tree : GenFrom if (pat eq tree.pat) && (expr eq tree.expr) && (checkMode == tree.checkMode ) => tree
538+ case _ => finalize(tree, untpd.GenFrom (pat, expr, checkMode )(tree.source))
531539 }
532540 def GenAlias (tree : Tree )(pat : Tree , expr : Tree )(implicit ctx : Context ): Tree = tree match {
533541 case tree : GenAlias if (pat eq tree.pat) && (expr eq tree.expr) => tree
@@ -589,8 +597,8 @@ object untpd extends Trees.Instance[Untyped] with UntypedTreeInfo {
589597 cpy.ForYield (tree)(transform(enums), transform(expr))
590598 case ForDo (enums, body) =>
591599 cpy.ForDo (tree)(transform(enums), transform(body))
592- case GenFrom (pat, expr, filtering ) =>
593- cpy.GenFrom (tree)(transform(pat), transform(expr), filtering )
600+ case GenFrom (pat, expr, checkMode ) =>
601+ cpy.GenFrom (tree)(transform(pat), transform(expr), checkMode )
594602 case GenAlias (pat, expr) =>
595603 cpy.GenAlias (tree)(transform(pat), transform(expr))
596604 case ContextBounds (bounds, cxBounds) =>
0 commit comments