mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-21 01:05:45 +00:00
Backed out changeset f16586fdc3fd (bug 1232966) for arm bustage
This commit is contained in:
parent
2b0c24a4d2
commit
12b13f74df
@ -1667,73 +1667,3 @@ function ArrayBufferSpecies() {
|
||||
return this;
|
||||
}
|
||||
_SetCanonicalName(ArrayBufferSpecies, "get [Symbol.species]");
|
||||
|
||||
// Shared memory and atomics proposal 6.2.1.5.3 (30 Oct 2016)
|
||||
// http://tc39.github.io/ecmascript_sharedmem/shmem.html
|
||||
function SharedArrayBufferSlice(start, end) {
|
||||
// Step 1.
|
||||
var O = this;
|
||||
|
||||
// Steps 2-4,
|
||||
// This function is not generic.
|
||||
if (!IsObject(O) || !IsSharedArrayBuffer(O)) {
|
||||
return callFunction(CallSharedArrayBufferMethodIfWrapped, O, start, end,
|
||||
"SharedArrayBufferSlice");
|
||||
}
|
||||
|
||||
// Step 5.
|
||||
var len = SharedArrayBufferByteLength(O);
|
||||
|
||||
// Step 6.
|
||||
var relativeStart = ToInteger(start);
|
||||
|
||||
// Step 7.
|
||||
var first = relativeStart < 0 ? std_Math_max(len + relativeStart, 0)
|
||||
: std_Math_min(relativeStart, len);
|
||||
|
||||
// Step 8.
|
||||
var relativeEnd = end === undefined ? len
|
||||
: ToInteger(end);
|
||||
|
||||
// Step 9.
|
||||
var final = relativeEnd < 0 ? std_Math_max(len + relativeEnd, 0)
|
||||
: std_Math_min(relativeEnd, len);
|
||||
|
||||
// Step 10.
|
||||
var newLen = std_Math_max(final - first, 0);
|
||||
|
||||
// Step 11
|
||||
var ctor = SpeciesConstructor(O, GetBuiltinConstructor("SharedArrayBuffer"));
|
||||
|
||||
// Step 12.
|
||||
var new_ = new ctor(newLen);
|
||||
|
||||
// Step 13.
|
||||
var isWrapped = false;
|
||||
if (!IsSharedArrayBuffer(new_)) {
|
||||
if (!IsWrappedSharedArrayBuffer(new_))
|
||||
ThrowTypeError(JSMSG_NON_SHARED_ARRAY_BUFFER_RETURNED);
|
||||
isWrapped = true;
|
||||
}
|
||||
|
||||
// Step 14.
|
||||
if (new_ === O)
|
||||
ThrowTypeError(JSMSG_SAME_SHARED_ARRAY_BUFFER_RETURNED);
|
||||
|
||||
// Step 15.
|
||||
var actualLen = PossiblyWrappedSharedArrayBufferByteLength(new_);
|
||||
if (actualLen < newLen)
|
||||
ThrowTypeError(JSMSG_SHORT_SHARED_ARRAY_BUFFER_RETURNED, newLen, actualLen);
|
||||
|
||||
// Steps 16-18.
|
||||
SharedArrayBufferCopyData(new_, O, first | 0, newLen | 0, isWrapped);
|
||||
|
||||
// Step 19.
|
||||
return new_;
|
||||
}
|
||||
|
||||
function SharedArrayBufferSpecies() {
|
||||
// Step 1.
|
||||
return this;
|
||||
}
|
||||
_SetCanonicalName(SharedArrayBufferSpecies, "get [Symbol.species]");
|
||||
|
@ -528,9 +528,6 @@ MSG_DEF(JSMSG_SHORT_TYPED_ARRAY_RETURNED, 2, JSEXN_TYPEERR, "expected TypedArray
|
||||
|
||||
// Shared array buffer
|
||||
MSG_DEF(JSMSG_SHARED_ARRAY_BAD_LENGTH, 0, JSEXN_RANGEERR, "length argument out of range")
|
||||
MSG_DEF(JSMSG_NON_SHARED_ARRAY_BUFFER_RETURNED, 0, JSEXN_TYPEERR, "expected SharedArrayBuffer, but species constructor returned non-SharedArrayBuffer")
|
||||
MSG_DEF(JSMSG_SAME_SHARED_ARRAY_BUFFER_RETURNED, 0, JSEXN_TYPEERR, "expected different SharedArrayBuffer, but species constructor returned same SharedArrayBuffer")
|
||||
MSG_DEF(JSMSG_SHORT_SHARED_ARRAY_BUFFER_RETURNED, 2, JSEXN_TYPEERR, "expected SharedArrayBuffer with at least {0} bytes, but species constructor returns SharedArrayBuffer with {1} bytes")
|
||||
|
||||
// Reflect
|
||||
MSG_DEF(JSMSG_BAD_PARSE_NODE, 0, JSEXN_INTERNALERR, "bad parse node")
|
||||
|
@ -948,7 +948,6 @@ intrinsic_GeneratorSetClosed(JSContext* cx, unsigned argc, Value* vp)
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static bool
|
||||
intrinsic_IsWrappedArrayBuffer(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
@ -972,25 +971,23 @@ intrinsic_IsWrappedArrayBuffer(JSContext* cx, unsigned argc, Value* vp)
|
||||
return false;
|
||||
}
|
||||
|
||||
args.rval().setBoolean(unwrapped->is<T>());
|
||||
args.rval().setBoolean(unwrapped->is<ArrayBufferObject>());
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static bool
|
||||
intrinsic_ArrayBufferByteLength(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
MOZ_ASSERT(args.length() == 1);
|
||||
MOZ_ASSERT(args[0].isObject());
|
||||
MOZ_ASSERT(args[0].toObject().is<T>());
|
||||
MOZ_ASSERT(args[0].toObject().is<ArrayBufferObject>());
|
||||
|
||||
size_t byteLength = args[0].toObject().as<T>().byteLength();
|
||||
size_t byteLength = args[0].toObject().as<ArrayBufferObject>().byteLength();
|
||||
args.rval().setInt32(mozilla::AssertedCast<int32_t>(byteLength));
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static bool
|
||||
intrinsic_PossiblyWrappedArrayBufferByteLength(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
@ -1003,12 +1000,11 @@ intrinsic_PossiblyWrappedArrayBufferByteLength(JSContext* cx, unsigned argc, Val
|
||||
return false;
|
||||
}
|
||||
|
||||
uint32_t length = obj->as<T>().byteLength();
|
||||
uint32_t length = obj->as<ArrayBufferObject>().byteLength();
|
||||
args.rval().setInt32(mozilla::AssertedCast<int32_t>(length));
|
||||
return true;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static bool
|
||||
intrinsic_ArrayBufferCopyData(JSContext* cx, unsigned argc, Value* vp)
|
||||
{
|
||||
@ -1016,9 +1012,9 @@ intrinsic_ArrayBufferCopyData(JSContext* cx, unsigned argc, Value* vp)
|
||||
MOZ_ASSERT(args.length() == 5);
|
||||
|
||||
bool isWrapped = args[4].toBoolean();
|
||||
Rooted<T*> toBuffer(cx);
|
||||
Rooted<ArrayBufferObject*> toBuffer(cx);
|
||||
if (!isWrapped) {
|
||||
toBuffer = &args[0].toObject().as<T>();
|
||||
toBuffer = &args[0].toObject().as<ArrayBufferObject>();
|
||||
} else {
|
||||
JSObject* wrapped = &args[0].toObject();
|
||||
MOZ_ASSERT(wrapped->is<WrapperObject>());
|
||||
@ -1027,13 +1023,13 @@ intrinsic_ArrayBufferCopyData(JSContext* cx, unsigned argc, Value* vp)
|
||||
JS_ReportErrorASCII(cx, "Permission denied to access object");
|
||||
return false;
|
||||
}
|
||||
toBuffer = toBufferObj.as<T>();
|
||||
toBuffer = toBufferObj.as<ArrayBufferObject>();
|
||||
}
|
||||
Rooted<T*> fromBuffer(cx, &args[1].toObject().as<T>());
|
||||
Rooted<ArrayBufferObject*> fromBuffer(cx, &args[1].toObject().as<ArrayBufferObject>());
|
||||
uint32_t fromIndex = uint32_t(args[2].toInt32());
|
||||
uint32_t count = uint32_t(args[3].toInt32());
|
||||
|
||||
T::copyData(toBuffer, fromBuffer, fromIndex, count);
|
||||
ArrayBufferObject::copyData(toBuffer, fromBuffer, fromIndex, count);
|
||||
|
||||
args.rval().setUndefined();
|
||||
return true;
|
||||
@ -2334,28 +2330,13 @@ static const JSFunctionSpec intrinsic_functions[] = {
|
||||
intrinsic_IsInstanceOfBuiltin<ArrayBufferObject>, 1,0),
|
||||
JS_FN("IsSharedArrayBuffer",
|
||||
intrinsic_IsInstanceOfBuiltin<SharedArrayBufferObject>, 1,0),
|
||||
JS_FN("IsWrappedArrayBuffer",
|
||||
intrinsic_IsWrappedArrayBuffer<ArrayBufferObject>, 1,0),
|
||||
JS_FN("IsWrappedSharedArrayBuffer",
|
||||
intrinsic_IsWrappedArrayBuffer<SharedArrayBufferObject>, 1,0),
|
||||
JS_FN("IsWrappedArrayBuffer", intrinsic_IsWrappedArrayBuffer, 1,0),
|
||||
|
||||
JS_INLINABLE_FN("ArrayBufferByteLength",
|
||||
intrinsic_ArrayBufferByteLength<ArrayBufferObject>, 1,0,
|
||||
JS_INLINABLE_FN("ArrayBufferByteLength", intrinsic_ArrayBufferByteLength, 1,0,
|
||||
IntrinsicArrayBufferByteLength),
|
||||
JS_INLINABLE_FN("PossiblyWrappedArrayBufferByteLength",
|
||||
intrinsic_PossiblyWrappedArrayBufferByteLength<ArrayBufferObject>, 1,0,
|
||||
JS_INLINABLE_FN("PossiblyWrappedArrayBufferByteLength", intrinsic_PossiblyWrappedArrayBufferByteLength, 1,0,
|
||||
IntrinsicPossiblyWrappedArrayBufferByteLength),
|
||||
JS_FN("ArrayBufferCopyData",
|
||||
intrinsic_ArrayBufferCopyData<ArrayBufferObject>, 5,0),
|
||||
|
||||
JS_INLINABLE_FN("SharedArrayBufferByteLength",
|
||||
intrinsic_ArrayBufferByteLength<SharedArrayBufferObject>, 1,0,
|
||||
IntrinsicArrayBufferByteLength),
|
||||
JS_INLINABLE_FN("PossiblyWrappedSharedArrayBufferByteLength",
|
||||
intrinsic_PossiblyWrappedArrayBufferByteLength<SharedArrayBufferObject>, 1,0,
|
||||
IntrinsicPossiblyWrappedArrayBufferByteLength),
|
||||
JS_FN("SharedArrayBufferCopyData",
|
||||
intrinsic_ArrayBufferCopyData<SharedArrayBufferObject>, 5,0),
|
||||
JS_FN("ArrayBufferCopyData", intrinsic_ArrayBufferCopyData, 5,0),
|
||||
|
||||
JS_FN("IsUint8TypedArray", intrinsic_IsUint8TypedArray, 1,0),
|
||||
JS_FN("IsInt8TypedArray", intrinsic_IsInt8TypedArray, 1,0),
|
||||
@ -2390,8 +2371,6 @@ static const JSFunctionSpec intrinsic_functions[] = {
|
||||
|
||||
JS_FN("CallArrayBufferMethodIfWrapped",
|
||||
CallNonGenericSelfhostedMethod<Is<ArrayBufferObject>>, 2, 0),
|
||||
JS_FN("CallSharedArrayBufferMethodIfWrapped",
|
||||
CallNonGenericSelfhostedMethod<Is<SharedArrayBufferObject>>, 2, 0),
|
||||
JS_FN("CallTypedArrayMethodIfWrapped",
|
||||
CallNonGenericSelfhostedMethod<Is<TypedArrayObject>>, 2, 0),
|
||||
|
||||
|
@ -327,20 +327,6 @@ SharedArrayBufferObject::addSizeOfExcludingThis(JSObject* obj, mozilla::MallocSi
|
||||
buf.byteLength() / buf.rawBufferObject()->refcount();
|
||||
}
|
||||
|
||||
/* static */ void
|
||||
SharedArrayBufferObject::copyData(Handle<SharedArrayBufferObject*> toBuffer,
|
||||
Handle<SharedArrayBufferObject*> fromBuffer,
|
||||
uint32_t fromIndex, uint32_t count)
|
||||
{
|
||||
MOZ_ASSERT(toBuffer->byteLength() >= count);
|
||||
MOZ_ASSERT(fromBuffer->byteLength() >= fromIndex);
|
||||
MOZ_ASSERT(fromBuffer->byteLength() >= fromIndex + count);
|
||||
|
||||
jit::AtomicOperations::memcpySafeWhenRacy(toBuffer->dataPointerShared(),
|
||||
fromBuffer->dataPointerShared() + fromIndex,
|
||||
count);
|
||||
}
|
||||
|
||||
static const ClassSpec SharedArrayBufferObjectProtoClassSpec = {
|
||||
DELEGATED_CLASSSPEC(SharedArrayBufferObject::class_.spec),
|
||||
nullptr,
|
||||
@ -385,12 +371,10 @@ static const JSFunctionSpec static_functions[] = {
|
||||
};
|
||||
|
||||
static const JSPropertySpec static_properties[] = {
|
||||
JS_SELF_HOSTED_SYM_GET(species, "SharedArrayBufferSpecies", 0),
|
||||
JS_PS_END
|
||||
};
|
||||
|
||||
static const JSFunctionSpec prototype_functions[] = {
|
||||
JS_SELF_HOSTED_FN("slice", "SharedArrayBufferSlice", 2, 0),
|
||||
JS_FS_END
|
||||
};
|
||||
|
||||
|
@ -147,10 +147,6 @@ class SharedArrayBufferObject : public ArrayBufferObjectMaybeShared
|
||||
static void addSizeOfExcludingThis(JSObject* obj, mozilla::MallocSizeOf mallocSizeOf,
|
||||
JS::ClassInfo* info);
|
||||
|
||||
static void copyData(Handle<SharedArrayBufferObject*> toBuffer,
|
||||
Handle<SharedArrayBufferObject*> fromBuffer,
|
||||
uint32_t fromIndex, uint32_t count);
|
||||
|
||||
SharedArrayRawBuffer* rawBufferObject() const;
|
||||
|
||||
// Invariant: This method does not cause GC and can be called
|
||||
|
Loading…
Reference in New Issue
Block a user