@@ -4621,6 +4621,8 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4621
4621
case Bind (_, body) => foldTree(x, body)(owner)
4622
4622
case Unapply (fun, implicits, patterns) => foldTrees(foldTrees(foldTree(x, fun)(owner), implicits)(owner), patterns)(owner)
4623
4623
case Alternatives (patterns) => foldTrees(x, patterns)(owner)
4624
+ case SummonFrom (cases) => foldTrees(x, cases)(owner)
4625
+ case _ => throw MatchError (tree.show(using Printer .TreeStructure ))
4624
4626
}
4625
4627
}
4626
4628
end TreeAccumulator
@@ -4662,7 +4664,7 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4662
4664
def transformTree (tree : Tree )(owner : Symbol ): Tree = {
4663
4665
tree match {
4664
4666
case tree : PackageClause =>
4665
- PackageClause .copy(tree)(transformTerm(tree.pid).asInstanceOf [Ref ], transformTrees(tree.stats)(tree.symbol))
4667
+ PackageClause .copy(tree)(transformTerm(tree.pid)(owner) .asInstanceOf [Ref ], transformTrees(tree.stats)(tree.symbol))
4666
4668
case tree : Import =>
4667
4669
Import .copy(tree)(transformTerm(tree.expr)(owner), tree.selectors)
4668
4670
case tree : Export =>
@@ -4685,6 +4687,8 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4685
4687
Alternatives .copy(pattern)(transformTrees(pattern.patterns)(owner))
4686
4688
case TypedOrTest (inner, tpt) =>
4687
4689
TypedOrTest .copy(tree)(transformTree(inner)(owner), transformTypeTree(tpt)(owner))
4690
+ case _ =>
4691
+ throw MatchError (tree.show(using Printer .TreeStructure ))
4688
4692
}
4689
4693
}
4690
4694
@@ -4708,11 +4712,20 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4708
4712
val owner = tree.symbol
4709
4713
TypeDef .copy(tree)(tree.name, transformTree(tree.rhs)(owner))
4710
4714
case tree : ClassDef =>
4711
- ClassDef .copy(tree)(tree.name, tree.constructor, tree.parents, tree.self, tree.body)
4715
+ val constructor @ DefDef (_, _, _, _) = transformStatement(tree.constructor)(tree.symbol)
4716
+ val parents = tree.parents.map(transformTree(_)(tree.symbol))
4717
+ val self = tree.self.map { slf =>
4718
+ transformStatement(slf)(tree.symbol) match
4719
+ case self : ValDef => self
4720
+ }
4721
+ val body = tree.body.map(transformStatement(_)(tree.symbol))
4722
+ ClassDef .copy(tree)(tree.name, constructor, parents, self, body)
4712
4723
case tree : Import =>
4713
4724
Import .copy(tree)(transformTerm(tree.expr)(owner), tree.selectors)
4714
4725
case tree : Export =>
4715
4726
tree
4727
+ case _ =>
4728
+ throw MatchError (tree.show(using Printer .TreeStructure ))
4716
4729
}
4717
4730
}
4718
4731
@@ -4758,6 +4771,10 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4758
4771
Repeated .copy(tree)(transformTerms(elems)(owner), transformTypeTree(elemtpt)(owner))
4759
4772
case Inlined (call, bindings, expansion) =>
4760
4773
Inlined .copy(tree)(call, transformSubTrees(bindings)(owner), transformTerm(expansion)(owner))
4774
+ case SummonFrom (cases) =>
4775
+ SummonFrom .copy(tree)(transformCaseDefs(cases)(owner))
4776
+ case _ =>
4777
+ throw MatchError (tree.show(using Printer .TreeStructure ))
4761
4778
}
4762
4779
}
4763
4780
@@ -4786,6 +4803,8 @@ trait Quotes { self: runtime.QuoteUnpickler & runtime.QuoteMatching =>
4786
4803
TypeBind .copy(tree)(tree.name, tree.body)
4787
4804
case tree : TypeBlock =>
4788
4805
TypeBlock .copy(tree)(tree.aliases, tree.tpt)
4806
+ case _ =>
4807
+ throw MatchError (tree.show(using Printer .TreeStructure ))
4789
4808
}
4790
4809
4791
4810
def transformCaseDef (tree : CaseDef )(owner : Symbol ): CaseDef = {
0 commit comments