diff options
author | Jason Zaugg <jzaugg@gmail.com> | 2013-08-21 23:29:11 +0200 |
---|---|---|
committer | Jason Zaugg <jzaugg@gmail.com> | 2013-08-22 17:24:38 +0200 |
commit | 98e2f26000aaaf5abb527f776426c4759b95cde8 (patch) | |
tree | 03dbf931b87f952286febbf8bced6ca735b5c2a5 /src/main/scala/scala/async/internal/TransformUtils.scala | |
parent | 8371f480ca6783ea52aa76f4990eed101938c224 (diff) | |
download | scala-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.scala | 13 |
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) + } + // ===================================== } |