// 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(t => t.isVal || t.isLazy).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.")) } }