Skip to content

Commit abe9e92

Browse files
committed
Generalize instrumentation
Make it easer to search for new calls, and include `.toString` in the list of tracked methods
1 parent 23fee7f commit abe9e92

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

compiler/src/dotty/tools/dotc/transform/Instrumentation.scala

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import Decorators._
1111
import ast.Trees._
1212
import MegaPhase._
1313
import StdNames.nme
14-
import Names.TermName
14+
import Names._
1515
import Constants.Constant
1616

1717

@@ -28,14 +28,15 @@ class Instrumentation extends MiniPhase { thisPhase =>
2828
ctx.settings.YinstrumentClosures.value ||
2929
ctx.settings.YinstrumentAllocations.value
3030

31+
private val namesOfInterest = List("::", "+=", "toString")
32+
private var namesToRecord: Set[Name] = _
33+
3134
private var consName: TermName = _
3235
private var consEqName: TermName = _
3336

34-
override def prepareForUnit(tree: Tree)(using Context): Context = {
35-
consName = "::".toTermName
36-
consEqName = "+=".toTermName
37+
override def prepareForUnit(tree: Tree)(using Context): Context =
38+
namesToRecord = namesOfInterest.map(_.toTermName).toSet
3739
ctx
38-
}
3940

4041
private def record(category: String, tree: Tree)(using Context): Tree = {
4142
val key = Literal(Constant(s"$category${tree.sourcePos.show}"))
@@ -45,8 +46,8 @@ class Instrumentation extends MiniPhase { thisPhase =>
4546
override def transformApply(tree: Apply)(using Context): Tree = tree.fun match {
4647
case Select(nu: New, _) =>
4748
cpy.Block(tree)(record(i"alloc/${nu.tpe}@", tree) :: Nil, tree)
48-
case Select(_, name) if name == consName || name == consEqName =>
49-
cpy.Block(tree)(record("alloc/::", tree) :: Nil, tree)
49+
case Select(_, name) if namesToRecord.contains(name) =>
50+
cpy.Block(tree)(record(i"alloc/$name", tree) :: Nil, tree)
5051
case _ =>
5152
tree
5253
}

0 commit comments

Comments
 (0)