JSCallbackConstructor.h [plain text]
#ifndef JSCallbackConstructor_h
#define JSCallbackConstructor_h
#include "JSObject.h"
#include "JSObjectRef.h"
namespace JSC {
class JSCallbackConstructor final : public JSNonFinalObject {
public:
using Base = JSNonFinalObject;
static constexpr unsigned StructureFlags = Base::StructureFlags | ImplementsHasInstance | ImplementsDefaultHasInstance;
static constexpr bool needsDestruction = true;
template<typename CellType, SubspaceAccess mode>
static IsoSubspace* subspaceFor(VM& vm)
{
return vm.callbackConstructorSpace<mode>();
}
static JSCallbackConstructor* create(JSGlobalObject* globalObject, Structure* structure, JSClassRef classRef, JSObjectCallAsConstructorCallback callback)
{
VM& vm = getVM(globalObject);
JSCallbackConstructor* constructor = new (NotNull, allocateCell<JSCallbackConstructor>(vm.heap)) JSCallbackConstructor(globalObject, structure, classRef, callback);
constructor->finishCreation(globalObject, classRef);
return constructor;
}
~JSCallbackConstructor();
static void destroy(JSCell*);
JSClassRef classRef() const { return m_class; }
JSObjectCallAsConstructorCallback callback() const { return m_callback; }
DECLARE_INFO;
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
{
return Structure::create(vm, globalObject, proto, TypeInfo(ObjectType, StructureFlags), info());
}
private:
JSCallbackConstructor(JSGlobalObject*, Structure*, JSClassRef, JSObjectCallAsConstructorCallback);
void finishCreation(JSGlobalObject*, JSClassRef);
friend struct APICallbackFunction;
static CallData getConstructData(JSCell*);
JSObjectCallAsConstructorCallback constructCallback() { return m_callback; }
JSClassRef m_class;
JSObjectCallAsConstructorCallback m_callback;
};
}
#endif // JSCallbackConstructor_h