SimpleTypedArrayController.cpp [plain text]
#include "config.h"
#include "SimpleTypedArrayController.h"
#include "ArrayBuffer.h"
#include "JSArrayBuffer.h"
#include "JSCInlines.h"
namespace JSC {
SimpleTypedArrayController::SimpleTypedArrayController() { }
SimpleTypedArrayController::~SimpleTypedArrayController() { }
JSArrayBuffer* SimpleTypedArrayController::toJS(
ExecState* exec, JSGlobalObject* globalObject, ArrayBuffer* native)
{
if (JSArrayBuffer* buffer = native->m_wrapper.get())
return buffer;
JSArrayBuffer* result = JSArrayBuffer::create(
exec->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 true;
}
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*) { }
}