JSWebGLArrayHelper.h [plain text]
#ifndef JSWebGLArrayHelper_h
#define JSWebGLArrayHelper_h
#include "ExceptionCode.h"
#include "JSDOMBinding.h"
#include <interpreter/CallFrame.h>
#include <runtime/ArgList.h>
#include <runtime/Error.h>
#include <runtime/JSObject.h>
#include <runtime/JSValue.h>
namespace WebCore {
template <class T>
JSC::JSValue setWebGLArrayFromArray(JSC::ExecState* exec, T* webGLArray, JSC::ArgList const& args)
{
if (args.at(0).isObject()) {
JSC::JSObject* array = JSC::asObject(args.at(0));
uint32_t offset = 0;
if (args.size() == 2)
offset = args.at(1).toInt32(exec);
uint32_t length = array->get(exec, JSC::Identifier(exec, "length")).toInt32(exec);
if (offset > webGLArray->length() ||
offset + length > webGLArray->length() ||
offset + length < offset)
setDOMException(exec, INDEX_SIZE_ERR);
else {
for (uint32_t i = 0; i < length; i++) {
JSC::JSValue v = array->get(exec, i);
if (exec->hadException())
return JSC::jsUndefined();
webGLArray->set(i + offset, v.toNumber(exec));
}
}
return JSC::jsUndefined();
}
return JSC::throwError(exec, JSC::SyntaxError);
}
template <typename JSType, typename WebCoreType>
static JSC::JSValue toJSArrayBufferView(JSC::ExecState* exec, JSDOMGlobalObject* globalObject, WebCoreType* object)
{
if (!object)
return JSC::jsNull();
if (DOMObject* wrapper = getCachedDOMObjectWrapper(exec, object))
return wrapper;
exec->heap()->reportExtraMemoryCost(object->byteLength());
return createDOMObjectWrapper<JSType>(exec, globalObject, object);
}
}
#endif // JSWebGLArrayHelper_h