summaryrefslogtreecommitdiff
path: root/deps/v8/test/mjsunit/compiler/instanceof2.js
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/instanceof2.js')
-rw-r--r--deps/v8/test/mjsunit/compiler/instanceof2.js233
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));
+})();