X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/14957cd040308e3eeec43d26bae5d76da13fcd85..6fe7ccc865dc7d7541b93c5bcaf6368d2c98a174:/runtime/JSStaticScopeObject.cpp?ds=inline diff --git a/runtime/JSStaticScopeObject.cpp b/runtime/JSStaticScopeObject.cpp index 5206510..f8942b5 100644 --- a/runtime/JSStaticScopeObject.cpp +++ b/runtime/JSStaticScopeObject.cpp @@ -32,27 +32,31 @@ namespace JSC { ASSERT_CLASS_FITS_IN_CELL(JSStaticScopeObject); -void JSStaticScopeObject::visitChildren(SlotVisitor& visitor) +const ClassInfo JSStaticScopeObject::s_info = { "Object", &Base::s_info, 0, 0, CREATE_METHOD_TABLE(JSStaticScopeObject) }; + +void JSStaticScopeObject::destroy(JSCell* cell) { - ASSERT_GC_OBJECT_INHERITS(this, &s_info); - COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); - ASSERT(structure()->typeInfo().overridesVisitChildren()); - JSVariableObject::visitChildren(visitor); - visitor.append(&m_registerStore); + jsCast(cell)->JSStaticScopeObject::~JSStaticScopeObject(); } -JSObject* JSStaticScopeObject::toThisObject(ExecState* exec) const +void JSStaticScopeObject::visitChildren(JSCell* cell, SlotVisitor& visitor) { - return exec->globalThisValue(); + JSStaticScopeObject* thisObject = jsCast(cell); + ASSERT_GC_OBJECT_INHERITS(thisObject, &s_info); + COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag); + ASSERT(thisObject->structure()->typeInfo().overridesVisitChildren()); + JSVariableObject::visitChildren(thisObject, visitor); + visitor.append(&thisObject->m_registerStore); } -JSValue JSStaticScopeObject::toStrictThisObject(ExecState*) const +JSObject* JSStaticScopeObject::toThisObject(JSCell*, ExecState* exec) { - return jsNull(); + return exec->globalThisValue(); } -void JSStaticScopeObject::put(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) +void JSStaticScopeObject::put(JSCell* cell, ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot) { + JSStaticScopeObject* thisObject = jsCast(cell); if (slot.isStrictMode()) { // Double lookup in strict mode, but this only occurs when // a) indirectly writing to an exception slot @@ -62,34 +66,30 @@ void JSStaticScopeObject::put(ExecState* exec, const Identifier& propertyName, J // a pointer compare. PropertySlot slot; bool isWritable = true; - symbolTableGet(propertyName, slot, isWritable); + thisObject->symbolTableGet(propertyName, slot, isWritable); if (!isWritable) { throwError(exec, createTypeError(exec, StrictModeReadonlyPropertyWriteError)); return; } } - if (symbolTablePut(exec->globalData(), propertyName, value)) + if (thisObject->symbolTablePut(exec, propertyName, value, slot.isStrictMode())) return; ASSERT_NOT_REACHED(); } -void JSStaticScopeObject::putWithAttributes(ExecState* exec, const Identifier& propertyName, JSValue value, unsigned attributes) +void JSStaticScopeObject::putDirectVirtual(JSObject* object, ExecState* exec, const Identifier& propertyName, JSValue value, unsigned attributes) { - if (symbolTablePutWithAttributes(exec->globalData(), propertyName, value, attributes)) + JSStaticScopeObject* thisObject = jsCast(object); + if (thisObject->symbolTablePutWithAttributes(exec->globalData(), propertyName, value, attributes)) return; ASSERT_NOT_REACHED(); } -bool JSStaticScopeObject::isDynamicScope(bool&) const -{ - return false; -} - -bool JSStaticScopeObject::getOwnPropertySlot(ExecState*, const Identifier& propertyName, PropertySlot& slot) +bool JSStaticScopeObject::getOwnPropertySlot(JSCell* cell, ExecState*, const Identifier& propertyName, PropertySlot& slot) { - return symbolTableGet(propertyName, slot); + return jsCast(cell)->symbolTableGet(propertyName, slot); } }