Skip to content

Commit 99936df

Browse files
committed
Rework try catch logic
1 parent 0fbdf27 commit 99936df

File tree

1 file changed

+15
-22
lines changed

1 file changed

+15
-22
lines changed

polymod/hscript/_internal/PolymodInterpEx.hx

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -373,33 +373,26 @@ 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(old);
377+
inTry = oldTry;
378+
declared.push({ n : n, old : locals.get(n) });
379+
locals.set(n, { r : switch (err) {
380+
case EScriptThrow(errValue): errValue;
381+
default: error;
382+
}});
383+
var v : Dynamic = expr(ecatch);
384+
restore(old);
385+
return v;
386+
} catch (error : Dynamic) {
387+
var en = Type.getEnum(error);
388+
if (en != null && Type.getEnumName(en) == "hscript._Interp.Stop") {
393389
inTry = oldTry;
394-
throw err;
390+
throw error;
395391
}
396-
397-
// restore vars
398392
restore(old);
399393
inTry = oldTry;
400-
// declare 'v'
401394
declared.push({ n : n, old : locals.get(n) });
402-
locals.set(n,{ r : err });
395+
locals.set(n, { r : error });
403396
var v : Dynamic = expr(ecatch);
404397
restore(old);
405398
return v;

0 commit comments

Comments
 (0)