#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<JSVariableObject*>(cell)->JSVariableObject::~JSVariableObject();
+}
+
+bool JSVariableObject::deleteProperty(JSCell* cell, ExecState* exec, const Identifier& propertyName)
+{
+ JSVariableObject* thisObject = jsCast<JSVariableObject*>(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<JSVariableObject*>(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)
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<const JSGlobalObject*>(this)->isDynamicScope(requiresDynamicChecks);
+ case ActivationObjectType:
+ return static_cast<const JSActivation*>(this)->isDynamicScope(requiresDynamicChecks);
+ case StaticScopeObjectType:
+ return static_cast<const JSStaticScopeObject*>(this)->isDynamicScope(requiresDynamicChecks);
+ default:
+ ASSERT_NOT_REACHED();
+ break;
+ }
+
+ return false;
+}
+
} // namespace JSC