v8/test/mjsunit/debug-exceptions.js
neis 8f1f1cb1c7 Move catch prediction into frontend and make it aware of rethrows.
This solves an issue with throws inside for-of always being marked as caught.

BUG=v8:5183

Review-Url: https://codereview.chromium.org/2146493002
Cr-Commit-Position: refs/heads/master@{#37686}
2016-07-12 15:23:35 +00:00

71 lines
1.1 KiB
JavaScript

// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Flags: --expose-debug-as debug
Debug = debug.Debug
let error = false;
let uncaught;
function listener(event, exec_state, event_data, data) {
if (event != Debug.DebugEvent.Exception) return;
try {
uncaught = event_data.uncaught();
} catch (e) {
error = true;
}
}
Debug.setBreakOnException();
Debug.setListener(listener);
function assertCaught(f) {
try {f()} finally {
assertFalse(uncaught);
return;
}
}
function assertUncaught(f) {
try {f()} finally {
assertTrue(uncaught);
return;
}
}
assertUncaught(() => {
for (var a of [1, 2, 3]) {
throw a
}
});
assertUncaught(() => {
for (var a of [1, 2, 3]) {
try {throw a} finally {}
}
});
assertCaught(() => {
for (var a of [1, 2, 3]) {
try {
try {throw a} finally {}
} catch(_) {}
}
});
assertCaught(() => {
try {
for (var a of [1, 2, 3]) {
try {throw a} finally {}
}
} catch(_) {}
});
assertFalse(error);