| // Copyright 2015 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: --strong-mode --allow-natives-syntax |
| |
| (function() { |
| "use strict"; |
| |
| let foo = null; |
| |
| function nullLiteral() { |
| class Class1 extends null { |
| constructor() { |
| super(); |
| } |
| } |
| } |
| |
| function nullVariable() { |
| class Class2 extends foo { |
| constructor() { |
| super(); |
| } |
| } |
| } |
| |
| function nullLiteralClassExpr() { |
| (class extends null {}); |
| } |
| |
| function nullVariableClassExpr() { |
| (class extends foo {}); |
| } |
| |
| assertDoesNotThrow(nullLiteral); |
| %OptimizeFunctionOnNextCall(nullLiteral); |
| assertDoesNotThrow(nullLiteral); |
| |
| assertDoesNotThrow(nullVariable); |
| %OptimizeFunctionOnNextCall(nullVariable); |
| assertDoesNotThrow(nullVariable); |
| |
| assertDoesNotThrow(nullLiteralClassExpr); |
| %OptimizeFunctionOnNextCall(nullLiteralClassExpr); |
| assertDoesNotThrow(nullLiteralClassExpr); |
| |
| assertDoesNotThrow(nullVariableClassExpr); |
| %OptimizeFunctionOnNextCall(nullVariableClassExpr); |
| assertDoesNotThrow(nullVariableClassExpr); |
| })(); |
| |
| (function() { |
| "use strong"; |
| |
| let foo = null; |
| |
| function nullLiteral() { |
| class Class1 extends null { |
| constructor() { |
| super(); |
| } |
| } |
| } |
| |
| function nullVariable() { |
| class Class2 extends foo { |
| constructor() { |
| super(); |
| } |
| } |
| } |
| |
| function nullLiteralClassExpr() { |
| (class extends null {}); |
| } |
| |
| function nullVariableClassExpr() { |
| (class extends foo {}); |
| } |
| |
| assertThrows(nullLiteral, TypeError); |
| %OptimizeFunctionOnNextCall(nullLiteral); |
| assertThrows(nullLiteral, TypeError); |
| |
| assertThrows(nullVariable, TypeError); |
| %OptimizeFunctionOnNextCall(nullVariable); |
| assertThrows(nullVariable, TypeError); |
| |
| assertThrows(nullLiteralClassExpr, TypeError); |
| %OptimizeFunctionOnNextCall(nullLiteralClassExpr); |
| assertThrows(nullLiteralClassExpr, TypeError); |
| |
| assertThrows(nullVariableClassExpr, TypeError); |
| %OptimizeFunctionOnNextCall(nullVariableClassExpr); |
| assertThrows(nullVariableClassExpr, TypeError); |
| })(); |