summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2012-09-19 12:05:19 +0200
committerEugene Burmako <xeno.by@gmail.com>2012-09-19 17:14:42 +0200
commit50b5bdefec899bf441742a40f525234eac65cbaa (patch)
tree0fac51fe7d1a99cc12cdb718e30240b32e72bbbc
parent3c542251e04cd85903ec12f5747c86d5c6c1a867 (diff)
downloadscala-50b5bdefec899bf441742a40f525234eac65cbaa.tar.gz
scala-50b5bdefec899bf441742a40f525234eac65cbaa.tar.bz2
scala-50b5bdefec899bf441742a40f525234eac65cbaa.zip
fixes NameTypes in base names
NameType is introduced in base.StandardNames#NamesBase to abstract away the difference between term names and type names in order to encode common names such as EMPTY or WILDCARD. Flavor-specific name repositories, such as TermNames and TypeNames are supposed to override NameType fixing it to correspondingly TermName or TypeName. Unfortunately I completely overlooked this and as a result some standard names were typed with insufficient precision, e.g. This(tpnme.EMPTY) didn't work.
-rw-r--r--src/library/scala/reflect/base/Base.scala2
-rw-r--r--src/library/scala/reflect/base/StandardNames.scala6
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala2
-rw-r--r--test/files/run/t6394b.check1
-rw-r--r--test/files/run/t6394b.flags1
-rw-r--r--test/files/run/t6394b/Macros_1.scala12
-rw-r--r--test/files/run/t6394b/Test_2.scala4
7 files changed, 22 insertions, 6 deletions
diff --git a/src/library/scala/reflect/base/Base.scala b/src/library/scala/reflect/base/Base.scala
index 7cbc39a3b6..5136f41df4 100644
--- a/src/library/scala/reflect/base/Base.scala
+++ b/src/library/scala/reflect/base/Base.scala
@@ -212,7 +212,6 @@ class Base extends Universe { self =>
def newTypeName(str: String) = new TypeName(str)
object nme extends TermNamesBase {
- type NameType = TermName
val WILDCARD = newTermName("_")
val CONSTRUCTOR = newTermName("<init>")
val ROOTPKG = newTermName("_root_")
@@ -223,7 +222,6 @@ class Base extends Universe { self =>
}
object tpnme extends TypeNamesBase {
- type NameType = TypeName
val WILDCARD = nme.WILDCARD.toTypeName
val EMPTY = nme.EMPTY.toTypeName
val WILDCARD_STAR = newTypeName("_*")
diff --git a/src/library/scala/reflect/base/StandardNames.scala b/src/library/scala/reflect/base/StandardNames.scala
index 0b4ec3728a..fc1d247512 100644
--- a/src/library/scala/reflect/base/StandardNames.scala
+++ b/src/library/scala/reflect/base/StandardNames.scala
@@ -27,11 +27,13 @@ trait StandardNames {
}
trait TermNamesBase extends NamesBase {
- val CONSTRUCTOR: TermName
- val ROOTPKG: TermName
+ type NameType = TermName
+ val CONSTRUCTOR: NameType
+ val ROOTPKG: NameType
}
trait TypeNamesBase extends NamesBase {
+ type NameType = TypeName
val EMPTY: NameType
val WILDCARD_STAR: NameType
}
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index 2f305296f5..8e00ef74e5 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -206,7 +206,6 @@ trait StdNames {
}
abstract class TypeNames extends Keywords with TypeNamesApi {
- type NameType = TypeName
protected implicit def createNameType(name: String): TypeName = newTypeNameCached(name)
final val BYNAME_PARAM_CLASS_NAME: NameType = "<byname>"
@@ -273,7 +272,6 @@ trait StdNames {
}
abstract class TermNames extends Keywords with TermNamesApi {
- type NameType = TermName
protected implicit def createNameType(name: String): TermName = newTermNameCached(name)
/** Base strings from which synthetic names are derived. */
diff --git a/test/files/run/t6394b.check b/test/files/run/t6394b.check
new file mode 100644
index 0000000000..34997f71e3
--- /dev/null
+++ b/test/files/run/t6394b.check
@@ -0,0 +1 @@
+TEST
diff --git a/test/files/run/t6394b.flags b/test/files/run/t6394b.flags
new file mode 100644
index 0000000000..cd66464f2f
--- /dev/null
+++ b/test/files/run/t6394b.flags
@@ -0,0 +1 @@
+-language:experimental.macros \ No newline at end of file
diff --git a/test/files/run/t6394b/Macros_1.scala b/test/files/run/t6394b/Macros_1.scala
new file mode 100644
index 0000000000..5d93e1cda8
--- /dev/null
+++ b/test/files/run/t6394b/Macros_1.scala
@@ -0,0 +1,12 @@
+import scala.reflect.macros.Context
+
+object Macros {
+ def impl(c:Context): c.Expr[Any] = {
+ import c.universe._
+
+ val selfTree = This(tpnme.EMPTY)
+ c.Expr[AnyRef](selfTree)
+ }
+
+ def foo: Any = macro impl
+} \ No newline at end of file
diff --git a/test/files/run/t6394b/Test_2.scala b/test/files/run/t6394b/Test_2.scala
new file mode 100644
index 0000000000..75e84f0e38
--- /dev/null
+++ b/test/files/run/t6394b/Test_2.scala
@@ -0,0 +1,4 @@
+object Test extends App {
+ println(Macros.foo)
+ override def toString = "TEST"
+} \ No newline at end of file