summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2009-12-22 17:11:54 +0000
committerMartin Odersky <odersky@gmail.com>2009-12-22 17:11:54 +0000
commit2d12c1036668c0dbddd3276b73bb03b295a8e0a7 (patch)
tree44b2722afa656bd8ab17ac748cc95497326b8dda
parentef2cb0f658cff897432d9a635b80b93580e95d56 (diff)
downloadscala-2d12c1036668c0dbddd3276b73bb03b295a8e0a7.tar.gz
scala-2d12c1036668c0dbddd3276b73bb03b295a8e0a7.tar.bz2
scala-2d12c1036668c0dbddd3276b73bb03b295a8e0a7.zip
Closes #2819, #2705, #2805. Review by community.
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Types.scala3
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Namers.scala2
-rw-r--r--src/library/scala/package.scala2
3 files changed, 6 insertions, 1 deletions
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