prevent hiding the stack when we have no way to catch errors in script

This commit is contained in:
Nicolas Cannasse
2015-04-29 10:37:42 +02:00
parent 98204de89f
commit 0a9f147ab7
+19 -10
View File
@@ -44,6 +44,7 @@ class Interp {
#end
var depth : Int;
var inTry : Bool;
var declared : Array<{ n : String, old : { r : Dynamic } }>;
#if hscriptPos
@@ -382,17 +383,20 @@ class Interp {
for( i in 0...params.length )
me.locals.set(params[i].name,{ r : args[i] });
var r = null;
try {
if( inTry )
try {
r = me.exprReturn(fexpr);
} catch( e : Dynamic ) {
me.locals = old;
me.depth = depth;
#if neko
neko.Lib.rethrow(e);
#else
throw e;
#end
}
else
r = me.exprReturn(fexpr);
} catch( e : Dynamic ) {
me.locals = old;
me.depth = depth;
#if neko
neko.Lib.rethrow(e);
#else
throw e;
#end
}
me.locals = old;
me.depth = depth;
return r;
@@ -427,15 +431,20 @@ class Interp {
throw expr(e);
case ETry(e,n,_,ecatch):
var old = declared.length;
var oldTry = inTry;
try {
inTry = true;
var v : Dynamic = expr(e);
restore(old);
inTry = oldTry;
return v;
} catch( err : Stop ) {
inTry = oldTry;
throw err;
} catch( err : Dynamic ) {
// restore vars
restore(old);
inTry = oldTry;
// declare 'v'
declared.push({ n : n, old : locals.get(n) });
locals.set(n,{ r : err });