Modified: branches/safari-603-branch/Source/_javascript_Core/runtime/AtomicsObject.cpp (211182 => 211183)
--- branches/safari-603-branch/Source/_javascript_Core/runtime/AtomicsObject.cpp 2017-01-26 01:40:42 UTC (rev 211182)
+++ branches/safari-603-branch/Source/_javascript_Core/runtime/AtomicsObject.cpp 2017-01-26 01:40:45 UTC (rev 211183)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2017 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -92,15 +92,14 @@
{
JSGenericTypedArrayView<Adaptor>* typedArray = jsCast<JSGenericTypedArrayView<Adaptor>*>(typedArrayView);
- typename Adaptor::Type extraArgs[numExtraArgs + 1]; // Add 1 to avoid 0 size array error in VS.
+ int32_t extraArgs[numExtraArgs + 1]; // Add 1 to avoid 0 size array error in VS.
for (unsigned i = 0; i < numExtraArgs; ++i) {
int32_t value = exec->argument(2 + i).toInt32(exec);
RETURN_IF_EXCEPTION(scope, JSValue::encode(jsUndefined()));
- extraArgs[i] = Adaptor::toNativeFromInt32(value);
+ extraArgs[i] = value;
}
- typename Adaptor::Type result = func(typedArray->typedVector() + accessIndex, extraArgs);
- return JSValue::encode(Adaptor::toJSValue(result));
+ return JSValue::encode(func(typedArray->typedVector() + accessIndex, extraArgs));
}
unsigned validatedAccessIndex(VM& vm, ExecState* exec, JSArrayBufferView* typedArrayView)
@@ -192,8 +191,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncAdd(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchangeAdd(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ return jsNumber(WTF::atomicExchangeAdd(ptr, args[0]));
});
}
@@ -200,8 +199,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncAnd(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchangeAnd(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ return jsNumber(WTF::atomicExchangeAnd(ptr, args[0]));
});
}
@@ -208,8 +207,11 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncCompareExchange(ExecState* exec)
{
return atomicOperationWithArgs<2>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicCompareExchangeStrong(ptr, args[0], args[1]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ typedef typename std::remove_pointer<decltype(ptr)>::type T;
+ T expected = static_cast<T>(args[0]);
+ T newValue = static_cast<T>(args[1]);
+ return jsNumber(WTF::atomicCompareExchangeStrong(ptr, expected, newValue));
});
}
@@ -216,8 +218,9 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncExchange(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchange(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ typedef typename std::remove_pointer<decltype(ptr)>::type T;
+ return jsNumber(WTF::atomicExchange(ptr, static_cast<T>(args[0])));
});
}
@@ -246,8 +249,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncLoad(ExecState* exec)
{
return atomicOperationWithArgs<0>(
- exec, [&] (auto* ptr, const auto*) {
- return WTF::atomicLoad(ptr);
+ exec, [&] (auto* ptr, const int32_t*) {
+ return jsNumber(WTF::atomicLoad(ptr));
});
}
@@ -254,8 +257,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncOr(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchangeOr(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ return jsNumber(WTF::atomicExchangeOr(ptr, args[0]));
});
}
@@ -262,10 +265,15 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncStore(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- auto value = args[0];
- WTF::atomicStore(ptr, value);
- return value;
+ exec, [&] (auto* ptr, const int32_t* args) {
+ typedef typename std::remove_pointer<decltype(ptr)>::type T;
+ int32_t valueAsInt = args[0];
+ T valueAsT = static_cast<T>(valueAsInt);
+ WTF::atomicStore(ptr, valueAsT);
+
+ if (static_cast<int32_t>(valueAsT) == valueAsInt)
+ return jsNumber(valueAsT);
+ return jsNumber(valueAsInt);
});
}
@@ -272,8 +280,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncSub(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchangeSub(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ return jsNumber(WTF::atomicExchangeSub(ptr, args[0]));
});
}
@@ -382,8 +390,8 @@
EncodedJSValue JSC_HOST_CALL atomicsFuncXor(ExecState* exec)
{
return atomicOperationWithArgs<1>(
- exec, [&] (auto* ptr, const auto* args) {
- return WTF::atomicExchangeXor(ptr, args[0]);
+ exec, [&] (auto* ptr, const int32_t* args) {
+ return jsNumber(WTF::atomicExchangeXor(ptr, args[0]));
});
}