From a2c3cdf668951cf861dada3623afba85647ee6ad Mon Sep 17 00:00:00 2001 From: Iulian Dragos Date: Thu, 29 Apr 2010 13:45:44 +0000 Subject: 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. --- src/compiler/scala/tools/nsc/backend/opt/ClosureElimination.scala | 6 +----- src/compiler/scala/tools/nsc/symtab/classfile/ICodeReader.scala | 6 +++--- 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 -- cgit v1.2.3