@@ -608,12 +608,18 @@ object Trees {
608608 extends TermTree [T ] {
609609 type ThisTree [+ T <: Untyped ] = Match [T ]
610610 def isInline = false
611+ def isSubMatch = false
611612 }
612613 class InlineMatch [+ T <: Untyped ] private [ast] (selector : Tree [T ], cases : List [CaseDef [T ]])(implicit @ constructorOnly src : SourceFile )
613614 extends Match (selector, cases) {
614615 override def isInline = true
615616 override def toString = s " InlineMatch( $selector, $cases) "
616617 }
618+ /** with selector match { cases } */
619+ final class SubMatch [+ T <: Untyped ] private [ast] (selector : Tree [T ], cases : List [CaseDef [T ]])(implicit @ constructorOnly src : SourceFile )
620+ extends Match (selector, cases) {
621+ override def isSubMatch = true
622+ }
617623
618624 /** case pat if guard => body */
619625 case class CaseDef [+ T <: Untyped ] private [ast] (pat : Tree [T ], guard : Tree [T ], body : Tree [T ])(implicit @ constructorOnly src : SourceFile )
@@ -1180,6 +1186,7 @@ object Trees {
11801186 type Closure = Trees .Closure [T ]
11811187 type Match = Trees .Match [T ]
11821188 type InlineMatch = Trees .InlineMatch [T ]
1189+ type SubMatch = Trees .SubMatch [T ]
11831190 type CaseDef = Trees .CaseDef [T ]
11841191 type Labeled = Trees .Labeled [T ]
11851192 type Return = Trees .Return [T ]
@@ -1329,6 +1336,7 @@ object Trees {
13291336 def Match (tree : Tree )(selector : Tree , cases : List [CaseDef ])(using Context ): Match = tree match {
13301337 case tree : Match if (selector eq tree.selector) && (cases eq tree.cases) => tree
13311338 case tree : InlineMatch => finalize(tree, untpd.InlineMatch (selector, cases)(sourceFile(tree)))
1339+ case tree : SubMatch => finalize(tree, untpd.SubMatch (selector, cases)(sourceFile(tree)))
13321340 case _ => finalize(tree, untpd.Match (selector, cases)(sourceFile(tree)))
13331341 }
13341342 def CaseDef (tree : Tree )(pat : Tree , guard : Tree , body : Tree )(using Context ): CaseDef = tree match {
0 commit comments