| // 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); | |
| })(); |