diff options
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/instanceof2.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/instanceof2.js | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/instanceof2.js b/deps/v8/test/mjsunit/compiler/instanceof2.js new file mode 100644 index 0000000000..ca006e3046 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/instanceof2.js @@ -0,0 +1,233 @@ +// 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; + } + + 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; + } + + 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; + } + + 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; + } + + 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; + } + + 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 = new Goo(); + + function IsGoo(x) { + return x instanceof Goo; + } + + assertTrue(IsGoo(goo)); + assertTrue(IsGoo(goo)); + %OptimizeFunctionOnNextCall(IsGoo); + assertTrue(IsGoo(goo)); +})(); + +(function() { + function Goo() {}; + const goo = new Goo(); + Goo.prototype = {}; + + function IsGoo(x) { + return x instanceof Goo; + } + + assertFalse(IsGoo(goo)); + assertFalse(IsGoo(goo)); + %OptimizeFunctionOnNextCall(IsGoo); + assertFalse(IsGoo(goo)); +})(); + +(function() { + function Goo() {}; + const goo = new Goo(); + Goo.prototype = 42; + + function IsGoo(x) { + return x instanceof Goo; + } + + assertThrows(_ => IsGoo(goo), TypeError); + assertThrows(_ => IsGoo(goo), TypeError); + %OptimizeFunctionOnNextCall(IsGoo); + assertThrows(_ => IsGoo(goo), TypeError); +})(); + +(function() { + function Goo() {}; + const goo = new Goo(); + + function IsGoo(x) { + return x instanceof Goo; + } + + assertTrue(IsGoo(goo)); + assertTrue(IsGoo(goo)); + %OptimizeFunctionOnNextCall(IsGoo); + assertTrue(IsGoo(goo)); + Goo.prototype = {}; + assertFalse(IsGoo(goo)); +})(); + +(function() { + function Goo() {}; + const goo = new Goo(); + + function IsGoo(x) { + return x instanceof Goo; + } + + 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 = new Goo(); + + function IsGoo(x) { + return x instanceof Goo; + } + + 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 = new Goo(); + Goo.prototype = {}; + + function IsGoo(x) { + return x instanceof Goo; + } + + 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 = new Goo(); + Goo.prototype = 42; + + function IsGoo(x) { + return x instanceof Goo; + } + + 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 = new Goo(); + Goo.prototype = {}; + + function IsGoo(x) { + return x instanceof Goo; + } + + assertFalse(IsGoo(goo)); + assertFalse(IsGoo(goo)); + %OptimizeFunctionOnNextCall(IsGoo); + Goo.prototype = Object.prototype; + assertTrue(IsGoo(goo)); +})(); |