@@ -623,6 +623,12 @@ object Trees {
623623 def name : Name = bind.name
624624 }
625625
626+ /** By-name wrapper; created by Typer and TreUnpickler, eliminated in TreePickler and ByNameLambda */
627+ case class ByName [- T >: Untyped ] private [ast] (expr : Tree [T ])(implicit @ constructorOnly src : SourceFile )
628+ extends TermTree [T ] {
629+ type ThisTree [- T >: Untyped ] = ByName [T ]
630+ }
631+
626632 /** return expr
627633 * where `from` refers to the method or label from which the return takes place
628634 * After program transformations this is not necessarily the enclosing method, because
@@ -1075,6 +1081,7 @@ object Trees {
10751081 type InlineMatch = Trees .InlineMatch [T ]
10761082 type CaseDef = Trees .CaseDef [T ]
10771083 type Labeled = Trees .Labeled [T ]
1084+ type ByName = Trees .ByName [T ]
10781085 type Return = Trees .Return [T ]
10791086 type WhileDo = Trees .WhileDo [T ]
10801087 type Try = Trees .Try [T ]
@@ -1228,6 +1235,10 @@ object Trees {
12281235 case tree : Labeled if (bind eq tree.bind) && (expr eq tree.expr) => tree
12291236 case _ => finalize(tree, untpd.Labeled (bind, expr)(sourceFile(tree)))
12301237 }
1238+ def ByName (tree : Tree )(expr : Tree )(using Context ): ByName = tree match {
1239+ case tree : ByName if expr eq tree.expr => tree
1240+ case _ => finalize(tree, untpd.ByName (expr)(sourceFile(tree)))
1241+ }
12311242 def Return (tree : Tree )(expr : Tree , from : Tree )(using Context ): Return = tree match {
12321243 case tree : Return if (expr eq tree.expr) && (from eq tree.from) => tree
12331244 case _ => finalize(tree, untpd.Return (expr, from)(sourceFile(tree)))
@@ -1411,6 +1422,8 @@ object Trees {
14111422 cpy.CaseDef (tree)(transform(pat), transform(guard), transform(body))
14121423 case Labeled (bind, expr) =>
14131424 cpy.Labeled (tree)(transformSub(bind), transform(expr))
1425+ case ByName (expr) =>
1426+ cpy.ByName (tree)(transform(expr))
14141427 case Return (expr, from) =>
14151428 cpy.Return (tree)(transform(expr), transformSub(from))
14161429 case WhileDo (cond, body) =>
@@ -1556,6 +1569,8 @@ object Trees {
15561569 this (this (this (x, pat), guard), body)
15571570 case Labeled (bind, expr) =>
15581571 this (this (x, bind), expr)
1572+ case ByName (expr) =>
1573+ this (x, expr)
15591574 case Return (expr, from) =>
15601575 this (this (x, expr), from)
15611576 case WhileDo (cond, body) =>
0 commit comments