/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
deps/v8/test/mjsunit/compiler/reflect-construct.js
139 строк
4 KB
Ujjwal Sharma
deps: update V8 to 7.4.288.13
28 мар 2019, 23:36
28 мар 2019, 23:36
f579e11
Код
Авторство
О чём код?
// Copyright 2017 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: --allow-natives-syntax // Test Reflect.construct with wrong number of arguments. (function() { "use strict"; function A() {} function foo() { return Reflect.construct(A); } %PrepareFunctionForOptimization(foo); assertThrows(foo); assertThrows(foo); %OptimizeFunctionOnNextCall(foo); assertThrows(foo); })(); (function() { "use strict"; function A(x) { this.x = x; } function foo() { return Reflect.construct(A, arguments); } %PrepareFunctionForOptimization(foo); assertInstanceof(foo(), A); assertInstanceof(foo(), A); assertEquals(1, foo(1).x); %OptimizeFunctionOnNextCall(foo); assertInstanceof(foo(), A); assertEquals(1, foo(1).x); })(); (function() { "use strict"; function A(x) { this.x = x; } function foo() { return Reflect.construct(A, arguments, A, A); } %PrepareFunctionForOptimization(foo); assertInstanceof(foo(), A); assertInstanceof(foo(), A); assertEquals(1, foo(1).x); %OptimizeFunctionOnNextCall(foo); assertInstanceof(foo(), A); assertEquals(1, foo(1).x); })(); // Test Reflect.construct within try/catch. (function() { "use strict"; function foo(bar) { try { return Reflect.construct(bar, arguments, bar); } catch (e) { return 1; } } %PrepareFunctionForOptimization(foo); assertEquals(1, foo()); assertEquals(1, foo()); %OptimizeFunctionOnNextCall(foo); assertEquals(1, foo()); })(); (function() { "use strict"; function foo(bar) { try { return Reflect.construct(bar, bar, bar); } catch (e) { return 1; } } %PrepareFunctionForOptimization(foo); assertEquals(1, foo()); assertEquals(1, foo()); %OptimizeFunctionOnNextCall(foo); assertEquals(1, foo()); })(); // Test proper order of constructor check(s) and array-like iteration. (function() { var dummy_length_counter = 0; var dummy = { get length() { ++dummy_length_counter; return 0; } }; function foo() { return Reflect.construct(undefined, dummy, undefined); } %PrepareFunctionForOptimization(foo); assertThrows(foo, TypeError); assertThrows(foo, TypeError); %OptimizeFunctionOnNextCall(foo); assertThrows(foo, TypeError); assertEquals(0, dummy_length_counter); })(); (function() { var dummy_length_counter = 0; var dummy = { get length() { ++dummy_length_counter; return 0; } }; function foo() { return Reflect.construct(undefined, dummy); } %PrepareFunctionForOptimization(foo); assertThrows(foo, TypeError); assertThrows(foo, TypeError); %OptimizeFunctionOnNextCall(foo); assertThrows(foo, TypeError); assertEquals(0, dummy_length_counter); })(); (function() { var dummy_length_counter = 0; var dummy = { get length() { ++dummy_length_counter; return 0; } }; function foo() { return Reflect.construct(null, dummy, null); } %PrepareFunctionForOptimization(foo); assertThrows(foo, TypeError); assertThrows(foo, TypeError); %OptimizeFunctionOnNextCall(foo); assertThrows(foo, TypeError); assertEquals(0, dummy_length_counter); })();(function() { var dummy_length_counter = 0; var dummy = { get length() { ++dummy_length_counter; return 0; } }; function foo() { return Reflect.construct(null, dummy); } %PrepareFunctionForOptimization(foo); assertThrows(foo, TypeError); assertThrows(foo, TypeError); %OptimizeFunctionOnNextCall(foo); assertThrows(foo, TypeError); assertEquals(0, dummy_length_counter); })();