diff options
author | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-12-01 08:28:07 +0000 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@epfl.ch> | 2009-12-01 08:28:07 +0000 |
commit | 0f17201b1005b85a8bbfd6be668fd9ffcc782375 (patch) | |
tree | f887faae4290d56e1868f81885b2c239d1ffdd54 /src/msil/ch | |
parent | 43c13143331d00ea78369ce41caa29e46752a69d (diff) | |
download | scala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.tar.gz scala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.tar.bz2 scala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.zip |
fix msil code generation for exception handlers.
Diffstat (limited to 'src/msil/ch')
-rw-r--r-- | src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala b/src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala index bf8eade0cd..ea93d6c606 100644 --- a/src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala +++ b/src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala @@ -381,7 +381,9 @@ import ILGenerator._ * (MSIL) instruction stream. */ def BeginFinallyBlock() { - Emit(OpCodes.Leave, excStack.peekLabel()) + val endExc: Label = excStack.popLabel() + Emit(OpCodes.Leave, endExc) + excStack.push(Label.Finally, endExc) emitSpecialLabel(Label.Finally) } @@ -482,9 +484,7 @@ import ILGenerator._ // compute new lastLabel (next label) val stackSize: Int = lastLabel.getStacksize() + overridePOPUSH if (stackSize < 0) { - throw new RuntimeException - //System.err.println - ("ILGenerator.emit(): Stack underflow in method: " + owner) + throw new RuntimeException("ILGenerator.emit(): Stack underflow in method: " + owner) } if (stackSize > maxstack) maxstack = stackSize |