// Copyright 2014 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.
'use strict';

var SuperBenchmark = new BenchmarkSuite('Super', [100], [
     new Benchmark('SuperMethodCall', false, false, 0, SuperMethodCall),
     new Benchmark('SuperGetterCall', false, false, 0, SuperGetterCall),
     new Benchmark('SuperSetterCall', false, false, 0, SuperSetterCall),
]);


class Base {
  constructor() {}
  get x() {
    return this._x++;
  }
  set x(v) {
    this._x += v;
    return this._x;
  }
  f() {
    return this._x++;
  }
}


class Derived extends Base {
  constructor() {
    super();
    this._x = 1;
  }
  SuperCall() {
    return super.f();
  }
  GetterCall() {
    return super.x;
  }
  SetterCall() {
    return super.x = 5;
  }
}


var derived = new Derived();

function SuperMethodCall() {
  return derived.SuperCall();
}

function SuperGetterCall() {
  return derived.GetterCall();
}

function SuperSetterCall() {
  return derived.SetterCall();
}