diff options
author | Martin Odersky <odersky@gmail.com> | 2014-02-04 11:39:32 +0100 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2014-02-06 16:02:42 +0100 |
commit | 380c34d70b86466b896fa3d9a3c42109e4df8b56 (patch) | |
tree | 6e25d9505d849daba1433705e7bd501aa963cfc0 /src | |
parent | 09a87aad0449af38e2efeafb8c3770fb7d61a437 (diff) | |
download | dotty-380c34d70b86466b896fa3d9a3c42109e4df8b56.tar.gz dotty-380c34d70b86466b896fa3d9a3c42109e4df8b56.tar.bz2 dotty-380c34d70b86466b896fa3d9a3c42109e4df8b56.zip |
Fix bug for reading type arguments in ClassfileParser
Diffstat (limited to 'src')
-rw-r--r-- | src/dotty/tools/dotc/Main.scala | 3 | ||||
-rw-r--r-- | src/dotty/tools/dotc/config/Config.scala | 2 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/TypeComparer.scala | 9 | ||||
-rw-r--r-- | src/dotty/tools/dotc/core/pickling/ClassfileParser.scala | 4 | ||||
-rw-r--r-- | src/dotty/tools/dotc/typer/Implicits.scala | 5 |
5 files changed, 13 insertions, 10 deletions
diff --git a/src/dotty/tools/dotc/Main.scala b/src/dotty/tools/dotc/Main.scala index 8da5acf60..955304dda 100644 --- a/src/dotty/tools/dotc/Main.scala +++ b/src/dotty/tools/dotc/Main.scala @@ -10,10 +10,7 @@ import reporting.Reporter /* To do: * - simplify hk types - * - review isSubType - * - have a second look at normalization (leave at method types if pt is method type?) * - Don't open package objects from class files if they are present in source - * - check why we cannot access java.util.LinkedHashMap as a map * - Revise the way classes are inherited - when not followed by [...] or (...), * assume the unparameterized type and forward type parameters as we do now for the synthetic head class. */ diff --git a/src/dotty/tools/dotc/config/Config.scala b/src/dotty/tools/dotc/config/Config.scala index 6ac25ab74..9ed40cd89 100644 --- a/src/dotty/tools/dotc/config/Config.scala +++ b/src/dotty/tools/dotc/config/Config.scala @@ -12,6 +12,8 @@ object Config { final val checkConstraintsNonCyclic = true + final val flagInstantiationToNothing = false + /** Throw an exception if a deep subtype recursion is detected */ final val flagDeepSubTypeRecursions = true diff --git a/src/dotty/tools/dotc/core/TypeComparer.scala b/src/dotty/tools/dotc/core/TypeComparer.scala index 46caf3116..572dc1a36 100644 --- a/src/dotty/tools/dotc/core/TypeComparer.scala +++ b/src/dotty/tools/dotc/core/TypeComparer.scala @@ -354,8 +354,11 @@ class TypeComparer(initctx: Context) extends DotClass { addConstraint(tp1, tp2, fromBelow = false) && { if ((!frozenConstraint) && (tp2 isRef defn.NothingClass) && - ctx.typerState.isGlobalCommittable) - ctx.log(s"!!! instantiated to Nothing: $tp1, constraint = ${constraint.show}") + ctx.typerState.isGlobalCommittable) { + def msg = s"!!! instantiated to Nothing: $tp1, constraint = ${constraint.show}" + if (Config.flagInstantiationToNothing) assert(false, msg) + else ctx.log(msg) + } true } else (ctx.mode is Mode.TypevarsMissContext) || thirdTry(tp1, tp2) @@ -437,7 +440,7 @@ class TypeComparer(initctx: Context) extends DotClass { ancestor2.exists && isSubType(tp1, ancestor2) } case _ => - def hasMatchingMember(name: Name): Boolean = /*>|>*/ traceIndented(s"hasMatchingMember($name) ${tp1.member(name)}") /*<|<*/ ( + def hasMatchingMember(name: Name): Boolean = /*>|>*/ ctx.traceIndented(s"hasMatchingMember($name) ${tp1.member(name)}", subtyping) /*<|<*/ ( tp1.member(name).hasAltWith(alt => isSubType(alt.info, tp2.refinedInfo)) || { // special case for situations like: diff --git a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala index f87d91597..5edddc396 100644 --- a/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala +++ b/src/dotty/tools/dotc/core/pickling/ClassfileParser.scala @@ -268,9 +268,9 @@ class ClassfileParser( else TypeBounds.lower(tp) case '*' => TypeBounds.empty } - tp1 = RefinedType(tp, formals.head.name, bounds) + tp1 = RefinedType(tp1, formals.head.name, bounds) case _ => - tp1 = RefinedType(tp, formals.head.name, TypeAlias(sig2type(tparams, skiptvs))) + tp1 = RefinedType(tp1, formals.head.name, TypeAlias(sig2type(tparams, skiptvs))) } formals = formals.tail } diff --git a/src/dotty/tools/dotc/typer/Implicits.scala b/src/dotty/tools/dotc/typer/Implicits.scala index b15b73fca..f40b63bba 100644 --- a/src/dotty/tools/dotc/typer/Implicits.scala +++ b/src/dotty/tools/dotc/typer/Implicits.scala @@ -626,8 +626,9 @@ class SearchHistory(val searchDepth: Int, val seen: Map[ClassSymbol, Int]) { /** A set of term references where equality is =:= */ class TermRefSet(implicit ctx: Context) extends mutable.Traversable[TermRef] { - private val elems = new mutable.LinkedHashMap[TermSymbol, List[Type]] // todo: change to j.u.LinkedHashMap? - + import collection.JavaConverters._ + private val elems = (new java.util.LinkedHashMap[TermSymbol, List[Type]]).asScala + def += (ref: TermRef): Unit = { val pre = ref.prefix val sym = ref.symbol.asTerm |