/
githubmirror
/
node
Обзор
Документация
Войти
/
githubmirror
/
node
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
deps/v8/test/mjsunit/compiler/instanceof3.js
247 строк
5 KB
Ujjwal Sharma
deps: update V8 to 7.4.288.13
28 мар 2019, 23:36
28 мар 2019, 23:36
f579e11
Код
Авторство
О чём код?
// Copyright 2018 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 // Without instance creation: (function() { function* Goo() {}; const goo = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertFalse(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = {}; Goo.prototype = Object.prototype; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertTrue(IsGoo(goo)); assertTrue(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertTrue(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = {}; Goo.prototype = 42 function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); assertThrows(_ => IsGoo(goo), TypeError); %OptimizeFunctionOnNextCall(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); })(); (function() { function* Goo() {}; const goo = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertFalse(IsGoo(goo)); Goo.prototype = Object.prototype; assertTrue(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertFalse(IsGoo(goo)); Goo.prototype = 42; assertThrows(_ => IsGoo(goo), TypeError); })(); // With instance creation: (function() { function* Goo() {}; const goo = Goo(); function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertTrue(IsGoo(goo)); assertTrue(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertTrue(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = Goo(); Goo.prototype = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertFalse(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = Goo(); Goo.prototype = 42; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); assertThrows(_ => IsGoo(goo), TypeError); %OptimizeFunctionOnNextCall(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); })(); (function() { function* Goo() {}; const goo = Goo(); function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertTrue(IsGoo(goo)); assertTrue(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertTrue(IsGoo(goo)); Goo.prototype = {}; assertFalse(IsGoo(goo)); })(); (function() { function* Goo() {}; const goo = Goo(); function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertTrue(IsGoo(goo)); assertTrue(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertTrue(IsGoo(goo)); Goo.prototype = 42 assertThrows(_ => IsGoo(goo), TypeError); })(); (function() { function* Goo() {}; Goo.prototype = 42; const goo = Goo(); function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); assertThrows(_ => IsGoo(goo), TypeError); %OptimizeFunctionOnNextCall(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); Goo.prototype = {}; assertFalse(IsGoo(goo)); })(); (function() { function* Goo() {}; Goo.prototype = 42; const goo = Goo(); Goo.prototype = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); assertFalse(IsGoo(goo)); Goo.prototype = Object.prototype; assertTrue(IsGoo(goo)); })(); (function() { function* Goo() {}; Goo.prototype = {}; const goo = Goo(); Goo.prototype = 42; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); assertThrows(_ => IsGoo(goo), TypeError); %OptimizeFunctionOnNextCall(IsGoo); assertThrows(_ => IsGoo(goo), TypeError); Goo.prototype = Object.prototype; assertTrue(IsGoo(goo)); })(); (function() { function* Goo() {}; Goo.prototype = {}; const goo = Goo(); Goo.prototype = {}; function IsGoo(x) { return x instanceof Goo; } %PrepareFunctionForOptimization(IsGoo); assertFalse(IsGoo(goo)); assertFalse(IsGoo(goo)); %OptimizeFunctionOnNextCall(IsGoo); Goo.prototype = Object.prototype; assertTrue(IsGoo(goo)); })();