• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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