Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4bd1aab3f384604aa1cd8152c675fe5ca4c90bcc
https://github.com/WebKit/WebKit/commit/4bd1aab3f384604aa1cd8152c675fe5ca4c90bcc
Author: Menlodorian <[email protected]>
Date: 2026-03-30 (Mon, 30 Mar 2026)
Changed paths:
M Source/JavaScriptCore/API/APICast.h
M Source/JavaScriptCore/API/JSValue.mm
R Source/JavaScriptCore/API/MarkedJSValueRefArray.cpp
R Source/JavaScriptCore/API/MarkedJSValueRefArray.h
M Source/JavaScriptCore/API/PASReportCrashPrivate.cpp
M Source/JavaScriptCore/API/tests/testapi.cpp
M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
M Source/JavaScriptCore/Sources.txt
M Source/JavaScriptCore/heap/Heap.cpp
M Source/JavaScriptCore/heap/Heap.h
M Source/JavaScriptCore/heap/RootMarkReason.h
M Source/JavaScriptCore/runtime/ArgList.h
M Source/JavaScriptCore/runtime/ArrayPrototype.cpp
M Source/JavaScriptCore/runtime/MarkedVector.cpp
M Source/JavaScriptCore/runtime/MarkedVector.h
M Source/JavaScriptCore/runtime/StringPrototypeInlines.h
M Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h
M Tools/TestWebKitAPI/CMakeLists.txt
M Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj
A Tools/TestWebKitAPI/Tests/JavaScriptCore/MarkedVector.cpp
Log Message:
-----------
Enhance MarkedVector's interface to more closely match Vector's.
https://bugs.webkit.org/show_bug.cgi?id=310849
rdar://173454030
Reviewed by Keith Miller.
1. Enhanced MarkedVector and MarkedVectorBase to be able to store pointer
values vs
EncodedJSValue values. This only makes a difference on 32-bit ports where
sizeof(pointer) != sizeof(JSValue). For 64-bit ports, this is basically a
no-op.
For 32-bit ports, MarkedVectorBase tracks a m_storageType field, which it
uses
at runtime to determine whether the element is a 32-bit pointer, or a 64-bit
JSValue.
2. Added a move semantics constructor. This allows MarkedVector to testapi's
APIVector, which retaining its nice ergonomics for generating a test vector.
3. Added new APIs to bring MarkedVector closer to being a drop-in Vector
replacemrent:
span(), mutableSpan(), operator[], fillWith(), data<U>() template, and an
initial-capacity constructor.
4. Enhance at() so that it can support the RecordOverflow overflow handler.
This
means that at() may return a reference to an element that is out of bounds.
For this purpose, we introduce the
MarkedVectorBase::m_storageForOutOfBoundsAccess
static field that we'll use for the backing store of the returned reference
should
at() be called with an OOB index.
5. Deleted MarkedJSValueRefArray which is now redundant.
6. Update clients of MarkedVector to work with this enhanced MarkedVector.
7. Also added versions of toJS() (for 32-bit) and toJSForGC() that does not
require
a JSGlobalObject*. The globalObject argument is unused anyway. This allows
MarkedVector of JSValueRef (and other JSC C API types) to lazily register
itself
(teh MarkedVector) with the MarkSet.
Eventually, we should remove the JSGlobalObject* argument everywhere after we
carefully evaluate for non-obvious side effects and make sure it is OK to do
so.
For now, adding this shim function will serve our needs. Note: the 64-bit
version
of the shim for toJS() already exists.
Test added: Tools/TestWebKitAPI/Tests/JavaScriptCore/MarkedVector.cpp
* Source/JavaScriptCore/API/APICast.h:
(toJS):
(toJSForGC):
* Source/JavaScriptCore/API/JSValue.mm:
(-[JSValue callWithArguments:]):
(-[JSValue constructWithArguments:]):
(-[JSValue invokeMethod:withArguments:]):
* Source/JavaScriptCore/API/MarkedJSValueRefArray.cpp: Removed.
* Source/JavaScriptCore/API/MarkedJSValueRefArray.h: Removed.
* Source/JavaScriptCore/API/PASReportCrashPrivate.cpp:
* Source/JavaScriptCore/API/tests/testapi.cpp:
(TestAPI::interestingObjects):
(TestAPI::interestingKeys):
(TestAPI::markedJSValueArrayAndGC):
(APIVector::APIVector): Deleted.
(APIVector::~APIVector): Deleted.
(APIVector::append): Deleted.
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/Sources.txt:
* Source/JavaScriptCore/heap/Heap.cpp:
(JSC::Heap::addCoreConstraints):
(JSC::Heap::addMarkedJSValueRefArray): Deleted.
* Source/JavaScriptCore/heap/Heap.h:
* Source/JavaScriptCore/heap/RootMarkReason.h:
* Source/JavaScriptCore/runtime/ArgList.h:
(JSC::ArgList::ArgList):
* Source/JavaScriptCore/runtime/ArrayPrototype.cpp:
* Source/JavaScriptCore/runtime/MarkedVector.cpp:
(JSC::MarkedVectorBase::toCell):
(JSC::MarkedVectorBase::toCellForGC):
(JSC::MarkedVectorBase::addMarkSet):
(JSC::MarkedVectorBase::markLists):
(JSC::MarkedVectorBase::slowEnsureCapacityAndCrashOnOverflow):
(JSC::MarkedVectorBase::expandCapacity):
(JSC::MarkedVectorBase::slowAppend):
* Source/JavaScriptCore/runtime/MarkedVector.h:
(JSC::MarkedVectorHelper::isJSCAPIValueType):
(JSC::MarkedVectorHelper::isJSValueConvertible):
(JSC::MarkedVectorHelper::requires):
(JSC::MarkedVector::MarkedVector):
(JSC::MarkedVector::operator=):
(JSC::MarkedVector::data const):
(JSC::MarkedVector::data):
(JSC::MarkedVector::begin):
(JSC::MarkedVector::end):
(JSC::MarkedVector::append):
(JSC::MarkedVector::slowAppend):
(JSC::MarkedVector::last const):
(JSC::MarkedVector::takeLast):
(JSC::MarkedVector::ensureCapacity):
(JSC::MarkedVector::fill):
(JSC::MarkedVector::fillWith):
(JSC::MarkedVector::clearBuffer):
(JSC::MarkedVector::uninitializedValue):
(JSC::MarkedArgumentBufferWithSize::data const):
(JSC::MarkedArgumentBufferWithSize::data):
(JSC::MarkedVector::at const): Deleted.
(JSC::MarkedVector::set): Deleted.
* Source/JavaScriptCore/runtime/StringPrototypeInlines.h:
(JSC::replaceAllWithCacheUsingRegExpSearchThreeArguments):
* Source/WebCore/Modules/webaudio/AudioWorkletProcessor.h:
* Tools/TestWebKitAPI/CMakeLists.txt:
* Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
* Tools/TestWebKitAPI/Tests/JavaScriptCore/MarkedVector.cpp: Added.
(TestWebKitAPI::MarkedVectorTestHelper<JSValue>::make):
(TestWebKitAPI::MarkedVectorTestHelper<JSValue>::verify):
(TestWebKitAPI::MarkedVectorTestHelper<JSValue>::populateForGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSValue>::createNoise):
(TestWebKitAPI::MarkedVectorTestHelper<JSValue>::verifyAfterGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSC::JSObject::make):
(TestWebKitAPI::MarkedVectorTestHelper<JSC::JSObject::verify):
(TestWebKitAPI::MarkedVectorTestHelper<JSC::JSObject::populateForGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSC::JSObject::createNoise):
(TestWebKitAPI::MarkedVectorTestHelper<JSC::JSObject::verifyAfterGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSValueRef>::make):
(TestWebKitAPI::MarkedVectorTestHelper<JSValueRef>::verify):
(TestWebKitAPI::MarkedVectorTestHelper<JSValueRef>::populateForGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSValueRef>::createNoise):
(TestWebKitAPI::MarkedVectorTestHelper<JSValueRef>::verifyAfterGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSObjectRef>::make):
(TestWebKitAPI::MarkedVectorTestHelper<JSObjectRef>::verify):
(TestWebKitAPI::MarkedVectorTestHelper<JSObjectRef>::populateForGC):
(TestWebKitAPI::MarkedVectorTestHelper<JSObjectRef>::createNoise):
(TestWebKitAPI::MarkedVectorTestHelper<JSObjectRef>::verifyAfterGC):
(TestWebKitAPI::testDefaultConstructor):
(TestWebKitAPI::testInitialCapacityConstructor):
(TestWebKitAPI::testAppend):
(TestWebKitAPI::testAppendBeyondInlineCapacity):
(TestWebKitAPI::testLast):
(TestWebKitAPI::testTakeLast):
(TestWebKitAPI::testRemoveLast):
(TestWebKitAPI::testBeginEnd):
(TestWebKitAPI::testAutoIteration):
(TestWebKitAPI::testSpan):
(TestWebKitAPI::testClear):
(TestWebKitAPI::testClearMallocBuffer):
(TestWebKitAPI::testMoveConstructor):
(TestWebKitAPI::testMoveConstructorMallocBuffer):
(TestWebKitAPI::testMoveAssignment):
(TestWebKitAPI::testMoveAssignmentMallocBuffer):
(TestWebKitAPI::testGCLivenessInlineBuffer):
(TestWebKitAPI::testGCLivenessMallocBuffer):
(TestWebKitAPI::testFillWith):
(TestWebKitAPI::testFillWithMallocBuffer):
(TestWebKitAPI::testFill):
(TestWebKitAPI::testFillMallocBuffer):
(TestWebKitAPI::testAppendWithCrashOnOverflow):
(TestWebKitAPI::TEST(JavaScriptCore_MarkedVector,
ArgumentBufferAppendAndAccess)):
(TestWebKitAPI::TEST(JavaScriptCore_MarkedVector,
ArgumentBufferOOBReadRecordsOverflow)):
(TestWebKitAPI::TEST(JavaScriptCore_MarkedVector,
ArgumentBufferOOBWriteRecordsOverflow)):
(TestWebKitAPI::TEST(JavaScriptCore_MarkedVector, ArgumentBufferData)):
Canonical link: https://commits.webkit.org/310223@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications