JSCCallbackFunction.h [plain text]
#pragma once
#include "InternalFunction.h"
#include "JSObjectRef.h"
#include <glib-object.h>
#include <wtf/glib/GRefPtr.h>
typedef struct _JSCClass JSCClass;
namespace JSC {
class JSCCallbackFunction : public InternalFunction {
friend struct APICallbackFunction;
public:
typedef InternalFunction Base;
template<typename CellType>
static IsoSubspace* subspaceFor(VM& vm)
{
return subspaceForImpl(vm);
}
enum class Type {
Function,
Method,
Constructor
};
static JSCCallbackFunction* create(VM&, JSGlobalObject*, const String& name, Type, JSCClass*, GRefPtr<GClosure>&&, GType, Optional<Vector<GType>>&&);
static void destroy(JSCell*);
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
{
ASSERT(globalObject);
return Structure::create(vm, globalObject, prototype, TypeInfo(InternalFunctionType, StructureFlags), info());
}
DECLARE_INFO;
JSValueRef call(JSContextRef, JSObjectRef, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
JSObjectRef construct(JSContextRef, size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception);
private:
static IsoSubspace* subspaceForImpl(VM&);
JSCCallbackFunction(VM&, Structure*, Type, JSCClass*, GRefPtr<GClosure>&&, GType, Optional<Vector<GType>>&&);
JSObjectCallAsFunctionCallback functionCallback() { return m_functionCallback; }
JSObjectCallAsConstructorCallback constructCallback() { return m_constructCallback; }
JSObjectCallAsFunctionCallback m_functionCallback;
JSObjectCallAsConstructorCallback m_constructCallback;
Type m_type;
GRefPtr<JSCClass> m_class;
GRefPtr<GClosure> m_closure;
GType m_returnType;
Optional<Vector<GType>> m_parameters;
};
}