Skip to content

Commit 0915db7

Browse files
committed
Rework try catch logic
1 parent 0fbdf27 commit 0915db7

File tree

1 file changed

+17
-20
lines changed

1 file changed

+17
-20
lines changed

polymod/hscript/_internal/PolymodInterpEx.hx

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -373,33 +373,30 @@ class PolymodInterpEx extends Interp
373373
#else
374374
var err = error;
375375
#end
376-
switch (err) {
377-
case EScriptThrow(errValue):
378-
// restore vars
379-
restore(old);
380-
inTry = oldTry;
381-
// declare 'v'
382-
declared.push({ n : n, old : locals.get(n) });
383-
locals.set(n,{ r : errValue });
384-
var v : Dynamic = expr(ecatch);
385-
restore(old);
386-
return v;
387-
default:
388-
throw err;
389-
}
390-
} catch( err : Dynamic ) {
391-
// I can't handle this error the normal way because Stop is private GRAAAAA
392-
if (Type.getEnumName(err) == "hscript.Interp.Stop") {
376+
// restore vars
377+
restore(old);
378+
inTry = oldTry;
379+
// declare 'v'
380+
declared.push({ n : n, old : locals.get(n) });
381+
locals.set(n, { r : switch (err) {
382+
case EScriptThrow(errValue): errValue;
383+
default: error;
384+
}});
385+
var v : Dynamic = expr(ecatch);
386+
restore(old);
387+
return v;
388+
} catch (error : Dynamic) {
389+
var en = Type.getEnum(error);
390+
if (en != null && en.getName() == "hscript._Interp.Stop") {
393391
inTry = oldTry;
394-
throw err;
392+
throw error;
395393
}
396-
397394
// restore vars
398395
restore(old);
399396
inTry = oldTry;
400397
// declare 'v'
401398
declared.push({ n : n, old : locals.get(n) });
402-
locals.set(n,{ r : err });
399+
locals.set(n, { r : error });
403400
var v : Dynamic = expr(ecatch);
404401
restore(old);
405402
return v;

0 commit comments

Comments
 (0)