@@ -614,7 +614,7 @@ object Trees {
614
614
}
615
615
616
616
/** case pat if guard => body */
617
- case class CaseDef [- T >: Untyped ] private [ast] (pat : Tree [T ], guard : Tree [T ], body : Tree [T ])(implicit @ constructorOnly src : SourceFile )
617
+ case class CaseDef [- T >: Untyped ] private [ast] (pat : Tree [T ], guard : Tree [T ], body : Tree [T ])(val gadt : GadtConstraint )( implicit @ constructorOnly src : SourceFile )
618
618
extends Tree [T ] {
619
619
type ThisTree [- T >: Untyped ] = CaseDef [T ]
620
620
}
@@ -1233,9 +1233,9 @@ object Trees {
1233
1233
case tree : InlineMatch => finalize(tree, untpd.InlineMatch (selector, cases)(sourceFile(tree)))
1234
1234
case _ => finalize(tree, untpd.Match (selector, cases)(sourceFile(tree)))
1235
1235
}
1236
- def CaseDef (tree : Tree )(pat : Tree , guard : Tree , body : Tree )(using Context ): CaseDef = tree match {
1236
+ def CaseDef (tree : Tree )(pat : Tree , guard : Tree , body : Tree , gadt : GadtConstraint )(using Context ): CaseDef = tree match {
1237
1237
case tree : CaseDef if (pat eq tree.pat) && (guard eq tree.guard) && (body eq tree.body) => tree
1238
- case _ => finalize(tree, untpd.CaseDef (pat, guard, body)(sourceFile(tree)))
1238
+ case _ => finalize(tree, untpd.CaseDef (pat, guard, body, gadt )(sourceFile(tree)))
1239
1239
}
1240
1240
def Labeled (tree : Tree )(bind : Bind , expr : Tree )(using Context ): Labeled = tree match {
1241
1241
case tree : Labeled if (bind eq tree.bind) && (expr eq tree.expr) => tree
@@ -1355,8 +1355,8 @@ object Trees {
1355
1355
If (tree : Tree )(cond, thenp, elsep)
1356
1356
def Closure (tree : Closure )(env : List [Tree ] = tree.env, meth : Tree = tree.meth, tpt : Tree = tree.tpt)(using Context ): Closure =
1357
1357
Closure (tree : Tree )(env, meth, tpt)
1358
- def CaseDef (tree : CaseDef )(pat : Tree = tree.pat, guard : Tree = tree.guard, body : Tree = tree.body)(using Context ): CaseDef =
1359
- CaseDef (tree : Tree )(pat, guard, body)
1358
+ def CaseDef (tree : CaseDef )(pat : Tree = tree.pat, guard : Tree = tree.guard, body : Tree = tree.body, gadt : GadtConstraint = tree.gadt )(using Context ): CaseDef =
1359
+ CaseDef (tree : Tree )(pat, guard, body, gadt )
1360
1360
def Try (tree : Try )(expr : Tree = tree.expr, cases : List [CaseDef ] = tree.cases, finalizer : Tree = tree.finalizer)(using Context ): Try =
1361
1361
Try (tree : Tree )(expr, cases, finalizer)
1362
1362
def UnApply (tree : UnApply )(fun : Tree = tree.fun, implicits : List [Tree ] = tree.implicits, patterns : List [Tree ] = tree.patterns)(using Context ): UnApply =
@@ -1442,10 +1442,8 @@ object Trees {
1442
1442
cpy.Match (tree)(transform(selector), transformSub(cases))
1443
1443
case GadtExpr (gadt, expr) =>
1444
1444
inContext(ctx.withGadt(gadt))(cpy.GadtExpr (tree)(gadt, transform(expr)))
1445
- case CaseDef (pat, guard, body @ GadtExpr (gadt, _)) =>
1446
- inContext(ctx.withGadt(gadt))(cpy.CaseDef (tree)(transform(pat), transform(guard), transform(body)))
1447
- case CaseDef (pat, guard, body) =>
1448
- cpy.CaseDef (tree)(transform(pat), transform(guard), transform(body))
1445
+ case cdef @ CaseDef (pat, guard, body) =>
1446
+ inContext(ctx.withGadt(cdef.gadt))(cpy.CaseDef (cdef)(transform(pat), transform(guard), transform(body)))
1449
1447
case Labeled (bind, expr) =>
1450
1448
cpy.Labeled (tree)(transformSub(bind), transform(expr))
1451
1449
case Return (expr, from) =>
@@ -1582,10 +1580,8 @@ object Trees {
1582
1580
this (this (x, selector), cases)
1583
1581
case GadtExpr (gadt, expr) =>
1584
1582
inContext(ctx.withGadt(gadt))(this (x, expr))
1585
- case CaseDef (pat, guard, body @ GadtExpr (gadt, _)) =>
1586
- inContext(ctx.withGadt(gadt))(this (this (this (x, pat), guard), body))
1587
- case CaseDef (pat, guard, body) =>
1588
- this (this (this (x, pat), guard), body)
1583
+ case cdef @ CaseDef (pat, guard, body) =>
1584
+ inContext(ctx.withGadt(cdef.gadt))(this (this (this (x, pat), guard), body))
1589
1585
case Labeled (bind, expr) =>
1590
1586
this (this (x, bind), expr)
1591
1587
case Return (expr, from) =>
0 commit comments