aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-02-04 11:39:32 +0100
committerMartin Odersky <odersky@gmail.com>2014-02-06 16:02:42 +0100
commit380c34d70b86466b896fa3d9a3c42109e4df8b56 (patch)
tree6e25d9505d849daba1433705e7bd501aa963cfc0 /src
parent09a87aad0449af38e2efeafb8c3770fb7d61a437 (diff)
downloaddotty-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.scala3
-rw-r--r--src/dotty/tools/dotc/config/Config.scala2
-rw-r--r--src/dotty/tools/dotc/core/TypeComparer.scala9
-rw-r--r--src/dotty/tools/dotc/core/pickling/ClassfileParser.scala4
-rw-r--r--src/dotty/tools/dotc/typer/Implicits.scala5
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