Backed out changeset f16586fdc3fd (bug 1232966) for arm bustage

This commit is contained in:
Carsten "Tomcat" Book 2016-10-31 15:08:14 +01:00
parent 2b0c24a4d2
commit 12b13f74df
5 changed files with 13 additions and 127 deletions

View File

@ -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]");

View File

@ -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")

View File

@ -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),

View File

@ -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
};

View File

@ -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