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

Reply via email to