summaryrefslogtreecommitdiff
path: root/src/compiler
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-10-08 11:29:30 +0000
committerMartin Odersky <odersky@gmail.com>2009-10-08 11:29:30 +0000
commit176401d4531a6b868ff7bb344a479336eb5ec4ab (patch)
tree20b8a90049b30c19341d8a0692e27e5272006e24 /src/compiler
parent383b4ca492d20f01c18e72f27ccf38352a9ee889 (diff)
downloadscala-176401d4531a6b868ff7bb344a479336eb5ec4ab.tar.gz
scala-176401d4531a6b868ff7bb344a479336eb5ec4ab.tar.bz2
scala-176401d4531a6b868ff7bb344a479336eb5ec4ab.zip
Fixed #2425
Diffstat (limited to 'src/compiler')
-rw-r--r--src/compiler/scala/tools/nsc/FatalError.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala14
2 files changed, 10 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/FatalError.scala b/src/compiler/scala/tools/nsc/FatalError.scala
index 836bd79175..bded46ffdd 100644
--- a/src/compiler/scala/tools/nsc/FatalError.scala
+++ b/src/compiler/scala/tools/nsc/FatalError.scala
@@ -7,7 +7,9 @@
package scala.tools.nsc
case class FatalError(msg: String) extends Exception(msg)
+
class MissingRequirementError(val req: String) extends FatalError(req + " not found.")
+
object MissingRequirementError {
def unapply(x: Throwable) = x match {
case x: MissingRequirementError => Some(x.req)
diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala
index 769174aead..a5f764952f 100644
--- a/src/compiler/scala/tools/nsc/transform/Erasure.scala
+++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala
@@ -901,21 +901,23 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast.
treeCopy.DefDef(tree, mods, name, List(), vparamss, tpt, rhs)
case TypeDef(_, _, _, _) =>
EmptyTree
- case TypeApply(fun, args @ List(arg)) // !!! todo: simplify by having GenericArray also extract trees
+ case Apply(instanceOf @ TypeApply(fun @ Select(qual, name), args @ List(arg)), List()) // !!! todo: simplify by having GenericArray also extract trees
if ((fun.symbol == Any_isInstanceOf || fun.symbol == Object_isInstanceOf) &&
unboundedGenericArrayLevel(arg.tpe) > 0) =>
val level = unboundedGenericArrayLevel(arg.tpe)
def isArrayTest(arg: Tree) =
gen.mkRuntimeCall("isArray", List(arg, Literal(Constant(level))))
typedPos(tree.pos) {
- if (level == 1) isArrayTest(fun)
+ if (level == 1) isArrayTest(qual)
else
- gen.evalOnce(fun, currentOwner, unit) { fun1 =>
+ gen.evalOnce(qual, currentOwner, unit) { qual1 =>
gen.mkAnd(
- treeCopy.TypeApply(tree, fun1(), args),
- isArrayTest(fun1()))
+ Apply(TypeApply(Select(qual1(), fun.symbol),
+ List(TypeTree(erasure(arg.tpe)))),
+ List()),
+ isArrayTest(qual1()))
}
- }
+ }
case TypeApply(fun, args) if (fun.symbol.owner != AnyClass &&
fun.symbol != Object_asInstanceOf &&
fun.symbol != Object_isInstanceOf) =>