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