summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-04-29 13:45:44 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-04-29 13:45:44 +0000
commita2c3cdf668951cf861dada3623afba85647ee6ad (patch)
tree04053328b88fdcb0998af08063f76d3ddf3a1285
parent35e881860944c1cbae98979c99c3e1a6778b39c9 (diff)
downloadscala-a2c3cdf668951cf861dada3623afba85647ee6ad.tar.gz
scala-a2c3cdf668951cf861dada3623afba85647ee6ad.tar.bz2
scala-a2c3cdf668951cf861dada3623afba85647ee6ad.zip
Fixed misaligning due to wide (double|long) par...
Fixed misaligning due to wide (double|long) parameters in the icode reader. Improved constant folding through local variables. Closes #3191, no review.
-rw-r--r--src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala6
-rw-r--r--src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala6
2 files changed, 4 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
index 7311978147..fedf0d4143 100644
--- a/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
+++ b/src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala
@@ -110,11 +110,7 @@ abstract class ClosureElimination extends SubComponent {
case LOAD_LOCAL(l) if (info.bindings.isDefinedAt(LocalVar(l))) =>
val t = info.getBinding(l)
t match {
- case Deref(LocalVar(v)) =>
- bb.replaceInstruction(i, valueToInstruction(t));
- log("replaced " + i + " with " + t)
-
- case Deref(This) =>
+ case Deref(LocalVar(_)) | Deref(This) | Const(_) =>
bb.replaceInstruction(i, valueToInstruction(t));
log("replaced " + i + " with " + t)
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala
index e129737ebd..23f45e0d13 100644
--- a/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala
+++ b/src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala
@@ -614,9 +614,9 @@ abstract class ICodeReader extends ClassfileParser {
// add parameters
var idx = if (method.isStatic) 0 else 1
- for (t <- method.symbol.tpe.paramTypes) {
- this.method.addParam(code.enterParam(idx, toTypeKind(t)))
- idx += 1
+ for (t <- method.symbol.tpe.paramTypes; val kind = toTypeKind(t)) {
+ this.method.addParam(code.enterParam(idx, kind))
+ idx += (if (kind.isWideType) 2 else 1)
}
pc = 0