#ifndef GetterSetter_h
#define GetterSetter_h
#include "JSCell.h"
#include "CallFrame.h"
#include "Structure.h"
namespace JSC {
class JSObject;
class GetterSetter : public JSCell {
friend class JIT;
public:
GetterSetter(ExecState* exec)
: JSCell(exec->globalData(), exec->globalData().getterSetterStructure.get())
{
}
virtual void visitChildren(SlotVisitor&);
JSObject* getter() const { return m_getter.get(); }
void setGetter(JSGlobalData& globalData, JSObject* getter) { m_getter.set(globalData, this, getter); }
JSObject* setter() const { return m_setter.get(); }
void setSetter(JSGlobalData& globalData, JSObject* setter) { m_setter.set(globalData, this, setter); }
static Structure* createStructure(JSGlobalData& globalData, JSValue prototype)
{
return Structure::create(globalData, prototype, TypeInfo(GetterSetterType, OverridesVisitChildren), AnonymousSlotCount, &s_info);
}
static const ClassInfo s_info;
private:
virtual bool isGetterSetter() const;
WriteBarrier<JSObject> m_getter;
WriteBarrier<JSObject> m_setter;
};
GetterSetter* asGetterSetter(JSValue);
inline GetterSetter* asGetterSetter(JSValue value)
{
ASSERT(value.asCell()->isGetterSetter());
return static_cast<GetterSetter*>(value.asCell());
}
}
#endif // GetterSetter_h