@@ -236,7 +236,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {
236236 // returns MatchMonad[U]
237237 def flatMap (prev : Tree , b : Symbol , next : Tree ): Tree = {
238238 val resultArity = productArity(b.info)
239- if (isNameBasedMatch (prev.tpe, resultArity )) {
239+ if (! isGetMatch (prev.tpe)) {
240240 val nullCheck : Tree = prev.select(defn.Object_ne ).appliedTo(Literal (Constant (null )))
241241 ifThenElseZero(
242242 nullCheck,
@@ -1430,8 +1430,8 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {
14301430
14311431 def resultInMonad =
14321432 if (aligner.isBool) defn.UnitType
1433- else if (isNameBasedMatch(resultType, aligner.prodArity)) resultType
14341433 else if (isGetMatch(resultType)) extractorMemberType(resultType, nme.get)
1434+ else if (isNameBasedMatch(resultType, aligner.prodArity)) resultType
14351435 else resultType
14361436
14371437 def resultType : Type
@@ -1474,7 +1474,7 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {
14741474 protected def seqTree (binder : Symbol ) = tupleSel(binder)(firstIndexingBinder + 1 )
14751475 protected def tupleSel (binder : Symbol )(i : Int ): Tree = {
14761476 val accessors =
1477- if (defn.isNameBasedPatternSubType (binder.info))
1477+ if (defn.isProductSubType (binder.info))
14781478 productSelectors(binder.info)
14791479 else binder.caseAccessors
14801480 val res =
@@ -1882,12 +1882,12 @@ class PatternMatcher extends MiniPhaseTransform with DenotTransformer {
18821882
18831883 val expanded : List [Type ] = /* (
18841884 if (result =:= defn.BooleanType) Nil
1885- else if (defn.isNameBasedPatternSubType (result)) productSelectorTypes(result)
1885+ else if (defn.isProductSubType (result)) productSelectorTypes(result)
18861886 else if (result.classSymbol is Flags.CaseClass) result.decls.filter(x => x.is(Flags.CaseAccessor) && x.is(Flags.Method)).map(_.info).toList
18871887 else result.select(nme.get) :: Nil
18881888 )*/
1889- if (isNameBasedMatch (resultType, args.length )) productSelectorTypes(resultType )
1890- else if (isGetMatch (resultType)) getUnapplySelectors(resultOfGet, args )
1889+ if (isGetMatch (resultType)) getUnapplySelectors(resultOfGet, args )
1890+ else if (isNameBasedMatch (resultType, args.length )) productSelectorTypes(resultType )
18911891 else if (resultType isRef defn.BooleanClass ) Nil
18921892 else {
18931893 ctx.error(i " invalid return type in Unapply node: $resultType" )
0 commit comments