2121#include " config.h"
2222#include " JSArrayBuffer.h"
2323
24- #include " ExceptionCode.h"
2524#include " JSArrayBuffer.h"
26- #include " JSDOMBinding .h"
25+ #include " Lookup .h"
2726#include < runtime/Error.h>
2827#include < wtf/ArrayBuffer.h>
2928#include < wtf/GetPtr.h>
3029
3130using namespace JSC ;
3231
33- namespace WebCore {
32+ namespace JSC {
33+
34+ enum ParameterDefaultPolicy {
35+ DefaultIsUndefined,
36+ DefaultIsNullString
37+ };
38+
39+ #define MAYBE_MISSING_PARAMETER (exec, index, policy ) (((policy) == DefaultIsNullString && (index) >= (exec)->argumentCount ()) ? (JSValue()) : ((exec)->argument(index)))
40+
3441
3542ASSERT_CLASS_FITS_IN_CELL(JSArrayBuffer);
3643/* Hash table */
@@ -53,27 +60,28 @@ static const HashTableValue JSArrayBufferConstructorTableValues[] =
5360static const HashTable JSArrayBufferConstructorTable = { 1 , 0 , JSArrayBufferConstructorTableValues, 0 };
5461const ClassInfo JSArrayBufferConstructor::s_info = { " ArrayBufferConstructor" , &Base::s_info, &JSArrayBufferConstructorTable, 0 , CREATE_METHOD_TABLE (JSArrayBufferConstructor) };
5562
56- JSArrayBufferConstructor::JSArrayBufferConstructor (Structure* structure, JSDOMGlobalObject* globalObject )
57- : DOMConstructorObject(structure, globalObject )
63+ JSArrayBufferConstructor::JSArrayBufferConstructor (JSGlobalObject* globalObject, Structure* structure )
64+ : InternalFunction(globalObject, structure )
5865{
5966}
6067
61- void JSArrayBufferConstructor::finishCreation (ExecState* exec, JSDOMGlobalObject * globalObject)
68+ void JSArrayBufferConstructor::finishCreation (ExecState* exec, JSGlobalObject * globalObject)
6269{
63- Base::finishCreation (exec->globalData ());
70+ JSC::JSObject * proto = JSArrayBufferPrototype::self (exec, globalObject);
71+ Base::finishCreation (exec->globalData (), Identifier (exec, proto->classInfo ()->className ));
6472 ASSERT (inherits (&s_info));
65- putDirect (exec->globalData (), exec->propertyNames ().prototype , JSArrayBufferPrototype::self (exec, globalObject) , DontDelete | ReadOnly);
73+ putDirect (exec->globalData (), exec->propertyNames ().prototype , proto , DontDelete | ReadOnly);
6674 putDirect (exec->globalData (), exec->propertyNames ().length , jsNumber (1 ), ReadOnly | DontDelete | DontEnum);
6775}
6876
6977bool JSArrayBufferConstructor::getOwnPropertySlot (JSCell* cell, ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
7078{
71- return getStaticValueSlot<JSArrayBufferConstructor, JSDOMWrapper >(exec, &JSArrayBufferConstructorTable, jsCast<JSArrayBufferConstructor*>(cell), propertyName, slot);
79+ return getStaticFunctionSlot<InternalFunction >(exec, &JSArrayBufferConstructorTable, jsCast<JSArrayBufferConstructor*>(cell), propertyName, slot);
7280}
7381
7482bool JSArrayBufferConstructor::getOwnPropertyDescriptor (JSObject* object, ExecState* exec, const Identifier& propertyName, PropertyDescriptor& descriptor)
7583{
76- return getStaticValueDescriptor<JSArrayBufferConstructor, JSDOMWrapper >(exec, &JSArrayBufferConstructorTable, jsCast<JSArrayBufferConstructor*>(object), propertyName, descriptor);
84+ return getStaticFunctionDescriptor<InternalFunction >(exec, &JSArrayBufferConstructorTable, jsCast<JSArrayBufferConstructor*>(object), propertyName, descriptor);
7785}
7886
7987ConstructType JSArrayBufferConstructor::getConstructData (JSCell*, ConstructData& constructData)
@@ -93,14 +101,20 @@ static const HashTableValue JSArrayBufferPrototypeTableValues[] =
93101static const HashTable JSArrayBufferPrototypeTable = { 2 , 1 , JSArrayBufferPrototypeTableValues, 0 };
94102static const HashTable* getJSArrayBufferPrototypeTable (ExecState* exec)
95103{
96- return getHashTableForGlobalData (exec->globalData (), &JSArrayBufferPrototypeTable);
104+ ASSERT_UNUSED (exec, exec);
105+ return &JSArrayBufferPrototypeTable; // PL FIXME: should be one instance per global data, not super global
97106}
98107
99108const ClassInfo JSArrayBufferPrototype::s_info = { " ArrayBufferPrototype" , &Base::s_info, 0 , getJSArrayBufferPrototypeTable, CREATE_METHOD_TABLE (JSArrayBufferPrototype) };
100109
110+ static JSObject * globalProto = NULL ;
101111JSObject* JSArrayBufferPrototype::self (ExecState* exec, JSGlobalObject* globalObject)
102112{
103- return getDOMPrototype<JSArrayBuffer>(exec, globalObject);
113+ // PL FIXME: dirty hack to provide one global prototype
114+ if ( !globalProto ) {
115+ globalProto = JSArrayBuffer::createPrototype (exec, globalObject);
116+ }
117+ return globalProto;
104118}
105119
106120bool JSArrayBufferPrototype::getOwnPropertySlot (JSCell* cell, ExecState* exec, const Identifier& propertyName, PropertySlot& slot)
@@ -117,13 +131,14 @@ bool JSArrayBufferPrototype::getOwnPropertyDescriptor(JSObject* object, ExecStat
117131
118132static const HashTable* getJSArrayBufferTable (ExecState* exec)
119133{
120- return getHashTableForGlobalData (exec->globalData (), &JSArrayBufferTable);
134+ ASSERT_UNUSED (exec, exec);
135+ return &JSArrayBufferTable;
121136}
122137
123138const ClassInfo JSArrayBuffer::s_info = { " ArrayBuffer" , &Base::s_info, 0 , getJSArrayBufferTable , CREATE_METHOD_TABLE (JSArrayBuffer) };
124139
125- JSArrayBuffer::JSArrayBuffer (Structure* structure, JSDOMGlobalObject * globalObject, PassRefPtr<ArrayBuffer> impl)
126- : JSDOMWrapper(structure, globalObject )
140+ JSArrayBuffer::JSArrayBuffer (Structure* structure, JSGlobalObject * globalObject, PassRefPtr<ArrayBuffer> impl)
141+ : JSNonFinalObject(globalObject-> globalData (), structure )
127142 , m_impl(impl.leakRef())
128143{
129144}
@@ -180,9 +195,14 @@ JSValue jsArrayBufferConstructor(ExecState* exec, JSValue slotBase, const Identi
180195 return JSArrayBuffer::getConstructor (exec, domObject->globalObject ());
181196}
182197
198+ static JSObject * globalConstructor;
183199JSValue JSArrayBuffer::getConstructor (ExecState* exec, JSGlobalObject* globalObject)
184200{
185- return getDOMConstructor<JSArrayBufferConstructor>(exec, jsCast<JSDOMGlobalObject*>(globalObject));
201+ if ( !globalConstructor ) {
202+ JSArrayBufferConstructor * constructor = JSArrayBufferConstructor::create (exec, JSArrayBufferConstructor::createStructure (exec->globalData (), globalObject, globalObject->objectPrototype ()), globalObject);
203+ globalConstructor = constructor;
204+ }
205+ return globalConstructor;
186206}
187207
188208EncodedJSValue JSC_HOST_CALL jsArrayBufferPrototypeFunctionSlice (ExecState* exec)
@@ -232,15 +252,16 @@ bool JSArrayBufferOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> ha
232252
233253void JSArrayBufferOwner::finalize (JSC::Handle<JSC::Unknown> handle, void * context)
234254{
255+ ASSERT_UNUSED (context, context);
235256 JSArrayBuffer* jsArrayBuffer = jsCast<JSArrayBuffer*>(handle.get ().asCell ());
236- DOMWrapperWorld* world = static_cast <DOMWrapperWorld*>(context);
237- uncacheWrapper (world, jsArrayBuffer->impl (), jsArrayBuffer);
238257 jsArrayBuffer->releaseImpl ();
239258}
240259
241- JSC::JSValue toJS (JSC::ExecState* exec, JSDOMGlobalObject * globalObject, ArrayBuffer* impl)
260+ JSC::JSValue toJS (JSC::ExecState* exec, JSGlobalObject * globalObject, ArrayBuffer* impl)
242261{
243- return wrap<JSArrayBuffer>(exec, globalObject, impl);
262+ JSArrayBuffer * buf = JSArrayBuffer::create ( JSArrayBuffer::createStructure (exec->globalData (), globalObject, JSArrayBufferPrototype::self (exec, globalObject)), globalObject, impl);
263+ JSC::JSCell* jsCell = reinterpret_cast <JSC::JSCell*>(buf);
264+ return jsCell;
244265}
245266
246267ArrayBuffer* toArrayBuffer (JSC::JSValue value)
0 commit comments