| // 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), |
| ]); |
| |
| |
| function Base() { } |
| Base.prototype = { |
| constructor: Base, |
| get x() { |
| return this._x++; |
| }, |
| set x(v) { |
| this._x += v; |
| return this._x; |
| } |
| } |
| |
| Base.prototype.f = function() { |
| return this._x++; |
| }.toMethod(Base.prototype); |
| |
| function Derived() { |
| this._x = 1; |
| } |
| Derived.prototype = Object.create(Base.prototype); |
| Object.setPrototypeOf(Derived, Base); |
| |
| Derived.prototype.SuperCall = function() { |
| return super.f(); |
| }.toMethod(Derived.prototype); |
| |
| Derived.prototype.GetterCall = function() { |
| return super.x; |
| }.toMethod(Derived.prototype); |
| |
| Derived.prototype.SetterCall = function() { |
| return super.x = 5; |
| }.toMethod(Derived.prototype); |
| |
| var derived = new Derived(); |
| |
| function SuperMethodCall() { |
| return derived.SuperCall(); |
| } |
| |
| function SuperGetterCall() { |
| return derived.GetterCall(); |
| } |
| |
| function SuperSetterCall() { |
| return derived.SetterCall(); |
| } |