Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (163575 => 163576)
--- trunk/Source/_javascript_Core/ChangeLog 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/ChangeLog 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1,5 +1,41 @@
2014-02-06 Mark Hahnenberg <[email protected]>
+ Heap::writeBarrier shouldn't be static
+ https://bugs.webkit.org/show_bug.cgi?id=127807
+
+ Reviewed by Geoffrey Garen.
+
+ Currently it looks up the Heap in which to fire the write barrier by using
+ the cell passed to it. Almost every call site already has a reference to the
+ VM or the Heap itself. It seems wasteful to look it up all over again.
+
+ * GNUmakefile.list.am:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj:
+ * _javascript_Core.vcxproj/_javascript_Core.vcxproj.filters:
+ * _javascript_Core.xcodeproj/project.pbxproj:
+ * heap/CopyWriteBarrier.h:
+ (JSC::CopyWriteBarrier::set):
+ * heap/Heap.cpp:
+ (JSC::Heap::writeBarrier):
+ * heap/Heap.h:
+ (JSC::Heap::writeBarrier):
+ * jit/JITOperations.cpp:
+ * jit/JITWriteBarrier.h:
+ (JSC::JITWriteBarrierBase::set):
+ * llint/LLIntSlowPaths.cpp:
+ (JSC::LLInt::llint_write_barrier_slow):
+ * runtime/Arguments.h:
+ * runtime/JSWeakMap.cpp:
+ * runtime/MapData.cpp:
+ (JSC::MapData::ensureSpaceForAppend):
+ * runtime/PropertyTable.cpp:
+ (JSC::PropertyTable::PropertyTable):
+ * runtime/Structure.h:
+ * runtime/WriteBarrier.h:
+ * runtime/WriteBarrierInlines.h: Added.
+
+2014-02-06 Mark Hahnenberg <[email protected]>
+
JSManagedValue should automatically call removeManagedReference:withOwner: upon dealloc
https://bugs.webkit.org/show_bug.cgi?id=124053
Modified: trunk/Source/_javascript_Core/GNUmakefile.list.am (163575 => 163576)
--- trunk/Source/_javascript_Core/GNUmakefile.list.am 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/GNUmakefile.list.am 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1236,6 +1236,7 @@
Source/_javascript_Core/runtime/WeakMapPrototype.h \
Source/_javascript_Core/runtime/WeakRandom.h \
Source/_javascript_Core/runtime/WriteBarrier.h \
+ Source/_javascript_Core/runtime/WriteBarrierInlines.h \
Source/_javascript_Core/tools/CodeProfile.cpp \
Source/_javascript_Core/tools/CodeProfile.h \
Source/_javascript_Core/tools/CodeProfiling.cpp \
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj (163575 => 163576)
--- trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1403,6 +1403,7 @@
<ClInclude Include="..\runtime\WeakMapPrototype.h" />
<ClInclude Include="..\runtime\WeakRandom.h" />
<ClInclude Include="..\runtime\WriteBarrier.h" />
+ <ClInclude Include="..\runtime\WriteBarrierInlines.h" />
<ClInclude Include="..\tools\CodeProfile.h" />
<ClInclude Include="..\tools\CodeProfiling.h" />
<ClInclude Include="..\tools\ProfileTreeNode.h" />
Modified: trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters (163575 => 163576)
--- trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcxproj/_javascript_Core.vcxproj.filters 2014-02-07 00:42:21 UTC (rev 163576)
@@ -2438,6 +2438,9 @@
<ClInclude Include="..\runtime\WriteBarrier.h">
<Filter>runtime</Filter>
</ClInclude>
+ <ClInclude Include="..\runtime\WriteBarrierInlines.h">
+ <Filter>runtime</Filter>
+ </ClInclude>
<ClInclude Include="..\tools\CodeProfile.h">
<Filter>tools</Filter>
</ClInclude>
Modified: trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj (163575 => 163576)
--- trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/_javascript_Core.xcodeproj/project.pbxproj 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1351,6 +1351,7 @@
C2981FDD17BAFF4400A3BC98 /* DFGDesiredWriteBarriers.h in Headers */ = {isa = PBXBuildFile; fileRef = C2981FDB17BAFF4400A3BC98 /* DFGDesiredWriteBarriers.h */; settings = {ATTRIBUTES = (Private, ); }; };
C29ECB031804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.mm in Sources */ = {isa = PBXBuildFile; fileRef = C29ECB011804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.mm */; };
C2A7F688160432D400F76B98 /* JSDestructibleObject.h in Headers */ = {isa = PBXBuildFile; fileRef = C2A7F687160432D400F76B98 /* JSDestructibleObject.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ C2B6D75318A33793004A9301 /* WriteBarrierInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
C2B916C214DA014E00CBAC86 /* MarkedAllocator.h in Headers */ = {isa = PBXBuildFile; fileRef = C2B916C114DA014E00CBAC86 /* MarkedAllocator.h */; settings = {ATTRIBUTES = (Private, ); }; };
C2B916C514DA040C00CBAC86 /* MarkedAllocator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2B916C414DA040C00CBAC86 /* MarkedAllocator.cpp */; };
C2C0F7CD17BBFC5B00464FE4 /* DFGDesiredTransitions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C2C0F7CB17BBFC5B00464FE4 /* DFGDesiredTransitions.cpp */; };
@@ -2801,6 +2802,7 @@
C29ECB011804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = CurrentThisInsideBlockGetterTest.mm; path = API/tests/CurrentThisInsideBlockGetterTest.mm; sourceTree = "<group>"; };
C29ECB021804D0ED00D2CBB4 /* CurrentThisInsideBlockGetterTest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CurrentThisInsideBlockGetterTest.h; path = API/tests/CurrentThisInsideBlockGetterTest.h; sourceTree = "<group>"; };
C2A7F687160432D400F76B98 /* JSDestructibleObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDestructibleObject.h; sourceTree = "<group>"; };
+ C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WriteBarrierInlines.h; sourceTree = "<group>"; };
C2B916C114DA014E00CBAC86 /* MarkedAllocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkedAllocator.h; sourceTree = "<group>"; };
C2B916C414DA040C00CBAC86 /* MarkedAllocator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MarkedAllocator.cpp; sourceTree = "<group>"; };
C2C0F7CB17BBFC5B00464FE4 /* DFGDesiredTransitions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DFGDesiredTransitions.cpp; path = dfg/DFGDesiredTransitions.cpp; sourceTree = "<group>"; };
@@ -3661,6 +3663,7 @@
7EF6E0BB0EB7A1EC0079AFAF /* runtime */ = {
isa = PBXGroup;
children = (
+ C2B6D75218A33793004A9301 /* WriteBarrierInlines.h */,
BCF605110E203EF800B9A64D /* ArgList.cpp */,
BCF605120E203EF800B9A64D /* ArgList.h */,
BC257DE50E1F51C50016B6C9 /* Arguments.cpp */,
@@ -4695,6 +4698,7 @@
65C0285D1717966800351E35 /* ARMv7DOpcode.h in Headers */,
2A68295B1875F80500B6C3E2 /* CopyWriteBarrier.h in Headers */,
2A4EC90C1860D6C20094F782 /* WriteBarrierBuffer.h in Headers */,
+ C2B6D75318A33793004A9301 /* WriteBarrierInlines.h in Headers */,
FE5932A8183C5A2600A1ECCC /* VMEntryScope.h in Headers */,
A532439318569709002ED692 /* CodeGeneratorInspectorStrings.py in Headers */,
A532439218569709002ED692 /* CodeGeneratorInspector.py in Headers */,
Modified: trunk/Source/_javascript_Core/heap/CopyWriteBarrier.h (163575 => 163576)
--- trunk/Source/_javascript_Core/heap/CopyWriteBarrier.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/heap/CopyWriteBarrier.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -68,10 +68,10 @@
return get();
}
- void set(VM&, const JSCell* owner, T* value)
+ void set(VM& vm, const JSCell* owner, T* value)
{
this->m_value = value;
- Heap::writeBarrier(owner);
+ vm.heap.writeBarrier(owner);
}
void setWithoutWriteBarrier(T* value)
Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/heap/Heap.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1087,8 +1087,7 @@
ASSERT_GC_OBJECT_LOOKS_VALID(const_cast<JSCell*>(from));
if (!from || !isMarked(from))
return;
- Heap* heap = Heap::heap(from);
- heap->addToRememberedSet(from);
+ addToRememberedSet(from);
#else
UNUSED_PARAM(from);
#endif
Modified: trunk/Source/_javascript_Core/heap/Heap.h (163575 => 163576)
--- trunk/Source/_javascript_Core/heap/Heap.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/heap/Heap.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -102,9 +102,9 @@
return MarkedBlock::blockFor(cell)->isRemembered(cell);
}
static bool isWriteBarrierEnabled();
- JS_EXPORT_PRIVATE static void writeBarrier(const JSCell*);
- static void writeBarrier(const JSCell*, JSValue);
- static void writeBarrier(const JSCell*, JSCell*);
+ JS_EXPORT_PRIVATE void writeBarrier(const JSCell*);
+ void writeBarrier(const JSCell*, JSValue);
+ void writeBarrier(const JSCell*, JSCell*);
WriteBarrierBuffer& writeBarrierBuffer() { return m_writeBarrierBuffer; }
void flushWriteBarrierBuffer(JSCell*);
@@ -401,7 +401,7 @@
return;
if (!to || isMarked(to))
return;
- Heap::heap(from)->addToRememberedSet(from);
+ addToRememberedSet(from);
}
inline void Heap::writeBarrier(const JSCell* from, JSValue to)
Modified: trunk/Source/_javascript_Core/jit/JITOperations.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/jit/JITOperations.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/jit/JITOperations.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1740,7 +1740,7 @@
{
VM* vm = &exec->vm();
NativeCallFrameTracer tracer(vm, exec);
- exec->heap()->writeBarrier(cell);
+ vm->heap.writeBarrier(cell);
}
// NB: We don't include the value as part of the barrier because the write barrier elision
@@ -1750,7 +1750,7 @@
{
VM* vm = &exec->vm();
NativeCallFrameTracer tracer(vm, exec);
- Heap::writeBarrier(cell);
+ vm->heap.writeBarrier(cell);
}
void JIT_OPERATION operationInitGlobalConst(ExecState* exec, Instruction* pc)
Modified: trunk/Source/_javascript_Core/jit/JITWriteBarrier.h (163575 => 163576)
--- trunk/Source/_javascript_Core/jit/JITWriteBarrier.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/jit/JITWriteBarrier.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -77,9 +77,9 @@
{
}
- void set(VM&, CodeLocationDataLabelPtr location, JSCell* owner, JSCell* value)
+ void set(VM& vm, CodeLocationDataLabelPtr location, JSCell* owner, JSCell* value)
{
- Heap::writeBarrier(owner, value);
+ vm.heap.writeBarrier(owner, value);
m_location = location;
ASSERT(((!!m_location) && m_location.executableAddress() != JITWriteBarrierFlag) || (location.executableAddress() == m_location.executableAddress()));
MacroAssembler::repatchPointer(m_location, value);
Modified: trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/llint/LLIntSlowPaths.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1436,9 +1436,10 @@
}
#endif
-extern "C" void llint_write_barrier_slow(ExecState*, JSCell* cell)
+extern "C" void llint_write_barrier_slow(ExecState* exec, JSCell* cell)
{
- Heap::writeBarrier(cell);
+ VM& vm = exec->vm();
+ vm.heap.writeBarrier(cell);
}
} } // namespace JSC::LLInt
Modified: trunk/Source/_javascript_Core/runtime/Arguments.h (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/Arguments.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/Arguments.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -31,6 +31,7 @@
#include "JSGlobalObject.h"
#include "Interpreter.h"
#include "ObjectConstructor.h"
+#include "WriteBarrierInlines.h"
#include <wtf/StdLibExtras.h>
namespace JSC {
Modified: trunk/Source/_javascript_Core/runtime/JSWeakMap.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/JSWeakMap.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/JSWeakMap.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -29,6 +29,7 @@
#include "JSCJSValueInlines.h"
#include "SlotVisitorInlines.h"
#include "WeakMapData.h"
+#include "WriteBarrierInlines.h"
namespace JSC {
Modified: trunk/Source/_javascript_Core/runtime/MapData.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/MapData.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/MapData.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -208,7 +208,7 @@
replaceAndPackBackingStore(newEntries, requiredSize);
else
replaceBackingStore(newEntries, requiredSize);
- Heap::writeBarrier(this);
+ callFrame->heap()->writeBarrier(this);
return true;
}
Modified: trunk/Source/_javascript_Core/runtime/PropertyTable.cpp (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/PropertyTable.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/PropertyTable.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -84,7 +84,7 @@
iterator end = this->end();
for (iterator iter = begin(); iter != end; ++iter) {
iter->key->ref();
- Heap::writeBarrier(owner, iter->specificValue.get());
+ vm.heap.writeBarrier(owner, iter->specificValue.get());
}
// Copy the m_deletedOffsets vector.
@@ -109,7 +109,7 @@
ASSERT(canInsert());
reinsert(*iter);
iter->key->ref();
- Heap::writeBarrier(owner, iter->specificValue.get());
+ vm.heap.writeBarrier(owner, iter->specificValue.get());
}
// Copy the m_deletedOffsets vector.
Modified: trunk/Source/_javascript_Core/runtime/Structure.h (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/Structure.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/Structure.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -42,6 +42,7 @@
#include "JSTypeInfo.h"
#include "Watchpoint.h"
#include "Weak.h"
+#include "WriteBarrierInlines.h"
#include <wtf/CompilationThread.h>
#include <wtf/PassRefPtr.h>
#include <wtf/PrintStream.h>
Modified: trunk/Source/_javascript_Core/runtime/WriteBarrier.h (163575 => 163576)
--- trunk/Source/_javascript_Core/runtime/WriteBarrier.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/_javascript_Core/runtime/WriteBarrier.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -71,13 +71,7 @@
// We have a separate base class with no constructors for use in Unions.
template <typename T> class WriteBarrierBase {
public:
- void set(VM& vm, const JSCell* owner, T* value)
- {
- ASSERT(value);
- ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
- validateCell(value);
- setEarlyValue(vm, owner, value);
- }
+ void set(VM&, const JSCell* owner, T* value);
// This is meant to be used like operator=, but is called copyFrom instead, in
// order to kindly inform the C++ compiler that its advice is not appreciated.
@@ -86,20 +80,11 @@
m_cell = other.m_cell;
}
- void setMayBeNull(VM& vm, const JSCell* owner, T* value)
- {
- if (value)
- validateCell(value);
- setEarlyValue(vm, owner, value);
- }
+ void setMayBeNull(VM&, const JSCell* owner, T* value);
// Should only be used by JSCell during early initialisation
// when some basic types aren't yet completely instantiated
- void setEarlyValue(VM&, const JSCell* owner, T* value)
- {
- this->m_cell = reinterpret_cast<JSCell*>(value);
- Heap::writeBarrier(owner, this->m_cell);
- }
+ void setEarlyValue(VM&, const JSCell* owner, T* value);
T* get() const
{
@@ -151,13 +136,7 @@
template <> class WriteBarrierBase<Unknown> {
public:
- void set(VM&, const JSCell* owner, JSValue value)
- {
- ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
- m_value = JSValue::encode(value);
- Heap::writeBarrier(owner, value);
- }
-
+ void set(VM&, const JSCell* owner, JSValue);
void setWithoutWriteBarrier(JSValue value)
{
m_value = JSValue::encode(value);
Copied: trunk/Source/_javascript_Core/runtime/WriteBarrierInlines.h (from rev 163575, trunk/Source/_javascript_Core/heap/CopyWriteBarrier.h) (0 => 163576)
--- trunk/Source/_javascript_Core/runtime/WriteBarrierInlines.h (rev 0)
+++ trunk/Source/_javascript_Core/runtime/WriteBarrierInlines.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2014 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WriteBarrierInlines_h
+#define WriteBarrierInlines_h
+
+#include "VM.h"
+#include "WriteBarrier.h"
+
+namespace JSC {
+
+template <typename T>
+inline void WriteBarrierBase<T>::set(VM& vm, const JSCell* owner, T* value)
+{
+ ASSERT(value);
+ ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
+ validateCell(value);
+ setEarlyValue(vm, owner, value);
+}
+
+template <typename T>
+inline void WriteBarrierBase<T>::setMayBeNull(VM& vm, const JSCell* owner, T* value)
+{
+ if (value)
+ validateCell(value);
+ setEarlyValue(vm, owner, value);
+}
+
+template <typename T>
+inline void WriteBarrierBase<T>::setEarlyValue(VM& vm, const JSCell* owner, T* value)
+{
+ this->m_cell = reinterpret_cast<JSCell*>(value);
+ vm.heap.writeBarrier(owner, this->m_cell);
+}
+
+inline void WriteBarrierBase<Unknown>::set(VM& vm, const JSCell* owner, JSValue value)
+{
+ ASSERT(!Options::enableConcurrentJIT() || !isCompilationThread());
+ m_value = JSValue::encode(value);
+ vm.heap.writeBarrier(owner, value);
+}
+
+} // namespace JSC
+
+#endif // WriteBarrierInlines_h
Modified: trunk/Source/WebCore/ChangeLog (163575 => 163576)
--- trunk/Source/WebCore/ChangeLog 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/WebCore/ChangeLog 2014-02-07 00:42:21 UTC (rev 163576)
@@ -1,3 +1,19 @@
+2014-02-06 Mark Hahnenberg <[email protected]>
+
+ Heap::writeBarrier shouldn't be static
+ https://bugs.webkit.org/show_bug.cgi?id=127807
+
+ Reviewed by Geoffrey Garen.
+
+ Currently it looks up the Heap in which to fire the write barrier by using
+ the cell passed to it. Almost every call site already has a reference to the
+ VM or the Heap itself. It seems wasteful to look it up all over again.
+
+ * bindings/js/JSEventListener.cpp:
+ (WebCore::JSEventListener::JSEventListener):
+ * bindings/js/JSEventListener.h:
+ (WebCore::JSEventListener::jsFunction):
+
2014-02-06 Jaehun Lim <[email protected]>
Unreviewed, fix build error on 64bit debug build
Modified: trunk/Source/WebCore/bindings/js/JSEventListener.cpp (163575 => 163576)
--- trunk/Source/WebCore/bindings/js/JSEventListener.cpp 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/WebCore/bindings/js/JSEventListener.cpp 2014-02-07 00:42:21 UTC (rev 163576)
@@ -47,7 +47,7 @@
, m_isolatedWorld(&isolatedWorld)
{
if (wrapper) {
- JSC::Heap::writeBarrier(wrapper, function);
+ JSC::Heap::heap(wrapper)->writeBarrier(wrapper, function);
m_jsFunction = JSC::Weak<JSC::JSObject>(function);
} else
ASSERT(!function);
Modified: trunk/Source/WebCore/bindings/js/JSEventListener.h (163575 => 163576)
--- trunk/Source/WebCore/bindings/js/JSEventListener.h 2014-02-07 00:33:37 UTC (rev 163575)
+++ trunk/Source/WebCore/bindings/js/JSEventListener.h 2014-02-07 00:42:21 UTC (rev 163576)
@@ -84,7 +84,9 @@
if (!m_jsFunction) {
JSC::JSObject* function = initializeJSFunction(scriptExecutionContext);
- JSC::Heap::writeBarrier(m_wrapper.get(), function);
+ JSC::JSObject* wrapper = m_wrapper.get();
+ if (wrapper)
+ JSC::Heap::heap(wrapper)->writeBarrier(wrapper, function);
m_jsFunction = JSC::Weak<JSC::JSObject>(function);
}