|  | // 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)); | 
|  | }()); |