f65a023fac
R=rossberg@chromium.org Review URL: https://codereview.chromium.org/789163002 Cr-Commit-Position: refs/heads/master@{#25748}
96 lines
2.5 KiB
JavaScript
96 lines
2.5 KiB
JavaScript
// Copyright 2014 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.
|
|
|
|
"use strict";
|
|
|
|
// This file relies on the fact that the following declaration has been made
|
|
// in runtime.js:
|
|
// var $Array = global.Array;
|
|
|
|
// -------------------------------------------------------------------
|
|
|
|
macro TYPED_ARRAYS(FUNCTION)
|
|
// arrayIds below should be synchronized with Runtime_TypedArrayInitialize.
|
|
FUNCTION(1, Uint8Array, 1)
|
|
FUNCTION(2, Int8Array, 1)
|
|
FUNCTION(3, Uint16Array, 2)
|
|
FUNCTION(4, Int16Array, 2)
|
|
FUNCTION(5, Uint32Array, 4)
|
|
FUNCTION(6, Int32Array, 4)
|
|
FUNCTION(7, Float32Array, 4)
|
|
FUNCTION(8, Float64Array, 8)
|
|
FUNCTION(9, Uint8ClampedArray, 1)
|
|
endmacro
|
|
|
|
|
|
macro TYPED_ARRAY_HARMONY_ADDITIONS(ARRAY_ID, NAME, ELEMENT_SIZE)
|
|
|
|
// ES6 draft 08-24-14, section 22.2.3.12
|
|
function NAMEForEach(f /* thisArg */) { // length == 1
|
|
if (!%IsTypedArray(this)) {
|
|
throw MakeTypeError('not_typed_array', []);
|
|
}
|
|
if (!IS_SPEC_FUNCTION(f)) {
|
|
throw MakeTypeError('called_non_callable', [ f ]);
|
|
}
|
|
|
|
var length = %_TypedArrayGetLength(this);
|
|
var receiver;
|
|
|
|
if (%_ArgumentsLength() > 1) {
|
|
receiver = %_Arguments(1);
|
|
}
|
|
|
|
var needs_wrapper = false;
|
|
if (IS_NULL_OR_UNDEFINED(receiver)) {
|
|
receiver = %GetDefaultReceiver(f) || receiver;
|
|
} else {
|
|
needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver);
|
|
}
|
|
|
|
var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f);
|
|
for (var i = 0; i < length; i++) {
|
|
var element = this[i];
|
|
// Prepare break slots for debugger step in.
|
|
if (stepping) %DebugPrepareStepInIfStepping(f);
|
|
var new_receiver = needs_wrapper ? ToObject(receiver) : receiver;
|
|
%_CallFunction(new_receiver, TO_OBJECT_INLINE(element), i, this, f);
|
|
}
|
|
}
|
|
|
|
// ES6 draft 08-24-14, section 22.2.2.2
|
|
function NAMEOf() { // length == 0
|
|
var length = %_ArgumentsLength();
|
|
var array = new this(length);
|
|
for (var i = 0; i < length; i++) {
|
|
array[i] = %_Arguments(i);
|
|
}
|
|
return array;
|
|
}
|
|
|
|
endmacro
|
|
|
|
TYPED_ARRAYS(TYPED_ARRAY_HARMONY_ADDITIONS)
|
|
|
|
|
|
function HarmonyTypedArrayExtendPrototypes() {
|
|
macro EXTEND_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE)
|
|
%CheckIsBootstrapping();
|
|
|
|
// Set up non-enumerable functions on the object.
|
|
InstallFunctions(global.NAME, DONT_ENUM | DONT_DELETE | READ_ONLY, $Array(
|
|
"of", NAMEOf
|
|
));
|
|
|
|
// Set up non-enumerable functions on the prototype object.
|
|
InstallFunctions(global.NAME.prototype, DONT_ENUM, $Array(
|
|
"forEach", NAMEForEach
|
|
));
|
|
endmacro
|
|
|
|
TYPED_ARRAYS(EXTEND_TYPED_ARRAY)
|
|
}
|
|
|
|
HarmonyTypedArrayExtendPrototypes();
|