aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/scala/async/internal/TransformUtils.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-08-21 23:29:11 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-08-22 17:24:38 +0200
commit98e2f26000aaaf5abb527f776426c4759b95cde8 (patch)
tree03dbf931b87f952286febbf8bced6ca735b5c2a5 /src/main/scala/scala/async/internal/TransformUtils.scala
parent8371f480ca6783ea52aa76f4990eed101938c224 (diff)
downloadscala-async-98e2f26000aaaf5abb527f776426c4759b95cde8.tar.gz
scala-async-98e2f26000aaaf5abb527f776426c4759b95cde8.tar.bz2
scala-async-98e2f26000aaaf5abb527f776426c4759b95cde8.zip
Use @uncheckedBounds to avoid introducing refchecks errors
... in code that would otherwise have smuggled through these slack LUBs in the types of trees but never in a TypeTree. More details in SI-7694. Fixes #29
Diffstat (limited to 'src/main/scala/scala/async/internal/TransformUtils.scala')
-rw-r--r--src/main/scala/scala/async/internal/TransformUtils.scala13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/main/scala/scala/async/internal/TransformUtils.scala b/src/main/scala/scala/async/internal/TransformUtils.scala
index 70237bc..663ca45 100644
--- a/src/main/scala/scala/async/internal/TransformUtils.scala
+++ b/src/main/scala/scala/async/internal/TransformUtils.scala
@@ -244,8 +244,19 @@ private[async] trait TransformUtils {
// Attributed version of `TreeGen#mkCastPreservingAnnotations`
def mkAttributedCastPreservingAnnotations(tree: Tree, tp: Type): Tree = {
atPos(tree.pos) {
- val casted = gen.mkAttributedCast(tree, tp.withoutAnnotations.dealias)
+ val casted = gen.mkAttributedCast(tree, uncheckedBounds(tp.withoutAnnotations).dealias)
Typed(casted, TypeTree(tp)).setType(tp)
}
}
+
+ // =====================================
+ // Copy/Pasted from Scala 2.10.3. See SI-7694.
+ private lazy val UncheckedBoundsClass = {
+ global.rootMirror.getClassIfDefined("scala.reflect.internal.annotations.uncheckedBounds")
+ }
+ final def uncheckedBounds(tp: Type): Type = {
+ if (tp.typeArgs.isEmpty || UncheckedBoundsClass == NoSymbol) tp
+ else tp.withAnnotation(AnnotationInfo marker UncheckedBoundsClass.tpe)
+ }
+ // =====================================
}