summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/reflect
diff options
context:
space:
mode:
authorDenys Shabalin <denys.shabalin@typesafe.com>2014-03-17 10:24:17 +0100
committerDenys Shabalin <denys.shabalin@typesafe.com>2014-03-17 10:30:45 +0100
commitb6a54a8fa71515fd97c5f225c11b24d971a703c8 (patch)
tree253a16183cc6a93cc0661f8edb58c731513d0816 /src/compiler/scala/tools/reflect
parent79f7e05c082a1810f9315e19658e20af15b08235 (diff)
downloadscala-b6a54a8fa71515fd97c5f225c11b24d971a703c8.tar.gz
scala-b6a54a8fa71515fd97c5f225c11b24d971a703c8.tar.bz2
scala-b6a54a8fa71515fd97c5f225c11b24d971a703c8.zip
SI-8420 don't crash on unquoting of non-liftable native type
Previously quasiquote's type-based dispatch failed to handle situation where unquotee's type is native but non-liftable and was used to splice with non-zero cardinality.
Diffstat (limited to 'src/compiler/scala/tools/reflect')
-rw-r--r--src/compiler/scala/tools/reflect/quasiquotes/Holes.scala6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Holes.scala b/src/compiler/scala/tools/reflect/quasiquotes/Holes.scala
index 8376fca4ad..55a28f9f20 100644
--- a/src/compiler/scala/tools/reflect/quasiquotes/Holes.scala
+++ b/src/compiler/scala/tools/reflect/quasiquotes/Holes.scala
@@ -78,8 +78,10 @@ trait Holes { self: Quasiquotes =>
val (strippedTpe, tpe): (Type, Type) = {
val (strippedRank, strippedTpe) = stripIterable(unquotee.tpe, limit = Some(annotatedRank))
if (isBottomType(strippedTpe)) cantSplice()
- else if (isNativeType(strippedTpe)) (strippedTpe, iterableTypeFromRank(annotatedRank, strippedTpe))
- else if (isLiftableType(strippedTpe)) (strippedTpe, iterableTypeFromRank(annotatedRank, treeType))
+ else if (isNativeType(strippedTpe)) {
+ if (strippedRank != NoDot && !(strippedTpe <:< treeType) && !isLiftableType(strippedTpe)) cantSplice()
+ else (strippedTpe, iterableTypeFromRank(annotatedRank, strippedTpe))
+ } else if (isLiftableType(strippedTpe)) (strippedTpe, iterableTypeFromRank(annotatedRank, treeType))
else cantSplice()
}