106 lines
1.4 KiB
JavaScript
Executable File
106 lines
1.4 KiB
JavaScript
Executable File
|
|
function targetOne( x ) {
|
|
return x;
|
|
}
|
|
|
|
function targetTwo( x ) {
|
|
throw x;
|
|
}
|
|
|
|
function tryCatch( x, targetOne, targetTwo ) {
|
|
try {
|
|
if (x.one < 7)
|
|
targetOne( x );
|
|
else
|
|
targetTwo( x );
|
|
} catch (e) {
|
|
e.two();
|
|
}
|
|
}
|
|
|
|
function tryFinally( x, targetOne, targetTwo ) {
|
|
try {
|
|
if (x.one < 7)
|
|
return targetOne( x );
|
|
else
|
|
targetTwo( x );
|
|
} finally {
|
|
x.two();
|
|
}
|
|
x.three();
|
|
}
|
|
|
|
function tryFinallyLoop( x, targetTwo ) {
|
|
while (x.one < 7) {
|
|
try {
|
|
if (x.one < 3)
|
|
break;
|
|
else
|
|
targetTwo( x );
|
|
} finally {
|
|
x.two();
|
|
}
|
|
}
|
|
}
|
|
|
|
function tryCatchFinally( x, targetOne, targetTwo ) {
|
|
try {
|
|
if (x.one < 7)
|
|
targetOne( x );
|
|
else
|
|
targetTwo( x );
|
|
} catch (e) {
|
|
e.two();
|
|
} finally {
|
|
x.three();
|
|
}
|
|
}
|
|
|
|
function tryCatchTwice( x, targetOne, targetTwo ) {
|
|
|
|
try {
|
|
if (x.one < 7)
|
|
targetOne( x );
|
|
else
|
|
targetTwo( x );
|
|
} catch (e) {
|
|
e.two();
|
|
}
|
|
|
|
try {
|
|
if (x.one < 7)
|
|
targetOne( x );
|
|
else
|
|
targetTwo( x );
|
|
} catch (e) {
|
|
e.three();
|
|
}
|
|
|
|
return e;
|
|
}
|
|
|
|
o = {
|
|
one: -12,
|
|
|
|
two: function two () {
|
|
return this;
|
|
},
|
|
|
|
three: function three () {
|
|
return 8;
|
|
}
|
|
};
|
|
|
|
tryCatch(o, targetOne, targetTwo);
|
|
tryFinally(o, targetOne, targetTwo);
|
|
tryFinallyLoop(o, targetTwo);
|
|
tryCatchFinally(o, targetOne, targetTwo);
|
|
(function testRet() {
|
|
var e = tryCatchTwice(o, targetOne, targetTwo);
|
|
e.two();
|
|
e.three();
|
|
})();
|
|
|
|
|
|
|