UnlinkedProgramCodeBlock.h [plain text]
#pragma once
#include "UnlinkedGlobalCodeBlock.h"
namespace JSC {
class UnlinkedProgramCodeBlock final : public UnlinkedGlobalCodeBlock {
public:
typedef UnlinkedGlobalCodeBlock Base;
static const unsigned StructureFlags = Base::StructureFlags | StructureIsImmortal;
static UnlinkedProgramCodeBlock* create(VM* vm, const ExecutableInfo& info, DebuggerMode debuggerMode)
{
UnlinkedProgramCodeBlock* instance = new (NotNull, allocateCell<UnlinkedProgramCodeBlock>(vm->heap)) UnlinkedProgramCodeBlock(vm, vm->unlinkedProgramCodeBlockStructure.get(), info, debuggerMode);
instance->finishCreation(*vm);
return instance;
}
static void destroy(JSCell*);
void setVariableDeclarations(const VariableEnvironment& environment) { m_varDeclarations = environment; }
const VariableEnvironment& variableDeclarations() const { return m_varDeclarations; }
void setLexicalDeclarations(const VariableEnvironment& environment) { m_lexicalDeclarations = environment; }
const VariableEnvironment& lexicalDeclarations() const { return m_lexicalDeclarations; }
private:
UnlinkedProgramCodeBlock(VM* vm, Structure* structure, const ExecutableInfo& info, DebuggerMode debuggerMode)
: Base(vm, structure, GlobalCode, info, debuggerMode)
{
}
VariableEnvironment m_varDeclarations;
VariableEnvironment m_lexicalDeclarations;
public:
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject, JSValue proto)
{
return Structure::create(vm, globalObject, proto, TypeInfo(UnlinkedProgramCodeBlockType, StructureFlags), info());
}
DECLARE_INFO;
};
}