blob: e519676aa60f7a885c896d41d332bf3734dc7853 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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}());