Browse Source

bug testcase for ENDFIN assertion

pull/2/head
Sami Vaarala 11 years ago
parent
commit
f93c74480c
  1. 111
      ecmascript-testcases/test-bug-try-catch-return.js

111
ecmascript-testcases/test-bug-try-catch-return.js

@ -0,0 +1,111 @@
/*===
test1a
try
finally
123
test1b
try
catch
finally
undefined
test2a
try
finally
undefined
test2b
try
catch
finally
234
test3a
try
finally
345
test3b
try
finally
345
===*/
/* The ENDFIN opcode had an incorrect assertion that the TCF catcher's
* CATCH flag had to be cleared when ENDFIN was executed. This is not
* the case if the try block does not throw an error.
*
* Fixed in Duktape 0.10.0.
*/
function test1a() {
try {
print('try');
return 123;
} catch (e) {
print('catch');
} finally {
print('finally');
}
}
function test1b() {
try {
print('try');
throw new Error('error');
} catch (e) {
print('catch');
} finally {
print('finally');
}
}
function test2a() {
try {
print('try');
} catch (e) {
print('catch');
return 234;
} finally {
print('finally');
}
}
function test2b() {
try {
print('try');
throw new Error('error');
} catch (e) {
print('catch');
return 234;
} finally {
print('finally');
}
}
function test3a() {
try {
print('try');
} catch (e) {
print('catch');
} finally {
print('finally');
return 345;
}
}
function test3b() {
try {
print('try');
} catch (e) {
print('catch');
} finally {
print('finally');
return 345;
}
}
[ 'test1a', 'test1b', 'test2a', 'test2b', 'test3a', 'test3b' ].forEach(function (name) {
print(name);
try {
print(this[name]());
} catch (e) {
print(e);
}
});
Loading…
Cancel
Save