FunctionRareData.cpp [plain text]
#include "config.h"
#include "FunctionRareData.h"
#include "JSCInlines.h"
#include "ObjectAllocationProfileInlines.h"
namespace JSC {
const ClassInfo FunctionRareData::s_info = { "FunctionRareData", nullptr, nullptr, nullptr, CREATE_METHOD_TABLE(FunctionRareData) };
FunctionRareData* FunctionRareData::create(VM& vm)
{
FunctionRareData* rareData = new (NotNull, allocateCell<FunctionRareData>(vm.heap)) FunctionRareData(vm);
rareData->finishCreation(vm);
return rareData;
}
void FunctionRareData::destroy(JSCell* cell)
{
FunctionRareData* rareData = static_cast<FunctionRareData*>(cell);
rareData->FunctionRareData::~FunctionRareData();
}
Structure* FunctionRareData::createStructure(VM& vm, JSGlobalObject* globalObject, JSValue prototype)
{
return Structure::create(vm, globalObject, prototype, TypeInfo(CellType, StructureFlags), info());
}
void FunctionRareData::visitChildren(JSCell* cell, SlotVisitor& visitor)
{
FunctionRareData* rareData = jsCast<FunctionRareData*>(cell);
Base::visitChildren(cell, visitor);
rareData->m_objectAllocationProfile.visitAggregate(visitor);
rareData->m_internalFunctionAllocationProfile.visitAggregate(visitor);
visitor.append(rareData->m_boundFunctionStructure);
}
FunctionRareData::FunctionRareData(VM& vm)
: Base(vm, vm.functionRareDataStructure.get())
, m_objectAllocationProfile()
, m_objectAllocationProfileWatchpoint(ClearWatchpoint)
{
}
FunctionRareData::~FunctionRareData()
{
}
void FunctionRareData::initializeObjectAllocationProfile(VM& vm, JSGlobalObject* globalObject, JSObject* prototype, size_t inlineCapacity, JSFunction* constructor)
{
if (m_objectAllocationProfileWatchpoint.isStillValid())
m_objectAllocationProfileWatchpoint.startWatching();
m_objectAllocationProfile.initializeProfile(vm, globalObject, this, prototype, inlineCapacity, constructor, this);
}
void FunctionRareData::clear(const char* reason)
{
m_objectAllocationProfile.clear();
m_internalFunctionAllocationProfile.clear();
m_objectAllocationProfileWatchpoint.fireAll(*vm(), reason);
}
void FunctionRareData::AllocationProfileClearingWatchpoint::fireInternal(VM&, const FireDetail&)
{
m_rareData->clear("AllocationProfileClearingWatchpoint fired.");
}
}