blob: de4b302017059bee00848bafbc384c977b48a9d0 [file] [log] [blame]
// Copyright 2017 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
const Classes = [
Uint8Array,
Int8Array,
Uint16Array,
Int16Array,
Uint32Array,
Int32Array,
Uint8ClampedArray,
Float32Array,
Float64Array
];
const TypedArrayPrototype_toStringTag =
Object.getOwnPropertyDescriptor(
Object.getPrototypeOf(Uint8Array.prototype),
Symbol.toStringTag).get;
(function() {
function foo(o) {
return TypedArrayPrototype_toStringTag.call(o);
}
assertEquals(undefined, foo(1));
assertEquals(undefined, foo({}));
assertEquals(undefined, foo([]));
Classes.forEach(C => assertEquals(C.name, foo(new C(1))));
%OptimizeFunctionOnNextCall(foo);
assertEquals(undefined, foo(1));
assertEquals(undefined, foo({}));
assertEquals(undefined, foo([]));
Classes.forEach(C => assertEquals(C.name, foo(new C(1))));
})();
(function() {
const ReflectApply = Reflect.apply;
const uncurryThis = func => (thisArg, ...args) =>
ReflectApply(func, thisArg, args);
const TypedArrayProto_toStringTag =
uncurryThis(TypedArrayPrototype_toStringTag);
function isTypedArray(value) {
return TypedArrayProto_toStringTag(value) !== undefined;
}
assertFalse(isTypedArray(1));
assertFalse(isTypedArray({}));
assertFalse(isTypedArray([]));
assertFalse(isTypedArray('Lorem ipsum'));
Classes.forEach(C => assertTrue(isTypedArray(new C(1))));
%OptimizeFunctionOnNextCall(isTypedArray);
assertFalse(isTypedArray(1));
assertFalse(isTypedArray({}));
assertFalse(isTypedArray([]));
assertFalse(isTypedArray('Lorem ipsum'));
Classes.forEach(C => assertTrue(isTypedArray(new C(1))));
})();
(function() {
const ReflectApply = Reflect.apply;
const uncurryThis = func => (thisArg, ...args) =>
ReflectApply(func, thisArg, args);
const TypedArrayProto_toStringTag =
uncurryThis(TypedArrayPrototype_toStringTag);
function isUint8Array(value) {
return TypedArrayProto_toStringTag(value) === 'Uint8Array';
}
assertFalse(isUint8Array(1));
assertFalse(isUint8Array({}));
assertFalse(isUint8Array([]));
assertFalse(isUint8Array('Lorem ipsum'));
Classes.forEach(C => assertEquals(C === Uint8Array, isUint8Array(new C(1))));
%OptimizeFunctionOnNextCall(isUint8Array);
assertFalse(isUint8Array(1));
assertFalse(isUint8Array({}));
assertFalse(isUint8Array([]));
assertFalse(isUint8Array('Lorem ipsum'));
Classes.forEach(C => assertEquals(C === Uint8Array, isUint8Array(new C(1))));
})();