diff options
author | Den Shabalin <den.shabalin@gmail.com> | 2013-10-10 12:56:37 +0200 |
---|---|---|
committer | Den Shabalin <den.shabalin@gmail.com> | 2013-10-18 17:24:52 +0200 |
commit | 27fca0fc3fecef10ece59a4c28282301ce2cd961 (patch) | |
tree | 5a04db11fe99797764430e0f816011bbf187289c /src/reflect | |
parent | 3692acaa40c8edcf4a5e7f4fcfa29ef090385df2 (diff) | |
download | scala-27fca0fc3fecef10ece59a4c28282301ce2cd961.tar.gz scala-27fca0fc3fecef10ece59a4c28282301ce2cd961.tar.bz2 scala-27fca0fc3fecef10ece59a4c28282301ce2cd961.zip |
decrease duplication of fresh* function definitions
This commit extracts out freshTermName and freshTypeName to the top-level
with implicit fresh name creator argument. This will let to refactor out
more methods out of tree builder into treegen that are dependent on fresh
name generator. We also save quite a bit of boilerplate by not having to
redefined fresh functions all over the place.
Diffstat (limited to 'src/reflect')
-rw-r--r-- | src/reflect/scala/reflect/internal/BuildUtils.scala | 6 | ||||
-rw-r--r-- | src/reflect/scala/reflect/internal/SymbolTable.scala | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala index 39dfe60ecf..46119ae802 100644 --- a/src/reflect/scala/reflect/internal/BuildUtils.scala +++ b/src/reflect/scala/reflect/internal/BuildUtils.scala @@ -131,11 +131,11 @@ trait BuildUtils { self: SymbolTable => def RefTree(qual: Tree, sym: Symbol) = self.RefTree(qual, sym.name) setSymbol sym - def withFreshTermName[T](prefix: String)(f: TermName => T): T = f(TermName(freshNameCreator.newName(prefix))) + def withFreshTermName[T](prefix: String)(f: TermName => T): T = f(freshTermName(prefix)) - def withFreshTypeName[T](prefix: String)(f: TypeName => T): T = f(TypeName(freshNameCreator.newName(prefix))) + def withFreshTypeName[T](prefix: String)(f: TypeName => T): T = f(freshTypeName(prefix)) - private val freshNameCreator = new util.FreshNameCreator + private implicit val fresh = new FreshNameCreator object FlagsRepr extends FlagsReprExtractor { def apply(bits: Long): FlagSet = bits diff --git a/src/reflect/scala/reflect/internal/SymbolTable.scala b/src/reflect/scala/reflect/internal/SymbolTable.scala index a6f9dfc164..0e9c866ace 100644 --- a/src/reflect/scala/reflect/internal/SymbolTable.scala +++ b/src/reflect/scala/reflect/internal/SymbolTable.scala @@ -370,6 +370,10 @@ abstract class SymbolTable extends macros.Universe * Adds the `sm` String interpolator to a [[scala.StringContext]]. */ implicit val StringContextStripMarginOps: StringContext => StringContextStripMarginOps = util.StringContextStripMarginOps + + // fresh name creation + def freshTermName(prefix: String = "x$")(implicit creator: FreshNameCreator): TermName = newTermName(creator.newName(prefix)) + def freshTypeName(prefix: String)(implicit creator: FreshNameCreator): TypeName = newTypeName(creator.newName(prefix)) } object SymbolTableStats { |