| // 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 --opt |
| |
| // Test that ObjectIsArrayBufferView lowering works correctly |
| // in EffectControlLinearizer in the case that the input is |
| // known to be a HeapObject by TurboFan. For this we use the |
| // simple trick with an object literal whose field `x` will |
| // only ever contain HeapObjects and so the representation |
| // tracking is going to pick it up. |
| (function() { |
| function foo(x) { |
| return ArrayBuffer.isView({x}.x); |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertFalse(foo(Symbol())); |
| assertFalse(foo("some string")); |
| assertFalse(foo(new Object())); |
| assertFalse(foo(new Array())); |
| assertFalse(foo(new ArrayBuffer(1))); |
| assertTrue(foo(new Int32Array(1))); |
| assertTrue(foo(new DataView(new ArrayBuffer(1)))); |
| %OptimizeFunctionOnNextCall(foo); |
| assertFalse(foo(Symbol())); |
| assertFalse(foo("some string")); |
| assertFalse(foo(new Object())); |
| assertFalse(foo(new Array())); |
| assertFalse(foo(new ArrayBuffer(1))); |
| assertTrue(foo(new Int32Array(1))); |
| assertTrue(foo(new DataView(new ArrayBuffer(1)))); |
| assertOptimized(foo); |
| })(); |
| |
| // Test that ObjectIsArrayBufferView lowering works correctly |
| // in EffectControlLinearizer in the case that the input is |
| // some arbitrary tagged value. |
| (function() { |
| function foo(x) { |
| return ArrayBuffer.isView(x); |
| } |
| |
| %PrepareFunctionForOptimization(foo); |
| assertFalse(foo(1)); |
| assertFalse(foo(1.1)); |
| assertFalse(foo(Symbol())); |
| assertFalse(foo("some string")); |
| assertFalse(foo(new Object())); |
| assertFalse(foo(new Array())); |
| assertFalse(foo(new ArrayBuffer(1))); |
| assertTrue(foo(new Int32Array(1))); |
| assertTrue(foo(new DataView(new ArrayBuffer(1)))); |
| %OptimizeFunctionOnNextCall(foo); |
| assertFalse(foo(1)); |
| assertFalse(foo(1.1)); |
| assertFalse(foo(Symbol())); |
| assertFalse(foo("some string")); |
| assertFalse(foo(new Object())); |
| assertFalse(foo(new Array())); |
| assertFalse(foo(new ArrayBuffer(1))); |
| assertTrue(foo(new Int32Array(1))); |
| assertTrue(foo(new DataView(new ArrayBuffer(1)))); |
| assertOptimized(foo); |
| })(); |