summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2009-11-06 18:00:43 +0000
committerIulian Dragos <jaguarul@gmail.com>2009-11-06 18:00:43 +0000
commitd42f62bbd76df85ed57162118a8c720f50bbd5c5 (patch)
tree7f250f596a8dafbe3503bdd66e9f67bfa2c3f236 /src
parent1b807250a30c8526851e67271f0545c67362b365 (diff)
downloadscala-d42f62bbd76df85ed57162118a8c720f50bbd5c5.tar.gz
scala-d42f62bbd76df85ed57162118a8c720f50bbd5c5.tar.bz2
scala-d42f62bbd76df85ed57162118a8c720f50bbd5c5.zip
Fixed initial variable binding for method param...
Fixed initial variable binding for method parameters, that caused the inliner to infer wrong types for tail recursive methods
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
index 0dadd8980d..32a6037d41 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/analysis/TypeFlowAnalysis.scala
@@ -126,6 +126,12 @@ abstract class TypeFlowAnalysis {
in(b) = typeFlowLattice.bottom
out(b) = typeFlowLattice.bottom
}
+
+ // start block has var bindings for each of its parameters
+ val entryBindings = new VarBinding
+ m.params.foreach(p => entryBindings += ((p, p.kind)))
+ in(m.code.startBlock) = lattice.IState(entryBindings, typeStackLattice.bottom)
+
m.exh foreach { e =>
in(e.startBlock) = lattice.IState(in(e.startBlock).vars, typeStackLattice.exceptionHandlerStack)
}