aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Inferencing.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2014-02-21 18:38:48 +0100
committerMartin Odersky <odersky@gmail.com>2014-02-21 18:42:50 +0100
commit8d294b9b42dfcdfaee1722095d76a1c80ed9b6d5 (patch)
tree311fa8d7d19b4d738d8156d276eeb19aa198599d /src/dotty/tools/dotc/typer/Inferencing.scala
parent0a0cb0ca1dcf8f615d3a3e79fac8dc9a62bb1397 (diff)
downloaddotty-8d294b9b42dfcdfaee1722095d76a1c80ed9b6d5.tar.gz
dotty-8d294b9b42dfcdfaee1722095d76a1c80ed9b6d5.tar.bz2
dotty-8d294b9b42dfcdfaee1722095d76a1c80ed9b6d5.zip
Performance improvement: Cache uninstatiated typevars in constraints
Pro: Much faster to iterate through uninstantiated type variables Con: Constraints can no longer be value classes. Still this seems to give a net win of ~2%.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Inferencing.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Inferencing.scala7
1 files changed, 2 insertions, 5 deletions
diff --git a/src/dotty/tools/dotc/typer/Inferencing.scala b/src/dotty/tools/dotc/typer/Inferencing.scala
index cd30f8ff6..a8003f8c2 100644
--- a/src/dotty/tools/dotc/typer/Inferencing.scala
+++ b/src/dotty/tools/dotc/typer/Inferencing.scala
@@ -606,9 +606,7 @@ object Inferencing {
val constraint = ctx.typerState.constraint
constr.println(s"interpolate undet vars in ${tp.show}, pos = ${tree.pos}, mode = ${ctx.mode}, undets = ${constraint.uninstVars map (tvar => s"${tvar.show}@${tvar.owningTree.pos}")}")
- constr.println(s"qualifying undet vars: ${constraint.uninstVars filter qualifies map (tvar => s"$tvar / ${tvar.show}")}")
- constr.println(s"fulltype: $tp") // !!! DEBUG
- constr.println(s"constraint: ${constraint.show}")
+ constr.println(s"qualifying undet vars: ${constraint.uninstVars filter qualifies map (tvar => s"$tvar / ${tvar.show}")}, constraint: ${constraint.show}")
def qualifies(tvar: TypeVar) = tree contains tvar.owningTree
val vs = tp.variances(tvar => (constraint contains tvar) && qualifies(tvar))
@@ -623,12 +621,11 @@ object Inferencing {
if (changed) // instantiations might have uncovered new typevars to interpolate
interpolateUndetVars(tree)
else
- constraint.foreachUninstVar { tvar =>
+ for (tvar <- constraint.uninstVars)
if (!(vs contains tvar) && qualifies(tvar)) {
typr.println(s"instantiating non-occurring ${tvar.show} in ${tp.show}")
tvar.instantiate(fromBelow = true)
}
- }
}
/** Instantiate undetermined type variables to that type `tp` is