summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-12-02 15:02:47 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-12-10 16:02:05 +0100
commit26959249070cc0a00270e192885940dab050a693 (patch)
treec7106c9297d81bc3e3bf7a0c5b9ccd105ea7cce2
parent207b945353bd49f4357ebb9921280591b309db3f (diff)
downloadscala-26959249070cc0a00270e192885940dab050a693.tar.gz
scala-26959249070cc0a00270e192885940dab050a693.tar.bz2
scala-26959249070cc0a00270e192885940dab050a693.zip
SI-8009 Ensure that Idents preserve isBackquoted property
-rw-r--r--src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala2
-rw-r--r--src/reflect/scala/reflect/api/BuildUtils.scala6
-rw-r--r--src/reflect/scala/reflect/internal/BuildUtils.scala9
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala5
-rw-r--r--test/files/scalacheck/quasiquotes/TermConstructionProps.scala4
5 files changed, 24 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
index e72651b6df..aa27f6030f 100644
--- a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
+++ b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
@@ -167,6 +167,8 @@ trait Reifiers { self: Quasiquotes =>
reifyBuildCall(nme.SyntacticTypeApplied, fun, targs)
case SyntacticFunction(args, body) =>
reifyBuildCall(nme.SyntacticFunction, args, body)
+ case SyntacticIdent(name, isBackquoted) =>
+ reifyBuildCall(nme.SyntacticIdent, name, isBackquoted)
case Block(Nil, Placeholder(tree, _, DotDot)) =>
mirrorBuildCall(nme.SyntacticBlock, tree)
case Block(Nil, other) =>
diff --git a/src/reflect/scala/reflect/api/BuildUtils.scala b/src/reflect/scala/reflect/api/BuildUtils.scala
index 9af6422e0c..673cf0d0b4 100644
--- a/src/reflect/scala/reflect/api/BuildUtils.scala
+++ b/src/reflect/scala/reflect/api/BuildUtils.scala
@@ -245,5 +245,11 @@ private[reflect] trait BuildUtils { self: Universe =>
def apply(enums: List[Tree], body: Tree): Tree
def unapply(tree: Tree): Option[(List[Tree], Tree)]
}
+
+ val SyntacticIdent: SyntacticIdentExtractor
+ trait SyntacticIdentExtractor {
+ def apply(name: Name, isBackquoted: Boolean = false): Ident
+ def unapply(tree: Ident): Option[(Name, Boolean)]
+ }
}
}
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala
index d7d0b27dd2..22c10520b5 100644
--- a/src/reflect/scala/reflect/internal/BuildUtils.scala
+++ b/src/reflect/scala/reflect/internal/BuildUtils.scala
@@ -663,6 +663,15 @@ trait BuildUtils { self: SymbolTable =>
case annottee => Some(annottee)
}
}
+
+ object SyntacticIdent extends SyntacticIdentExtractor {
+ def apply(name: Name, isBackquoted: Boolean) = {
+ val id = self.Ident(name)
+ if (isBackquoted) id updateAttachment BackquotedIdentifierAttachment
+ id
+ }
+ def unapply(tree: Ident): Some[(Name, Boolean)] = Some((tree.name, tree.hasAttachment[BackquotedIdentifierAttachment.type]))
+ }
}
val build: BuildImpl = new BuildImpl
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index 9b5cdcb402..f6c612f4eb 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -597,9 +597,10 @@ trait StdNames {
val SyntacticForYield: NameType = "SyntacticForYield"
val SyntacticFunction: NameType = "SyntacticFunction"
val SyntacticFunctionType: NameType = "SyntacticFunctionType"
- val SyntacticPackageObjectDef: NameType = "SyntacticPackageObjectDef"
- val SyntacticObjectDef: NameType = "SyntacticObjectDef"
+ val SyntacticIdent: NameType = "SyntacticIdent"
val SyntacticNew: NameType = "SyntacticNew"
+ val SyntacticObjectDef: NameType = "SyntacticObjectDef"
+ val SyntacticPackageObjectDef: NameType = "SyntacticPackageObjectDef"
val SyntacticTraitDef: NameType = "SyntacticTraitDef"
val SyntacticTuple: NameType = "SyntacticTuple"
val SyntacticTupleType: NameType = "SyntacticTupleType"
diff --git a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
index 503c7e5353..ded8fd9c16 100644
--- a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
@@ -209,4 +209,8 @@ object TermConstructionProps extends QuasiquoteProperties("term construction") {
assertEqAst(q"..$xs", "{1; 2}")
assertEqAst(q"{..$xs}", "{1; 2}")
}
+
+ property("SI-8009") = test {
+ q"`foo`".asInstanceOf[reflect.internal.SymbolTable#Ident].isBackquoted
+ }
}