diff options
Diffstat (limited to 'WebCore/bridge/jsc/BridgeJSC.cpp')
-rw-r--r-- | WebCore/bridge/jsc/BridgeJSC.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/WebCore/bridge/jsc/BridgeJSC.cpp b/WebCore/bridge/jsc/BridgeJSC.cpp index 9b3af25..49ffb2a 100644 --- a/WebCore/bridge/jsc/BridgeJSC.cpp +++ b/WebCore/bridge/jsc/BridgeJSC.cpp @@ -51,7 +51,6 @@ Array::~Array() Instance::Instance(PassRefPtr<RootObject> rootObject) : m_rootObject(rootObject) - , m_runtimeObject(0) { ASSERT(m_rootObject); } @@ -59,6 +58,7 @@ Instance::Instance(PassRefPtr<RootObject> rootObject) Instance::~Instance() { ASSERT(!m_runtimeObject); + ASSERT(!m_runtimeObject.hasDeadObject()); } static KJSDidExecuteFunctionPtr s_didExecuteFunction; @@ -87,12 +87,14 @@ JSObject* Instance::createRuntimeObject(ExecState* exec) { ASSERT(m_rootObject); ASSERT(m_rootObject->isValid()); - if (m_runtimeObject) - return m_runtimeObject; + if (RuntimeObject* existingObject = m_runtimeObject.get()) + return existingObject; + JSLock lock(SilenceAssertionsOnly); - m_runtimeObject = newRuntimeObject(exec); - m_rootObject->addRuntimeObject(m_runtimeObject); - return m_runtimeObject; + RuntimeObject* newObject = newRuntimeObject(exec); + m_runtimeObject = newObject; + m_rootObject->addRuntimeObject(newObject); + return newObject; } RuntimeObject* Instance::newRuntimeObject(ExecState* exec) @@ -101,19 +103,18 @@ RuntimeObject* Instance::newRuntimeObject(ExecState* exec) return new (exec)RuntimeObject(exec, exec->lexicalGlobalObject(), this); } -void Instance::willDestroyRuntimeObject() +void Instance::willDestroyRuntimeObject(RuntimeObject* object) { ASSERT(m_rootObject); ASSERT(m_rootObject->isValid()); - ASSERT(m_runtimeObject); - m_rootObject->removeRuntimeObject(m_runtimeObject); - m_runtimeObject = 0; + m_rootObject->removeRuntimeObject(object); + m_runtimeObject.clear(object); } -void Instance::willInvalidateRuntimeObject() +void Instance::willInvalidateRuntimeObject(RuntimeObject* object) { - ASSERT(m_runtimeObject); - m_runtimeObject = 0; + ASSERT(object); + m_runtimeObject.clear(object); } RootObject* Instance::rootObject() const |