Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Unified Diff: src/harmony-sharedtypedarray.js

Issue 1069883002: WIP SharedArrayBuffer implementation (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: merge master Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/harmony-sharedarraybuffer.js ('k') | src/heap/objects-visiting.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/harmony-sharedtypedarray.js
diff --git a/src/typedarray.js b/src/harmony-sharedtypedarray.js
similarity index 59%
copy from src/typedarray.js
copy to src/harmony-sharedtypedarray.js
index baf8edb99128af2a1b7a26f07107d91fd8f59daf..284d507f73b5648e0d405af74959d22ac7e7c40e 100644
--- a/src/typedarray.js
+++ b/src/harmony-sharedtypedarray.js
@@ -1,4 +1,4 @@
-// Copyright 2013 the V8 project authors. All rights reserved.
+// Copyright 2015 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.
@@ -9,36 +9,36 @@
%CheckIsBootstrapping();
var GlobalArray = global.Array;
-var GlobalArrayBuffer = global.ArrayBuffer;
+var GlobalSharedArrayBuffer = global.SharedArrayBuffer;
var GlobalDataView = global.DataView;
var GlobalObject = global.Object;
-macro TYPED_ARRAYS(FUNCTION)
+macro SHARED_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)
+FUNCTION(1, SharedUint8Array, 1)
+FUNCTION(2, SharedInt8Array, 1)
+FUNCTION(3, SharedUint16Array, 2)
+FUNCTION(4, SharedInt16Array, 2)
+FUNCTION(5, SharedUint32Array, 4)
+FUNCTION(6, SharedInt32Array, 4)
+FUNCTION(7, SharedFloat32Array, 4)
+FUNCTION(8, SharedFloat64Array, 8)
+FUNCTION(9, SharedUint8ClampedArray, 1)
endmacro
macro DECLARE_GLOBALS(INDEX, NAME, SIZE)
var GlobalNAME = global.NAME;
endmacro
-TYPED_ARRAYS(DECLARE_GLOBALS)
+SHARED_TYPED_ARRAYS(DECLARE_GLOBALS)
-// --------------- Typed Arrays ---------------------
+// --------------- Shared Typed Arrays ---------------------
-macro TYPED_ARRAY_CONSTRUCTOR(ARRAY_ID, NAME, ELEMENT_SIZE)
+macro SHARED_TYPED_ARRAY_CONSTRUCTOR(ARRAY_ID, NAME, ELEMENT_SIZE)
function NAMEConstructByArrayBuffer(obj, buffer, byteOffset, length) {
if (!IS_UNDEFINED(byteOffset)) {
byteOffset =
- $toPositiveInteger(byteOffset, kInvalidTypedArrayLength);
+ $toPositiveInteger(byteOffset, kInvalidTypedArrayLength);
}
if (!IS_UNDEFINED(length)) {
length = $toPositiveInteger(length, kInvalidTypedArrayLength);
@@ -52,8 +52,8 @@ function NAMEConstructByArrayBuffer(obj, buffer, byteOffset, length) {
offset = byteOffset;
if (offset % ELEMENT_SIZE !== 0) {
- throw MakeRangeError(kInvalidTypedArrayAlignment,
- "start offset", "NAME", ELEMENT_SIZE);
+ throw MakeRangeError(kInvalidTypedArrayAlignment, "start offset", "NAME",
+ ELEMENT_SIZE);
}
if (offset > bufferByteLength) {
throw MakeRangeError(kInvalidTypedArrayOffset);
@@ -64,8 +64,8 @@ function NAMEConstructByArrayBuffer(obj, buffer, byteOffset, length) {
var newLength;
if (IS_UNDEFINED(length)) {
if (bufferByteLength % ELEMENT_SIZE !== 0) {
- throw MakeRangeError(kInvalidTypedArrayAlignment,
- "byte length", "NAME", ELEMENT_SIZE);
+ throw MakeRangeError(kInvalidTypedArrayAlignment, "byte length", "NAME",
+ ELEMENT_SIZE);
}
newByteLength = bufferByteLength - offset;
newLength = newByteLength / ELEMENT_SIZE;
@@ -87,39 +87,19 @@ function NAMEConstructByLength(obj, length) {
throw MakeRangeError(kInvalidTypedArrayLength);
}
var byteLength = l * ELEMENT_SIZE;
- if (byteLength > %_TypedArrayMaxSizeInHeap()) {
- var buffer = new GlobalArrayBuffer(byteLength);
- %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength);
- } else {
- %_TypedArrayInitialize(obj, ARRAY_ID, null, 0, byteLength);
- }
-}
-
-function NAMEConstructByArrayLike(obj, arrayLike) {
- var length = arrayLike.length;
- var l = $toPositiveInteger(length, kInvalidTypedArrayLength);
-
- if (l > %_MaxSmi()) {
- throw MakeRangeError(kInvalidTypedArrayLength);
- }
- if(!%TypedArrayInitializeFromArrayLike(obj, ARRAY_ID, arrayLike, l)) {
- for (var i = 0; i < l; i++) {
- // It is crucial that we let any execptions from arrayLike[i]
- // propagate outside the function.
- obj[i] = arrayLike[i];
- }
- }
+ var buffer = new GlobalSharedArrayBuffer(byteLength);
+ %_TypedArrayInitialize(obj, ARRAY_ID, buffer, 0, byteLength);
}
function NAMEConstructor(arg1, arg2, arg3) {
if (%_IsConstructCall()) {
- if (IS_ARRAYBUFFER(arg1)) {
+ if (IS_SHAREDARRAYBUFFER(arg1)) {
NAMEConstructByArrayBuffer(this, arg1, arg2, arg3);
} else if (IS_NUMBER(arg1) || IS_STRING(arg1) ||
IS_BOOLEAN(arg1) || IS_UNDEFINED(arg1)) {
NAMEConstructByLength(this, arg1);
} else {
- NAMEConstructByArrayLike(this, arg1);
+ throw MakeTypeError(kInvalidArgument);
}
} else {
throw MakeTypeError(kConstructorNotFunction, "NAME")
@@ -182,13 +162,12 @@ function NAMESubArray(begin, end) {
var newLength = endInt - beginInt;
var beginByteOffset =
%_ArrayBufferViewGetByteOffset(this) + beginInt * ELEMENT_SIZE;
- return new GlobalNAME(%TypedArrayGetBuffer(this),
- beginByteOffset, newLength);
+ return new GlobalNAME(%TypedArrayGetBuffer(this), beginByteOffset,
+ newLength);
}
endmacro
-TYPED_ARRAYS(TYPED_ARRAY_CONSTRUCTOR)
-
+SHARED_TYPED_ARRAYS(SHARED_TYPED_ARRAY_CONSTRUCTOR)
function TypedArraySetFromArrayLike(target, source, sourceLength, offset) {
if (offset > 0) {
@@ -301,7 +280,8 @@ function TypedArrayGetToStringTag() {
// -------------------------------------------------------------------
-macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE)
+
+macro SETUP_SHARED_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE)
%SetCode(GlobalNAME, NAMEConstructor);
%FunctionSetPrototype(GlobalNAME, new GlobalObject());
@@ -327,134 +307,6 @@ macro SETUP_TYPED_ARRAY(ARRAY_ID, NAME, ELEMENT_SIZE)
]);
endmacro
-TYPED_ARRAYS(SETUP_TYPED_ARRAY)
-
-// --------------------------- DataView -----------------------------
-
-function DataViewConstructor(buffer, byteOffset, byteLength) { // length = 3
- if (%_IsConstructCall()) {
- if (!IS_ARRAYBUFFER(buffer)) throw MakeTypeError(kDataViewNotArrayBuffer);
- if (!IS_UNDEFINED(byteOffset)) {
- byteOffset = $toPositiveInteger(byteOffset, kInvalidDataViewOffset);
- }
- if (!IS_UNDEFINED(byteLength)) {
- byteLength = TO_INTEGER(byteLength);
- }
-
- var bufferByteLength = %_ArrayBufferGetByteLength(buffer);
-
- var offset = IS_UNDEFINED(byteOffset) ? 0 : byteOffset;
- if (offset > bufferByteLength) throw MakeRangeError(kInvalidDataViewOffset);
-
- var length = IS_UNDEFINED(byteLength)
- ? bufferByteLength - offset
- : byteLength;
- if (length < 0 || offset + length > bufferByteLength) {
- throw new MakeRangeError(kInvalidDataViewLength);
- }
- %_DataViewInitialize(this, buffer, offset, length);
- } else {
- throw MakeTypeError(kConstructorNotFunction, "DataView");
- }
-}
-
-function DataViewGetBufferJS() {
- if (!IS_DATAVIEW(this)) {
- throw MakeTypeError(kIncompatibleMethodReceiver, 'DataView.buffer', this);
- }
- return %DataViewGetBuffer(this);
-}
-
-function DataViewGetByteOffset() {
- if (!IS_DATAVIEW(this)) {
- throw MakeTypeError(kIncompatibleMethodReceiver,
- 'DataView.byteOffset', this);
- }
- return %_ArrayBufferViewGetByteOffset(this);
-}
-
-function DataViewGetByteLength() {
- if (!IS_DATAVIEW(this)) {
- throw MakeTypeError(kIncompatibleMethodReceiver,
- 'DataView.byteLength', this);
- }
- return %_ArrayBufferViewGetByteLength(this);
-}
-
-macro DATA_VIEW_TYPES(FUNCTION)
- FUNCTION(Int8)
- FUNCTION(Uint8)
- FUNCTION(Int16)
- FUNCTION(Uint16)
- FUNCTION(Int32)
- FUNCTION(Uint32)
- FUNCTION(Float32)
- FUNCTION(Float64)
-endmacro
-
-
-macro DATA_VIEW_GETTER_SETTER(TYPENAME)
-function DataViewGetTYPENAMEJS(offset, little_endian) {
- if (!IS_DATAVIEW(this)) {
- throw MakeTypeError(kIncompatibleMethodReceiver,
- 'DataView.getTYPENAME', this);
- }
- if (%_ArgumentsLength() < 1) throw MakeTypeError(kInvalidArgument);
- offset = $toPositiveInteger(offset, kInvalidDataViewAccessorOffset);
- return %DataViewGetTYPENAME(this, offset, !!little_endian);
-}
-
-function DataViewSetTYPENAMEJS(offset, value, little_endian) {
- if (!IS_DATAVIEW(this)) {
- throw MakeTypeError(kIncompatibleMethodReceiver,
- 'DataView.setTYPENAME', this);
- }
- if (%_ArgumentsLength() < 2) throw MakeTypeError(kInvalidArgument);
- offset = $toPositiveInteger(offset, kInvalidDataViewAccessorOffset);
- %DataViewSetTYPENAME(this, offset, TO_NUMBER_INLINE(value), !!little_endian);
-}
-endmacro
-
-DATA_VIEW_TYPES(DATA_VIEW_GETTER_SETTER)
-
-// Setup the DataView constructor.
-%SetCode(GlobalDataView, DataViewConstructor);
-%FunctionSetPrototype(GlobalDataView, new GlobalObject);
-
-// Set up constructor property on the DataView prototype.
-%AddNamedProperty(GlobalDataView.prototype, "constructor", GlobalDataView,
- DONT_ENUM);
-%AddNamedProperty(GlobalDataView.prototype, symbolToStringTag, "DataView",
- READ_ONLY|DONT_ENUM);
-
-$installGetter(GlobalDataView.prototype, "buffer", DataViewGetBufferJS);
-$installGetter(GlobalDataView.prototype, "byteOffset", DataViewGetByteOffset);
-$installGetter(GlobalDataView.prototype, "byteLength", DataViewGetByteLength);
-
-$installFunctions(GlobalDataView.prototype, DONT_ENUM, [
- "getInt8", DataViewGetInt8JS,
- "setInt8", DataViewSetInt8JS,
-
- "getUint8", DataViewGetUint8JS,
- "setUint8", DataViewSetUint8JS,
-
- "getInt16", DataViewGetInt16JS,
- "setInt16", DataViewSetInt16JS,
-
- "getUint16", DataViewGetUint16JS,
- "setUint16", DataViewSetUint16JS,
-
- "getInt32", DataViewGetInt32JS,
- "setInt32", DataViewSetInt32JS,
-
- "getUint32", DataViewGetUint32JS,
- "setUint32", DataViewSetUint32JS,
-
- "getFloat32", DataViewGetFloat32JS,
- "setFloat32", DataViewSetFloat32JS,
-
- "getFloat64", DataViewGetFloat64JS,
- "setFloat64", DataViewSetFloat64JS
-]);
+SHARED_TYPED_ARRAYS(SETUP_SHARED_TYPED_ARRAY)
})
« no previous file with comments | « src/harmony-sharedarraybuffer.js ('k') | src/heap/objects-visiting.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698