diff options
author | Michaël Zasso <targos@protonmail.com> | 2019-03-12 09:01:49 +0100 |
---|---|---|
committer | Michaël Zasso <targos@protonmail.com> | 2019-03-14 18:49:21 +0100 |
commit | 7b48713334469818661fe276cf571de9c7899f2d (patch) | |
tree | 4dbda49ac88db76ce09dc330a0cb587e68e139ba /deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js | |
parent | 8549ac09b256666cf5275224ec58fab9939ff32e (diff) | |
download | node-new-7b48713334469818661fe276cf571de9c7899f2d.tar.gz |
deps: update V8 to 7.3.492.25
PR-URL: https://github.com/nodejs/node/pull/25852
Reviewed-By: Ujjwal Sharma <usharma1998@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ali Ijaz Sheikh <ofrobots@google.com>
Diffstat (limited to 'deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js')
-rw-r--r-- | deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js b/deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js new file mode 100644 index 0000000000..49c8899e69 --- /dev/null +++ b/deps/v8/test/mjsunit/compiler/instance-of-overridden-has-instance.js @@ -0,0 +1,106 @@ +// 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 + +(function NonConstHasInstance() { + var C = { + [Symbol.hasInstance] : () => true + }; + + function f() { + return {} instanceof C; + } + + assertTrue(f()); + assertTrue(f()); + %OptimizeFunctionOnNextCall(f); + assertTrue(f()); + C[Symbol.hasInstance] = () => false; + assertFalse(f()); +})(); + +(function NumberHasInstance() { + var C = { + [Symbol.hasInstance] : 0.1 + }; + + function f(b, C) { + if (b) return {} instanceof C; + return false; + } + + function g(b) { + return f(b, C); + } + + assertFalse(f(true, Number)); + assertFalse(f(true, Number)); + assertFalse(g(false)); + assertFalse(g(false)); + %OptimizeFunctionOnNextCall(g); + assertThrows(() => g(true)); +})(); + +(function NonFunctionHasInstance() { + var C = { + [Symbol.hasInstance] : {} + }; + + function f(b, C) { + if (b) return {} instanceof C; + return false; + } + + function g(b) { + return f(b, C); + } + + assertFalse(f(true, Number)); + assertFalse(f(true, Number)); + assertFalse(g(false)); + assertFalse(g(false)); + %OptimizeFunctionOnNextCall(g); + assertThrows(() => g(true)); +})(); + +(function NonConstHasInstanceProto() { + var B = { + [Symbol.hasInstance]() { return true; } + }; + + var C = { __proto__ : B }; + + function f() { + return {} instanceof C; + } + + assertTrue(f()); + assertTrue(f()); + %OptimizeFunctionOnNextCall(f); + assertTrue(f()); + B[Symbol.hasInstance] = () => { return false; }; + assertFalse(f()); +})(); + +(function HasInstanceOverwriteOnProto() { + var A = { + [Symbol.hasInstance] : () => false + } + + var B = { __proto__ : A }; + + var C = { __proto__ : B }; + + function f() { + return {} instanceof C; + } + + assertFalse(f()); + assertFalse(f()); + %OptimizeFunctionOnNextCall(f); + assertFalse(f()); + B[Symbol.hasInstance] = () => { return true; }; + assertTrue(f()); +})(); |