X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..6fe7ccc865dc7d7541b93c5bcaf6368d2c98a174:/runtime/JSVariableObject.cpp diff --git a/runtime/JSVariableObject.cpp b/runtime/JSVariableObject.cpp index abe9bbb..8ca6950 100644 --- a/runtime/JSVariableObject.cpp +++ b/runtime/JSVariableObject.cpp @@ -29,33 +29,38 @@ #include "config.h" #include "JSVariableObject.h" +#include "JSActivation.h" +#include "JSGlobalObject.h" +#include "JSStaticScopeObject.h" #include "PropertyNameArray.h" #include "PropertyDescriptor.h" namespace JSC { -bool JSVariableObject::deleteProperty(ExecState* exec, const Identifier& propertyName) +void JSVariableObject::destroy(JSCell* cell) { - if (symbolTable().contains(propertyName.impl())) + jsCast(cell)->JSVariableObject::~JSVariableObject(); +} + +bool JSVariableObject::deleteProperty(JSCell* cell, ExecState* exec, const Identifier& propertyName) +{ + JSVariableObject* thisObject = jsCast(cell); + if (thisObject->symbolTable().contains(propertyName.impl())) return false; - return JSObject::deleteProperty(exec, propertyName); + return JSObject::deleteProperty(thisObject, exec, propertyName); } -void JSVariableObject::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) +void JSVariableObject::getOwnPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode) { - SymbolTable::const_iterator end = symbolTable().end(); - for (SymbolTable::const_iterator it = symbolTable().begin(); it != end; ++it) { + JSVariableObject* thisObject = jsCast(object); + SymbolTable::const_iterator end = thisObject->symbolTable().end(); + for (SymbolTable::const_iterator it = thisObject->symbolTable().begin(); it != end; ++it) { if (!(it->second.getAttributes() & DontEnum) || (mode == IncludeDontEnumProperties)) propertyNames.add(Identifier(exec, it->first.get())); } - JSObject::getOwnPropertyNames(exec, propertyNames, mode); -} - -bool JSVariableObject::isVariableObject() const -{ - return true; + JSObject::getOwnPropertyNames(thisObject, exec, propertyNames, mode); } bool JSVariableObject::symbolTableGet(const Identifier& propertyName, PropertyDescriptor& descriptor) @@ -68,4 +73,26 @@ bool JSVariableObject::symbolTableGet(const Identifier& propertyName, PropertyDe return false; } +void JSVariableObject::putDirectVirtual(JSObject*, ExecState*, const Identifier&, JSValue, unsigned) +{ + ASSERT_NOT_REACHED(); +} + +bool JSVariableObject::isDynamicScope(bool& requiresDynamicChecks) const +{ + switch (structure()->typeInfo().type()) { + case GlobalObjectType: + return static_cast(this)->isDynamicScope(requiresDynamicChecks); + case ActivationObjectType: + return static_cast(this)->isDynamicScope(requiresDynamicChecks); + case StaticScopeObjectType: + return static_cast(this)->isDynamicScope(requiresDynamicChecks); + default: + ASSERT_NOT_REACHED(); + break; + } + + return false; +} + } // namespace JSC