text: // 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.
  //
  // Flags: --allow-natives-syntax
  'use strict';
  
  (function TestMaps() {
    class Base {}
    class Derived extends Base {}
  
    let d1 = new Derived();
    let d2 = new Derived();
  
    assertTrue(%HaveSameMap(d1, d2));
  }());
  
  
  (function TestProtoModificationArray() {
    let called = 0;
    function F() {
      called++;
      assertFalse(Array.isArray(this));
    }
    class Derived extends Array {}
    assertSame(Derived.__proto__, Array);
  
    let d1 = new Derived();
    assertTrue(Array.isArray(d1));
  
    Derived.__proto__ = F;
    called = 0;
    let d2 = new Derived();
    assertSame(1, called);
    assertFalse(Array.isArray(d2));
  
    assertFalse(%HaveSameMap(d1, d2));
  }());
  
  
  (function TestProtoModification() {
    let called = 0;
    function F() {
      called++;
      let exn = null;
      try {
        this.byteLength;
      } catch (e) {
        exn = e;
      }
      assertTrue(exn instanceof TypeError);
    }
    class Derived extends Uint8Array {
      constructor() { super(10); }
    }
    assertSame(Derived.__proto__, Uint8Array);
  
    let d1 = new Derived();
    assertSame(10, d1.byteLength);
  
    Derived.__proto__ = F;
    called = 0;
    let d2 = new Derived();
    assertSame(1, called);
    assertThrows(function() { d2.byteLength; }, TypeError);
  
    assertFalse(%HaveSameMap(d1, d2));
  }());
  