X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/f9bf01c6616d5ddcf65b13b33cedf9e387ff7a63..6fe7ccc865dc7d7541b93c5bcaf6368d2c98a174:/runtime/JSVariableObject.cpp?ds=sidebyside diff --git a/runtime/JSVariableObject.cpp b/runtime/JSVariableObject.cpp index 7365001..8ca6950 100644 --- a/runtime/JSVariableObject.cpp +++ b/runtime/JSVariableObject.cpp @@ -29,43 +29,70 @@ #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.ustring().rep())) + 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) { - SymbolTableEntry entry = symbolTable().inlineGet(propertyName.ustring().rep()); + SymbolTableEntry entry = symbolTable().inlineGet(propertyName.impl()); if (!entry.isNull()) { - descriptor.setDescriptor(registerAt(entry.getIndex()).jsValue(), entry.getAttributes() | DontDelete); + descriptor.setDescriptor(registerAt(entry.getIndex()).get(), entry.getAttributes() | DontDelete); return true; } 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