@@ -982,7 +982,7 @@ object Trees {
982982 /** Tree that replaces a splice in pickled quotes.
983983 * It is only used when picking quotes (Will never be in a TASTy file).
984984 */
985- case class Hole [- T >: Untyped ](isTermHole : Boolean , idx : Int , args : List [Tree [T ]])(implicit @ constructorOnly src : SourceFile ) extends Tree [T ] {
985+ case class Hole [- T >: Untyped ](isTermHole : Boolean , idx : Int , args : List [Tree [T ]], content : Tree [ T ], tpt : Tree [ T ] )(implicit @ constructorOnly src : SourceFile ) extends Tree [T ] {
986986 type ThisTree [- T >: Untyped ] <: Hole [T ]
987987 override def isTerm : Boolean = isTermHole
988988 override def isType : Boolean = ! isTermHole
@@ -1338,6 +1338,10 @@ object Trees {
13381338 case tree : Thicket if (trees eq tree.trees) => tree
13391339 case _ => finalize(tree, untpd.Thicket (trees)(sourceFile(tree)))
13401340 }
1341+ def Hole (tree : Tree )(isTerm : Boolean , idx : Int , args : List [Tree ], content : Tree , tpt : Tree )(using Context ): Hole = tree match {
1342+ case tree : Hole if isTerm == tree.isTerm && idx == tree.idx && args.eq(tree.args) && content.eq(tree.content) && content.eq(tree.content) => tree
1343+ case _ => finalize(tree, untpd.Hole (isTerm, idx, args, content, tpt)(sourceFile(tree)))
1344+ }
13411345
13421346 // Copier methods with default arguments; these demand that the original tree
13431347 // is of the same class as the copy. We only include trees with more than 2 elements here.
@@ -1359,6 +1363,9 @@ object Trees {
13591363 TypeDef (tree : Tree )(name, rhs)
13601364 def Template (tree : Template )(constr : DefDef = tree.constr, parents : List [Tree ] = tree.parents, derived : List [untpd.Tree ] = tree.derived, self : ValDef = tree.self, body : LazyTreeList = tree.unforcedBody)(using Context ): Template =
13611365 Template (tree : Tree )(constr, parents, derived, self, body)
1366+ def Hole (tree : Hole )(isTerm : Boolean = tree.isTerm, idx : Int = tree.idx, args : List [Tree ] = tree.args, content : Tree = tree.content, tpt : Tree = tree.tpt)(using Context ): Hole =
1367+ Hole (tree : Tree )(isTerm, idx, args, content, tpt)
1368+
13621369 }
13631370
13641371 /** Hook to indicate that a transform of some subtree should be skipped */
@@ -1488,6 +1495,8 @@ object Trees {
14881495 case Thicket (trees) =>
14891496 val trees1 = transform(trees)
14901497 if (trees1 eq trees) tree else Thicket (trees1)
1498+ case Hole (isTerm, idx, args, content, tpt) =>
1499+ cpy.Hole (tree)(isTerm, idx, transform(args), transform(content), transform(tpt))
14911500 case _ =>
14921501 transformMoreCases(tree)
14931502 }
@@ -1625,8 +1634,8 @@ object Trees {
16251634 this (this (x, arg), annot)
16261635 case Thicket (ts) =>
16271636 this (x, ts)
1628- case Hole (_, _, args) =>
1629- this (x, args)
1637+ case Hole (_, _, args, content, tpt ) =>
1638+ this (this ( this ( x, args), content), tpt )
16301639 case _ =>
16311640 foldMoreCases(x, tree)
16321641 }
0 commit comments