JSSymbolTableObject.cpp [plain text]
#include "config.h"
#include "JSSymbolTableObject.h"
#include "JSActivation.h"
#include "JSGlobalObject.h"
#include "JSNameScope.h"
#include "Operations.h"
#include "PropertyNameArray.h"
namespace JSC {
void JSSymbolTableObject::visitChildren(JSCell* cell, SlotVisitor& visitor)
{
JSSymbolTableObject* thisObject = jsCast<JSSymbolTableObject*>(cell);
ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info);
COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren());
Base::visitChildren(thisObject, visitor);
visitor.append(&thisObject->m_symbolTable);
}
bool JSSymbolTableObject::deleteProperty(JSCell* cell, ExecState* exec, PropertyName propertyName)
{
JSSymbolTableObject* thisObject = jsCast<JSSymbolTableObject*>(cell);
if (thisObject->symbolTable()->contains(propertyName.publicName()))
return false;
return JSObject::deleteProperty(thisObject, exec, propertyName);
}
void JSSymbolTableObject::getOwnNonIndexPropertyNames(JSObject* object, ExecState* exec, PropertyNameArray& propertyNames, EnumerationMode mode)
{
JSSymbolTableObject* thisObject = jsCast<JSSymbolTableObject*>(object);
SymbolTable::const_iterator end = thisObject->symbolTable()->end();
for (SymbolTable::const_iterator it = thisObject->symbolTable()->begin(); it != end; ++it) {
if (!(it->value.getAttributes() & DontEnum) || (mode == IncludeDontEnumProperties))
propertyNames.add(Identifier(exec, it->key.get()));
}
JSObject::getOwnNonIndexPropertyNames(thisObject, exec, propertyNames, mode);
}
void JSSymbolTableObject::putDirectVirtual(JSObject*, ExecState*, PropertyName, JSValue, unsigned)
{
RELEASE_ASSERT_NOT_REACHED();
}
}