From 2d12c1036668c0dbddd3276b73bb03b295a8e0a7 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Tue, 22 Dec 2009 17:11:54 +0000 Subject: Closes #2819, #2705, #2805. Review by community. --- src/compiler/scala/tools/nsc/symtab/Types.scala | 3 +++ src/compiler/scala/tools/nsc/typechecker/Namers.scala | 2 +- src/library/scala/package.scala | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/compiler/scala/tools/nsc/symtab/Types.scala b/src/compiler/scala/tools/nsc/symtab/Types.scala index c4772b6407..4ed827723e 100644 --- a/src/compiler/scala/tools/nsc/symtab/Types.scala +++ b/src/compiler/scala/tools/nsc/symtab/Types.scala @@ -4031,6 +4031,7 @@ A type's typeSymbol should never be inspected directly. /** Does type `tp1' conform to `tp2'? */ private def isSubType2(tp1: Type, tp2: Type, depth: Int): Boolean = { + if (tp1 eq tp2) return true if (isErrorOrWildcard(tp1)) return true if (isErrorOrWildcard(tp2)) return true if (tp1 eq NoType) return false @@ -4349,6 +4350,8 @@ A type's typeSymbol should never be inspected directly. } tvar.constr.inst = NoType // necessary because hibounds/lobounds may contain tvar + println("solving "+tvar+" "+up+" "+(if (up) (tvar.constr.hiBounds) else tvar.constr.loBounds)+((if (up) (tvar.constr.hiBounds) else tvar.constr.loBounds) map (_.widen))) + tvar setInst ( if (up) { if (depth != AnyDepth) glb(tvar.constr.hiBounds, depth) else glb(tvar.constr.hiBounds) diff --git a/src/compiler/scala/tools/nsc/typechecker/Namers.scala b/src/compiler/scala/tools/nsc/typechecker/Namers.scala index d5bd9c3c3f..40eb72aaeb 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Namers.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Namers.scala @@ -1164,7 +1164,7 @@ trait Namers { self: Analyzer => val expr1 = typer.typedQualifier(expr) val base = expr1.tpe typer.checkStable(expr1) - if (expr1.symbol.isRootPackage) context.error(tree.pos, "_root_ cannot be imported") + if ((expr1.symbol ne null) && expr1.symbol.isRootPackage) context.error(tree.pos, "_root_ cannot be imported") def checkNotRedundant(pos: Position, from: Name, to: Name): Boolean = { if (!tree.symbol.hasFlag(SYNTHETIC) && !((expr1.symbol ne null) && expr1.symbol.isInterpreterWrapper) && diff --git a/src/library/scala/package.scala b/src/library/scala/package.scala index 9fa09e3b72..bc5b5d36f2 100644 --- a/src/library/scala/package.scala +++ b/src/library/scala/package.scala @@ -64,6 +64,8 @@ package object scala { type Range = scala.collection.immutable.Range val Range = scala.collection.immutable.Range + type =>? [-A, +B] = PartialFunction[A, B] + // Migrated from Predef val $scope = scala.xml.TopScope -- cgit v1.2.3