summaryrefslogtreecommitdiffstats
path: root/WebCore/bridge/jsc/BridgeJSC.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/bridge/jsc/BridgeJSC.cpp')
-rw-r--r--WebCore/bridge/jsc/BridgeJSC.cpp27
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