8000 Avoid unneeded tree duplicate/reset in default getter, case class synth · retronym/scala@d89ab83 · GitHub
[go: up one dir, main page]

Skip to content

Commit d89ab83

Browse files
committed
Avoid unneeded tree duplicate/reset in default getter, case class synth
More of the same as scala#5875 The change to default getters reduced tree churn by 6x in a real world project.
1 parent cb320be commit d89ab83

File tree

2 files changed

+4
-3
lines changed

2 files changed

+4
-3
lines changed

src/compiler/scala/tools/nsc/typechecker/Namers.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1437,7 +1437,7 @@ trait Namers extends MethodSynthesis {
14371437
* flag.
14381438
*/
14391439
private def addDefaultGetters(meth: Symbol, ddef: DefDef, vparamss: List[List[ValDef]], tparams: List[TypeDef], overridden: Symbol) {
1440-
val DefDef(_, _, rtparams0, rvparamss0, _, _) = resetAttrs(ddef.duplicate)
1440+
val DefDef(_, _, rtparams0, rvparamss0, _, _) = resetAttrs(deriveDefDef(ddef)(_ => EmptyTree).duplicate)
14411441
// having defs here is important to make sure that there's no sneaky tree sharing
14421442
// in methods with multiple default parameters
14431443
def rtparams = rtparams0.map(_.duplicate)
@@ -1523,7 +1523,7 @@ trait Namers extends MethodSynthesis {
15231523
return // fix #3649 (prevent crash in erroneous source code)
15241524
}
15251525
}
1526-
val ClassDef(_, _, rtparams, _) = resetAttrs(cdef.duplicate)
1526+
val ClassDef(_, _, rtparams, _) = resetAttrs(deriveClassDef(cdef)(_ => Template(Nil, noSelfType, Nil)).duplicate)
15271527
defTparams = rtparams.map(rt => copyTypeDef(rt)(mods = rt.mods &~ (COVARIANT | CONTRAVARIANT)))
15281528
nmr
15291529
}

src/compiler/scala/tools/nsc/typechecker/Unapplies.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ trait Unapplies extends ast.TreeDSL {
6060
}
6161

6262
private def constrTparamsInvariant(cdef: ClassDef): List[TypeDef] = {
63-
val ClassDef(_, _, tparams, _) = resetAttrs(cdef.duplicate)
63+
val prunedClassDef = deriveClassDef(cdef)(tmpl => deriveTemplate(tmpl)(_ => Nil))
64+
val ClassDef(_, _, tparams, _) = resetAttrs(prunedClassDef.duplicate)
6465
val tparamsInvariant = tparams.map(tparam => copyTypeDef(tparam)(mods = tparam.mods &~ (COVARIANT | CONTRAVARIANT)))
6566
tparamsInvariant
6667
}

0 commit comments

Comments
 (0)
0