summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-11-14 14:51:58 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-11-17 18:17:50 +0100
commit1080da80769cdc2bef2f06977094caff625b4a15 (patch)
tree83400ad47cc77390528ff5207ccfe989230b76b1 /src/compiler
parent69e62de87d80cf5b9d8c7f4eefcea0638fb2759d (diff)
downloadscala-1080da80769cdc2bef2f06977094caff625b4a15.tar.gz
scala-1080da80769cdc2bef2f06977094caff625b4a15.tar.bz2
scala-1080da80769cdc2bef2f06977094caff625b4a15.zip
refactor out fresh name prefix extraction logic
1. refactor out FreshNameExtractor out of Quasiquotes cake into SymbolTable (can’t put it outside due to the fact that names are path-dependent) 2. add optional parameter to the fresh name creator to cover additional qq$ prefix needed for quasiquotes 3. add unit tests
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala20
1 files changed, 2 insertions, 18 deletions
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
index 3901184c25..126c14ac81 100644
--- a/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
+++ b/src/compiler/scala/tools/reflect/quasiquotes/Parsers.scala
@@ -55,9 +55,7 @@ trait Parsers { self: Quasiquotes =>
def isHole(name: Name): Boolean = holeMap.contains(name)
- override implicit def fresh: FreshNameCreator = new FreshNameCreator {
- override def newName(prefix: String) = super.newName(nme.QUASIQUOTE_PREFIX + prefix)
- }
+ override implicit def fresh: FreshNameCreator = new FreshNameCreator(nme.QUASIQUOTE_PREFIX)
override val treeBuilder = new ParserTreeBuilder {
override implicit def fresh: FreshNameCreator = parser.fresh
@@ -189,19 +187,5 @@ trait Parsers { self: Quasiquotes =>
}
}
- // Extractor that matches names which were generated by call to
- // freshTermName or freshTypeName within quasiquotes. Such names
- // have qq$some$random$prefix$0 shape where qq$ part is added
- // by modified fresh name creator in QuasiquoteParser.
- object FreshName {
- def unapply(name: Name): Option[String] =
- name.toString.split("\\$").toSeq match {
- case qq +: (middle :+ last)
- if qq + "$" == nme.QUASIQUOTE_PREFIX
- && Try(last.toInt).isSuccess && middle.nonEmpty =>
- Some(middle.mkString("", "$", "$"))
- case _ =>
- None
- }
- }
+ object FreshName extends FreshNameExtractor(nme.QUASIQUOTE_PREFIX)
} \ No newline at end of file