// Copyright 2017 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.

let state = 'initial';
try {
  throw new Error('caught');
  state = 'unreachable';
} catch { // Note the lack of a binding
  assertEquals(state, 'initial');
  state = 'caught';
}
assertEquals(state, 'caught');


let sigil1 = {};
try {
  throw sigil1;
} catch (e) {
  assertEquals(e, sigil1);
}


let sigil2 = {};
let reached = false;
try {
  try {
    throw sigil1;
  } catch {
    reached = true;
  } finally {
    throw sigil2;
  }
} catch (e) {
  assertEquals(e, sigil2);
}
assertTrue(reached);
