summaryrefslogtreecommitdiff
path: root/src/msil
diff options
context:
space:
mode:
authorLukas Rytz <lukas.rytz@epfl.ch>2009-12-01 08:28:07 +0000
committerLukas Rytz <lukas.rytz@epfl.ch>2009-12-01 08:28:07 +0000
commit0f17201b1005b85a8bbfd6be668fd9ffcc782375 (patch)
treef887faae4290d56e1868f81885b2c239d1ffdd54 /src/msil
parent43c13143331d00ea78369ce41caa29e46752a69d (diff)
downloadscala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.tar.gz
scala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.tar.bz2
scala-0f17201b1005b85a8bbfd6be668fd9ffcc782375.zip
fix msil code generation for exception handlers.
Diffstat (limited to 'src/msil')
-rw-r--r--src/msil/ch/epfl/lamp/compiler/msil/emit/ILGenerator.scala8
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