// Copyright (c) 2015, 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.

/// Declarations for variable arguments support
/// (rest params and spread operator).
///
/// These are currently *not* supported by dart2js or Dartium.
library js.varargs;

class _Rest {
  const _Rest();
}

/// Annotation to tag ES6 rest parameters (https://goo.gl/r0bJ1K).
///
/// This is *not* supported by dart2js or Dartium (yet).
///
/// This is meant to be used by the Dart Dev Compiler
/// when compiling helper functions of its runtime to ES6.
///
/// The following function:
///
///     foo(a, b, @rest others) { ... }
///
/// Will be compiled to ES6 code like the following:
///
///     function foo(a, b, ...others) { ... }
///
/// Which is roughly equivalent to the following ES5 code:
///
///     function foo(a, b/*, ...others*/) {
///       var others = [].splice.call(arguments, 2);
///       ...
///     }
///
const _Rest rest = const _Rest();

/// Intrinsic function that maps to the ES6 spread operator
/// (https://goo.gl/NedHKr).
///
/// This is *not* supported by dart2js or Dartium (yet),
/// and *cannot* be called at runtime.
///
/// This is meant to be used by the Dart Dev Compiler when
/// compiling its runtime to ES6.
///
/// The following expression:
///
///     foo(a, b, spread(others))
///
/// Will be compiled to ES6 code like the following:
///
///     foo(a, b, ...others)
///
/// Which is roughly equivalent to the following ES5 code:
///
///     foo.apply(null, [a, b].concat(others))
///
dynamic spread(args) {
  throw new StateError('The spread function cannot be called, '
      'it should be compiled away.');
}
