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


new BenchmarkSuite('BaselineES2017', [1000], [
  new Benchmark('Basic', false, false, 0, Basic, Setup),
]);

function _asyncToGenerator(fn) {
  return function () {
    var gen = fn.apply(this, arguments);
    return new Promise(function (resolve, reject) {
      function step(key, arg) {
        try {
          var info = gen[key](arg);
          var value = info.value;
        } catch (error) {
          reject(error);
          return;
        }
        if (info.done) {
          resolve(value);
        } else {
          return Promise.resolve(value)
              .then(function (value) {
                step("next", value);
              }, function (err) {
                step("throw", err);
              });
        }
      }
      return step("next");
    });
  };
}

var a, b, c, d, e, f, g, h, i, j, x;

function Setup() {
  x = Promise.resolve();

  j = (() => {
    var _ref = _asyncToGenerator(function* () {
      return x;
    });

    function j() {
      return _ref.apply(this, arguments);
    }

    return j;
  })();
  i = (() => {
    var _ref2 = _asyncToGenerator(function* () {
      yield j();
      yield j();
      yield j();
      yield j();
      yield j();
      yield j();
      yield j();
      yield j();
      yield j();
      return j();
    });

    function i() {
      return _ref2.apply(this, arguments);
    }

    return i;
  })();
  h = (() => {
    var _ref3 = _asyncToGenerator(function* () {
      return i();
    });

    function h() {
      return _ref3.apply(this, arguments);
    }

    return h;
  })();
  g = (() => {
    var _ref4 = _asyncToGenerator(function* () {
      return h();
    });

    function g() {
      return _ref4.apply(this, arguments);
    }

    return g;
  })();
  f = (() => {
    var _ref5 = _asyncToGenerator(function* () {
      return g();
    });

    function f() {
      return _ref5.apply(this, arguments);
    }

    return f;
  })();
  e = (() => {
    var _ref6 = _asyncToGenerator(function* () {
      return f();
    });

    function e() {
      return _ref6.apply(this, arguments);
    }

    return e;
  })();
  d = (() => {
    var _ref7 = _asyncToGenerator(function* () {
      return e();
    });

    function d() {
      return _ref7.apply(this, arguments);
    }

    return d;
  })();
  c = (() => {
    var _ref8 = _asyncToGenerator(function* () {
      return d();
    });

    function c() {
      return _ref8.apply(this, arguments);
    }

    return c;
  })();
  b = (() => {
    var _ref9 = _asyncToGenerator(function* () {
      return c();
    });

    function b() {
      return _ref9.apply(this, arguments);
    }

    return b;
  })();
  a = (() => {
    var _ref10 = _asyncToGenerator(function* () {
      return b();
    });

    function a() {
      return _ref10.apply(this, arguments);
    }

    return a;
  })();

  %RunMicrotasks();
}

function Basic() {
  a();
  %RunMicrotasks();
}