JSLexicalEnvironment.h [plain text]
#ifndef JSLexicalEnvironment_h
#define JSLexicalEnvironment_h
#include "CodeBlock.h"
#include "CopiedSpaceInlines.h"
#include "JSEnvironmentRecord.h"
#include "SymbolTable.h"
namespace JSC {
class Register;
class JSLexicalEnvironment : public JSEnvironmentRecord {
protected:
JSLexicalEnvironment(VM&, Structure*, JSScope*, SymbolTable*);
public:
typedef JSEnvironmentRecord Base;
static const unsigned StructureFlags = Base::StructureFlags | OverridesGetOwnPropertySlot | OverridesGetPropertyNames | OverridesToThis;
static JSLexicalEnvironment* create(
VM& vm, Structure* structure, JSScope* currentScope, SymbolTable* symbolTable, JSValue initialValue)
{
JSLexicalEnvironment* result =
new (
NotNull,
allocateCell<JSLexicalEnvironment>(vm.heap, allocationSize(symbolTable)))
JSLexicalEnvironment(vm, structure, currentScope, symbolTable);
result->finishCreation(vm, initialValue);
return result;
}
static JSLexicalEnvironment* create(VM& vm, JSGlobalObject* globalObject, JSScope* currentScope, SymbolTable* symbolTable, JSValue initialValue)
{
Structure* structure = globalObject->activationStructure();
return create(vm, structure, currentScope, symbolTable, initialValue);
}
static bool getOwnPropertySlot(JSObject*, ExecState*, PropertyName, PropertySlot&);
static void getOwnNonIndexPropertyNames(JSObject*, ExecState*, PropertyNameArray&, EnumerationMode);
static bool put(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&);
static bool deleteProperty(JSCell*, ExecState*, PropertyName);
static JSValue toThis(JSCell*, ExecState*, ECMAMode);
DECLARE_INFO;
static Structure* createStructure(VM& vm, JSGlobalObject* globalObject) { return Structure::create(vm, globalObject, jsNull(), TypeInfo(LexicalEnvironmentType, StructureFlags), info()); }
};
inline JSLexicalEnvironment::JSLexicalEnvironment(VM& vm, Structure* structure, JSScope* currentScope, SymbolTable* symbolTable)
: Base(vm, structure, currentScope, symbolTable)
{
}
inline JSLexicalEnvironment* asActivation(JSValue value)
{
ASSERT(asObject(value)->inherits(JSLexicalEnvironment::info()));
return jsCast<JSLexicalEnvironment*>(asObject(value));
}
}
#endif // JSLexicalEnvironment_h