OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Flags: --allow-natives-syntax | 5 // Flags: --allow-natives-syntax |
6 | 6 |
7 "use strict"; | 7 "use strict"; |
8 | 8 |
9 | 9 |
10 function checkPrototypeChain(object, constructors) { | 10 function checkPrototypeChain(object, constructors) { |
11 var proto = object.__proto__; | 11 var proto = object.__proto__; |
12 for (var i = 0; i < constructors.length; i++) { | 12 for (var i = 0; i < constructors.length; i++) { |
13 assertEquals(constructors[i].prototype, proto); | 13 assertEquals(constructors[i].prototype, proto); |
14 assertEquals(constructors[i], proto.constructor); | 14 assertEquals(constructors[i], proto.constructor); |
15 proto = proto.__proto__; | 15 proto = proto.__proto__; |
16 } | 16 } |
17 } | 17 } |
18 | 18 |
19 | 19 |
20 (function() { | 20 (function() { |
| 21 class A extends Object { |
| 22 constructor(...args) { |
| 23 assertTrue(%IsConstructCall()); |
| 24 super(...args); |
| 25 this.a = 42; |
| 26 } |
| 27 } |
| 28 |
| 29 var s = new A("foo"); |
| 30 assertTrue(s instanceof Object); |
| 31 assertTrue(s instanceof A); |
| 32 assertEquals("object", typeof s); |
| 33 checkPrototypeChain(s, [A, Object]); |
| 34 assertEquals(42, s.a); |
| 35 |
| 36 var s1 = new A("bar"); |
| 37 assertTrue(%HaveSameMap(s, s1)); |
| 38 |
| 39 |
| 40 var n = new A(153); |
| 41 assertTrue(n instanceof Object); |
| 42 assertTrue(n instanceof A); |
| 43 assertEquals("object", typeof s); |
| 44 checkPrototypeChain(s, [A, Object]); |
| 45 assertEquals(42, n.a); |
| 46 |
| 47 var n1 = new A(312); |
| 48 assertTrue(%HaveSameMap(n, n1)); |
| 49 assertTrue(%HaveSameMap(n, s)); |
| 50 |
| 51 |
| 52 var b = new A(true); |
| 53 assertTrue(b instanceof Object); |
| 54 assertTrue(b instanceof A); |
| 55 assertEquals("object", typeof s); |
| 56 checkPrototypeChain(s, [A, Object]); |
| 57 assertEquals(42, b.a); |
| 58 |
| 59 var b1 = new A(true); |
| 60 assertTrue(%HaveSameMap(b, b1)); |
| 61 assertTrue(%HaveSameMap(b, s)); |
| 62 })(); |
| 63 |
| 64 |
| 65 (function() { |
21 class A extends Function { | 66 class A extends Function { |
22 constructor(...args) { | 67 constructor(...args) { |
23 assertTrue(%IsConstructCall()); | 68 assertTrue(%IsConstructCall()); |
24 super(...args); | 69 super(...args); |
25 this.a = 42; | 70 this.a = 42; |
26 } | 71 } |
27 } | 72 } |
28 | 73 |
29 var o = new A("this.foo = 153;"); | 74 var o = new A("this.foo = 153;"); |
30 assertTrue(o instanceof Object); | 75 assertTrue(o instanceof Object); |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 (function() { | 556 (function() { |
512 class A extends null {} | 557 class A extends null {} |
513 assertThrows("new A"); | 558 assertThrows("new A"); |
514 })(); | 559 })(); |
515 | 560 |
516 | 561 |
517 (function() { | 562 (function() { |
518 class A extends Symbol {} | 563 class A extends Symbol {} |
519 assertThrows("new A"); | 564 assertThrows("new A"); |
520 })(); | 565 })(); |
OLD | NEW |