summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/FreeVars.scala
blob: 1bf36e8bf2a7323b2c81befcd83ed07deefc2113 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package scala.tools.nsc
package ast

trait FreeVars extends reflect.internal.FreeVars { self: Global =>

  import self._
  import definitions._
  import treeInfo._

  def logFreeVars(position: Position, reified: Tree): Unit = {
    if (settings.logFreeTerms.value || settings.logFreeTypes.value) {
      reified match {
        case Reified(_, symbolTable, _) =>
          // logging free vars only when they are untyped prevents avalanches of duplicate messages
          symbolTable foreach {
            case FreeTermDef(_, _, binding, origin) if settings.logFreeTerms.value && binding.tpe == null =>
              reporter.echo(position, "free term: %s %s".format(showRaw(binding), origin))
            case FreeTypeDef(_, _, binding, origin) if settings.logFreeTypes.value && binding.tpe == null =>
              reporter.echo(position, "free type: %s %s".format(showRaw(binding), origin))
            case _ =>
              // do nothing
          }
      }
    }
  }
}