1// Copyright 2014 the V8 project authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4// 5// Flags: --allow-natives-syntax 6'use strict'; 7 8(function TestMaps() { 9 class Base {} 10 class Derived extends Base {} 11 12 let d1 = new Derived(); 13 let d2 = new Derived(); 14 15 assertTrue(%HaveSameMap(d1, d2)); 16}()); 17 18 19(function TestProtoModificationArray() { 20 let called = 0; 21 function F() { 22 called++; 23 assertFalse(Array.isArray(this)); 24 } 25 class Derived extends Array {} 26 assertSame(Derived.__proto__, Array); 27 28 let d1 = new Derived(); 29 assertTrue(Array.isArray(d1)); 30 31 Derived.__proto__ = F; 32 called = 0; 33 let d2 = new Derived(); 34 assertSame(1, called); 35 assertFalse(Array.isArray(d2)); 36 37 assertFalse(%HaveSameMap(d1, d2)); 38}()); 39 40 41(function TestProtoModification() { 42 let called = 0; 43 function F() { 44 called++; 45 let exn = null; 46 try { 47 this.byteLength; 48 } catch (e) { 49 exn = e; 50 } 51 assertTrue(exn instanceof TypeError); 52 } 53 class Derived extends Uint8Array { 54 constructor() { super(10); } 55 } 56 assertSame(Derived.__proto__, Uint8Array); 57 58 let d1 = new Derived(); 59 assertSame(10, d1.byteLength); 60 61 Derived.__proto__ = F; 62 called = 0; 63 let d2 = new Derived(); 64 assertSame(1, called); 65 assertThrows(function() { d2.byteLength; }, TypeError); 66 67 assertFalse(%HaveSameMap(d1, d2)); 68}()); 69