// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*member: main:[null]*/
main() {
  unconditionalThrow();
  conditionalThrow();
  conditionalThrowReturn();
  unconditionalRethrow();
}

////////////////////////////////////////////////////////////////////////////////
/// Method that throws unconditionally.
////////////////////////////////////////////////////////////////////////////////

/*member: unconditionalThrow:[empty]*/
unconditionalThrow() => throw 'foo';

////////////////////////////////////////////////////////////////////////////////
/// Method that throws conditionally.
////////////////////////////////////////////////////////////////////////////////

/*member: _conditionalThrow:[null]*/
_conditionalThrow(/*[exact=JSBool]*/ o) {
  if (o) throw 'foo';
}

/*member: conditionalThrow:[null]*/
conditionalThrow() {
  _conditionalThrow(true);
  _conditionalThrow(false);
}

////////////////////////////////////////////////////////////////////////////////
/// Method that throws conditionally and return 0.
////////////////////////////////////////////////////////////////////////////////

/*member: _conditionalThrowReturn:[exact=JSUInt31]*/
_conditionalThrowReturn(/*[exact=JSBool]*/ o) {
  if (o) throw 'foo';
  return 0;
}

/*member: conditionalThrowReturn:[null]*/
conditionalThrowReturn() {
  _conditionalThrowReturn(true);
  _conditionalThrowReturn(false);
}

////////////////////////////////////////////////////////////////////////////////
/// Method that rethrows unconditionally.
////////////////////////////////////////////////////////////////////////////////

/*member: unconditionalRethrow:[null]*/
unconditionalRethrow() {
  try {
    throw 'foo';
  } catch (e) {
    rethrow;
  }
}
