summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEugene Burmako <xeno.by@gmail.com>2014-02-17 23:18:50 +0100
committerEugene Burmako <xeno.by@gmail.com>2014-02-18 09:23:38 +0100
commitafecfe90cd98a657ce83f3e833c940518563064e (patch)
tree23f0dd8d4a1a9aebf47f098c65c83746da4f0efc /src
parent34532d7e92b8ed2a9411260007fcfcc00f377ccc (diff)
downloadscala-afecfe90cd98a657ce83f3e833c940518563064e.tar.gz
scala-afecfe90cd98a657ce83f3e833c940518563064e.tar.bz2
scala-afecfe90cd98a657ce83f3e833c940518563064e.zip
reverses SI-6484
Unfortunately I have to revert b017629 because of SI-8303. There are projects (e.g. slick) that use typeOf in annotations, which effectively means bye-bye.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/reflect/reify/phases/Reshape.scala26
-rw-r--r--src/reflect/scala/reflect/api/TypeTags.scala16
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala2
-rw-r--r--src/reflect/scala/reflect/macros/Aliases.scala12
4 files changed, 5 insertions, 51 deletions
diff --git a/src/compiler/scala/reflect/reify/phases/Reshape.scala b/src/compiler/scala/reflect/reify/phases/Reshape.scala
index 9a54632796..6c073c0b4c 100644
--- a/src/compiler/scala/reflect/reify/phases/Reshape.scala
+++ b/src/compiler/scala/reflect/reify/phases/Reshape.scala
@@ -78,7 +78,7 @@ trait Reshape {
super.transform(preTyper)
}
- private def undoMacroExpansion(tree: Tree): Tree = {
+ private def undoMacroExpansion(tree: Tree): Tree =
tree.attachments.get[analyzer.MacroExpansionAttachment] match {
case Some(analyzer.MacroExpansionAttachment(original, _)) =>
def mkImplicitly(tp: Type) = atPos(tree.pos)(
@@ -96,30 +96,8 @@ trait Reshape {
case Apply(TypeApply(_, List(tt)), List(pre)) if sym == materializeTypeTag => mkImplicitly(typeRef(pre.tpe, TypeTagClass, List(tt.tpe)))
case _ => original
}
- case None =>
- // `typeOf[T]` calls get translated into `typeOf[T](Predef.implicitly)` by Reshape
- // unfortunately, this doesn't work well with the recently introduced `def typeOf[T: TypeTag](x: T)` overload
- // somehow the typechecker is now longer able to make sense of targless implicitly failing with:
- // ambiguous implicit values:
- // both value StringCanBuildFrom in object Predef of type => scala.collection.generic.CanBuildFrom[String,Char,String]
- // and method conforms in object Predef of type [A]=> <:<[A,A]
- // match expected type T
- // could not find implicit value for parameter e: T
- // overloaded method value typeOf with alternatives:
- // (x: => List[Int])(implicit evidence$2: ru.TypeTag[List[Int]])ru.Type <and>
- // (implicit ttag: ru.TypeTag[List[Int]])ru.Type
- // cannot be applied to (Unit)
- // therefore here we give the calls to `weakTypeOf` and `typeOf` a bit of extra helping
- // erasing synthetic implicit arguments altogether, so that this weird tree shape doesn't appear in the reifee in the first place
- def isTypeOf(sym: Symbol): Boolean = {
- sym != null && (sym.name == nme.typeOf || sym.name == nme.weakTypeOf) && sym.owner == TypeTagsClass
- }
- tree match {
- case Apply(fun, args) if !tree.tpe.isInstanceOf[MethodType] && isTypeOf(fun.symbol) => fun
- case _ => tree
- }
+ case _ => tree
}
- }
override def transformModifiers(mods: Modifiers) = {
val mods1 = toPreTyperModifiers(mods, currentSymbol)
diff --git a/src/reflect/scala/reflect/api/TypeTags.scala b/src/reflect/scala/reflect/api/TypeTags.scala
index 1d5bf5d28b..1dfc84be69 100644
--- a/src/reflect/scala/reflect/api/TypeTags.scala
+++ b/src/reflect/scala/reflect/api/TypeTags.scala
@@ -326,25 +326,13 @@ trait TypeTags { self: Universe =>
* Shortcut for `implicitly[WeakTypeTag[T]].tpe`
* @group TypeTags
*/
- def weakTypeOf[T](implicit attag: WeakTypeTag[T]): Type = if (attag != null) attag.tpe else typeOf[Null]
-
- /**
- * Type of `x` as derived from a weak type tag.
- * @group TypeTags
- */
- def weakTypeOf[T: WeakTypeTag](x: => T): Type = weakTypeOf[T]
+ def weakTypeOf[T](implicit attag: WeakTypeTag[T]): Type = attag.tpe
/**
* Shortcut for `implicitly[TypeTag[T]].tpe`
* @group TypeTags
*/
- def typeOf[T](implicit ttag: TypeTag[T]): Type = if (ttag != null) ttag.tpe else typeOf[Null]
-
- /**
- * Type of `x` as derived from a type tag.
- * @group TypeTags
- */
- def typeOf[T: TypeTag](x: => T): Type = typeOf[T]
+ def typeOf[T](implicit ttag: TypeTag[T]): Type = ttag.tpe
/**
* Type symbol of `x` as derived from a type tag.
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index b95c83d6cb..0c28c4fba4 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -787,7 +787,6 @@ trait StdNames {
val tree : NameType = "tree"
val true_ : NameType = "true"
val typedProductIterator: NameType = "typedProductIterator"
- val typeOf: NameType = "typeOf"
val TypeName: NameType = "TypeName"
val typeTagToManifest: NameType = "typeTagToManifest"
val unapply: NameType = "unapply"
@@ -802,7 +801,6 @@ trait StdNames {
val valueOf : NameType = "valueOf"
val values : NameType = "values"
val wait_ : NameType = "wait"
- val weakTypeOf: NameType = "weakTypeOf"
val withFilter: NameType = "withFilter"
val zero: NameType = "zero"
diff --git a/src/reflect/scala/reflect/macros/Aliases.scala b/src/reflect/scala/reflect/macros/Aliases.scala
index bd918bbe56..64819a8601 100644
--- a/src/reflect/scala/reflect/macros/Aliases.scala
+++ b/src/reflect/scala/reflect/macros/Aliases.scala
@@ -110,12 +110,7 @@ trait Aliases {
/**
* Shortcut for `implicitly[WeakTypeTag[T]].tpe`
*/
- def weakTypeOf[T](implicit attag: WeakTypeTag[T]): Type = if (attag != null) attag.tpe else typeOf[Null]
-
- /**
- * Type of `x` as derived from a weak type tag.
- */
- def weakTypeOf[T: WeakTypeTag](x: => T): Type = weakTypeOf[T]
+ def weakTypeOf[T](implicit attag: WeakTypeTag[T]): Type = attag.tpe
/**
* Shortcut for `implicitly[TypeTag[T]].tpe`
@@ -123,11 +118,6 @@ trait Aliases {
def typeOf[T](implicit ttag: TypeTag[T]): Type = ttag.tpe
/**
- * Type of `x` as derived from a type tag.
- */
- def typeOf[T: TypeTag](x: => T): Type = typeOf[T]
-
- /**
* Type symbol of `x` as derived from a type tag.
*/
def symbolOf[T: WeakTypeTag]: universe.TypeSymbol = universe.symbolOf[T]