@@ -40,19 +40,28 @@ inline JSC::JSObject* getDOMConstructor(JSC::ExecState* exec, JSC::JSGlobalObjec
4040 return constructor;
4141}
4242
43- template <class PrototypeClass >
44- inline JSC::JSObject* getDOMPrototype (JSC::ExecState* exec, JSC::JSGlobalObject* globalObject)
43+ template <class TypeClass >
44+ inline JSC::Structure* getDOMStructure (JSC::ExecState* exec, JSC::JSGlobalObject* globalObject)
4545{
46- if (JSC::JSObject* prototype = globalObject->typedArrayPrototypeMap .get (&PrototypeClass::s_info).get ())
47- return prototype;
48-
49- JSC::JSObject* prototype = PrototypeClass::create (exec->globalData (), globalObject,
50- PrototypeClass::createStructure (exec->globalData (), globalObject, globalObject->objectPrototype ()));
46+ if (JSC::Structure* structure = globalObject->typedArrayStructureMap .get (&TypeClass::s_info).get ()) {
47+ return structure;
48+ }
5149
52- ASSERT (!globalObject->typedArrayPrototypeMap .contains (&PrototypeClass::s_info));
53- JSC::WriteBarrier<JSC::JSObject> temp;
54- globalObject->typedArrayPrototypeMap .add (&PrototypeClass::s_info, temp).iterator ->second .set (exec->globalData (), globalObject, prototype);
55- return prototype;
50+
51+ JSC::JSObject * proto = TypeClass::createPrototype (exec, globalObject);
52+ JSC::Structure *structure = TypeClass::createStructure (exec->globalData (), globalObject, proto);
53+
54+ globalObject->typedArrayStructureMap .set (
55+ &TypeClass::s_info,
56+ JSC::WriteBarrier<JSC::Structure>(globalObject->globalData (), globalObject, structure)
57+ );
58+ return structure;
59+ }
60+
61+ template <class TypeClass >
62+ inline JSC::JSObject* getDOMPrototype (JSC::ExecState* exec, JSC::JSGlobalObject* globalObject)
63+ {
64+ return JSC::jsCast<JSC::JSObject*>(asObject (getDOMStructure<TypeClass>(exec, globalObject)->storedPrototype ()));
5665}
5766
5867}
0 commit comments