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