blob: 3ed7b36dbb4912765e97b74a615edbdf13efb599 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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
3// found in the LICENSE file.
4
5// Flags: --strong-mode --allow-natives-syntax
6
7(function() {
8"use strict";
9
10let foo = null;
11
12function nullLiteral() {
13 class Class1 extends null {
14 constructor() {
15 super();
16 }
17 }
18}
19
20function nullVariable() {
21 class Class2 extends foo {
22 constructor() {
23 super();
24 }
25 }
26}
27
28function nullLiteralClassExpr() {
29 (class extends null {});
30}
31
32function nullVariableClassExpr() {
33 (class extends foo {});
34}
35
36assertDoesNotThrow(nullLiteral);
37%OptimizeFunctionOnNextCall(nullLiteral);
38assertDoesNotThrow(nullLiteral);
39
40assertDoesNotThrow(nullVariable);
41%OptimizeFunctionOnNextCall(nullVariable);
42assertDoesNotThrow(nullVariable);
43
44assertDoesNotThrow(nullLiteralClassExpr);
45%OptimizeFunctionOnNextCall(nullLiteralClassExpr);
46assertDoesNotThrow(nullLiteralClassExpr);
47
48assertDoesNotThrow(nullVariableClassExpr);
49%OptimizeFunctionOnNextCall(nullVariableClassExpr);
50assertDoesNotThrow(nullVariableClassExpr);
51})();
52
53(function() {
54"use strong";
55
56let foo = null;
57
58function nullLiteral() {
59 class Class1 extends null {
60 constructor() {
61 super();
62 }
63 }
64}
65
66function nullVariable() {
67 class Class2 extends foo {
68 constructor() {
69 super();
70 }
71 }
72}
73
74function nullLiteralClassExpr() {
75 (class extends null {});
76}
77
78function nullVariableClassExpr() {
79 (class extends foo {});
80}
81
82assertThrows(nullLiteral, TypeError);
83%OptimizeFunctionOnNextCall(nullLiteral);
84assertThrows(nullLiteral, TypeError);
85
86assertThrows(nullVariable, TypeError);
87%OptimizeFunctionOnNextCall(nullVariable);
88assertThrows(nullVariable, TypeError);
89
90assertThrows(nullLiteralClassExpr, TypeError);
91%OptimizeFunctionOnNextCall(nullLiteralClassExpr);
92assertThrows(nullLiteralClassExpr, TypeError);
93
94assertThrows(nullVariableClassExpr, TypeError);
95%OptimizeFunctionOnNextCall(nullVariableClassExpr);
96assertThrows(nullVariableClassExpr, TypeError);
97})();