SimpleTypedArrayController.cpp [plain text]
#include "config.h"
#include "SimpleTypedArrayController.h"
#include "ArrayBuffer.h"
#include "JSArrayBuffer.h"
#include "JSCJSValueInlines.h"
#include "JSGlobalObject.h"
namespace JSC {
SimpleTypedArrayController::SimpleTypedArrayController(bool allowAtomicsWait)
: m_allowAtomicsWait(allowAtomicsWait)
{
}
SimpleTypedArrayController::~SimpleTypedArrayController() { }
JSArrayBuffer* SimpleTypedArrayController::toJS(JSGlobalObject* lexicalGlobalObject, JSGlobalObject* globalObject, ArrayBuffer* native)
{
UNUSED_PARAM(lexicalGlobalObject);
if (JSArrayBuffer* buffer = native->m_wrapper.get())
return buffer;
JSArrayBuffer* result = JSArrayBuffer::create(globalObject->vm(), globalObject->arrayBufferStructure(native->sharingMode()), native);
return result;
}
void SimpleTypedArrayController::registerWrapper(JSGlobalObject*, ArrayBuffer* native, JSArrayBuffer* wrapper)
{
ASSERT(!native->m_wrapper);
native->m_wrapper = Weak<JSArrayBuffer>(wrapper, &m_owner);
}
bool SimpleTypedArrayController::isAtomicsWaitAllowedOnCurrentThread()
{
return m_allowAtomicsWait;
}
bool SimpleTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, JSC::SlotVisitor& visitor, const char** reason)
{
if (UNLIKELY(reason))
*reason = "JSArrayBuffer is opaque root";
auto& wrapper = *JSC::jsCast<JSC::JSArrayBuffer*>(handle.slot()->asCell());
return visitor.containsOpaqueRoot(wrapper.impl());
}
void SimpleTypedArrayController::JSArrayBufferOwner::finalize(JSC::Handle<JSC::Unknown>, void*) { }
}