24 lines
835 B
Scala
24 lines
835 B
Scala
// See LICENSE.SiFive for license details.
|
|
|
|
package freechips.rocketchip.macros
|
|
|
|
import scala.language.experimental.macros
|
|
import scala.reflect.macros.blackbox.Context
|
|
|
|
case class ValNameImpl(name: String)
|
|
|
|
object ValNameImpl
|
|
{
|
|
implicit def materialize: ValNameImpl = macro detail
|
|
def detail(c: Context): c.Expr[ValNameImpl] = {
|
|
import c.universe._
|
|
def allOwners(s: c.Symbol): Seq[c.Symbol] =
|
|
if (s == `NoSymbol`) Nil else s +: allOwners(s.owner)
|
|
val terms = allOwners(c.internal.enclosingOwner).filter(_.isTerm).map(_.asTerm)
|
|
terms.filter(_.isVal).map(_.name.toString).find(_(0) != '$').map { s =>
|
|
val trim = s.replaceAll("\\s", "")
|
|
c.Expr[ValNameImpl] { q"_root_.freechips.rocketchip.macros.ValNameImpl(${trim})" }
|
|
}.getOrElse(c.abort(c.enclosingPosition, "Not a valid application."))
|
|
}
|
|
}
|