2021-03-18  Saam Barati  <sbarati@apple.com>

        JS->Wasm IC must save the tag registers if it uses them
        https://bugs.webkit.org/show_bug.cgi?id=223491
        <rdar://66445108>

        Reviewed by Yusuke Suzuki.

        It turns out, that when you use a callee save register, you should save it.

        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::usesTagRegisters const):
        (JSC::WebAssemblyFunction::calleeSaves const):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        (JSC::WebAssemblyFunction::useTagRegisters const): Deleted.
        * wasm/js/WebAssemblyFunction.h:

2021-03-17  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Error#cause should apply to WebAssembly error constructors too
        https://bugs.webkit.org/show_bug.cgi?id=223404

        Reviewed by Yusuke Suzuki.

        Per https://www.w3.org/TR/wasm-js-api-1/#error-objects:
        > The constructor and properties of WebAssembly errors is as specified for NativeError.

        So Error#cause should "just work" for WebAssembly.{CompileError, LinkError, RuntimeError} too.

        In the process:
         - Eliminate JSWebAssemblyCompileError and kin since they add no functionality on top of ErrorInstance.
         - Add an on-by-default feature flag (belated from the last patch).

        * API/JSObjectRef.cpp:
        (JSObjectMakeError):
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        (JSC::NativeErrorConstructor<errorType>::callImpl):
        * runtime/OptionsList.h:
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::createJSWebAssemblyCompileError):
        (JSC::JSWebAssemblyCompileError::create): Deleted.
        (JSC::JSWebAssemblyCompileError::JSWebAssemblyCompileError): Deleted.
        * wasm/js/JSWebAssemblyCompileError.h:
        (): Deleted.
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finalizeCreation):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::createJSWebAssemblyLinkError):
        (JSC::JSWebAssemblyLinkError::create): Deleted.
        (JSC::JSWebAssemblyLinkError::JSWebAssemblyLinkError): Deleted.
        * wasm/js/JSWebAssemblyLinkError.h:
        (): Deleted.
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::createStub):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::createJSWebAssemblyRuntimeError):
        (JSC::JSWebAssemblyRuntimeError::create): Deleted.
        (JSC::JSWebAssemblyRuntimeError::JSWebAssemblyRuntimeError): Deleted.
        * wasm/js/JSWebAssemblyRuntimeError.h:
        (): Deleted.
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-03-17  Yusuke Suzuki  <ysuzuki@apple.com>

        modern-media-controls script should not be allocated in heap
        https://bugs.webkit.org/show_bug.cgi?id=223309

        Reviewed by Devin Rousso.

        Add --fail-if-non-ascii flag to ensure that input files do not include non-ASCII characters.

        * Scripts/make-js-file-arrays.py:
        (main):

2021-03-17  Saam Barati  <sbarati@apple.com>

        Determine if we have useFastJITPermissions on arm64e at runtime instead of hardcoding it as always enabled
        https://bugs.webkit.org/show_bug.cgi?id=223388
        <rdar://74819266>

        Reviewed by Mark Lam.

        * assembler/FastJITPermissions.h:
        (threadSelfRestrictRWXToRW):
        (threadSelfRestrictRWXToRX):
        (useFastJITPermissions): Deleted.
        (fastJITPermissionsIsSupported): Deleted.
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):
        * runtime/JSCConfig.h:

2021-03-17  Mark Lam  <mark.lam@apple.com>

        Enhance --verboseVerifyGC=true to make it easier to debug GC verifier errors.
        https://bugs.webkit.org/show_bug.cgi?id=223401

        Reviewed by Saam Barati.

        Previously, --verboseVerifyGC=true only dumps the stack trace of the immediate code
        path (in the verifier GC) that marked the object that the real GC did not.  With
        this patch, we'll also dump the trace of the marking chain all the way back to a
        GC root.  This patch also adds support for tracing the marking chain through opaque
        roots.

        The marking chain provided is the one that the verifier GC walked.  To debug the
        error, we use this info and check where the real GC deviates.

        Here's an example of the new dump of a GC verifier error:

            GC Verifier: ERROR cell 0x12c570500 was not marked
            Object: 0x12c570500 with butterfly 0x0 (Structure 0x108eb6d10:[0x3ba8, ArrayBuffer, {}, NonArray, Proto:0x108ed7d90, Leaf]), StructureID: 15272
            Cell 0x12c570500 was visited via opaque root 0x10e4b52c0 at:
                1   0x100acccdc JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
                2   0x100ad0c2f void JSC::WeakBlock::specializedVisit<JSC::MarkedBlock, JSC::AbstractSlotVisitor>(JSC::MarkedBlock&, JSC::AbstractSlotVisitor&)
                3   0x100abec2b void JSC::MarkedSpace::visitWeakSets<JSC::AbstractSlotVisitor>(JSC::AbstractSlotVisitor&)
                4   0x100aa5167 WTF::Detail::CallableWrapper<JSC::Heap::addCoreConstraints()::$_38, void, JSC::AbstractSlotVisitor&>::call(JSC::AbstractSlotVisitor&)
                5   0x100ac1411 JSC::MarkingConstraintSet::executeAllSynchronously(JSC::AbstractSlotVisitor&)
                6   0x100a9bd7b JSC::Heap::verifyGC()
                7   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
                8   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
                9   0x100aa332d WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::$_0>::implFunction(void*, JSC::CurrentThreadState&)
                10  0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&)
                11  0x100a9d2cd JSC::Heap::collectInMutatorThread()
                12  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
                13  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
                14  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
                15  0x100ec0785 void* JSC::allocateCell<JSC::JSDataView>(JSC::Heap&, unsigned long)
                16  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr<JSC::ArrayBuffer, WTF::RawPtrTraits<JSC::ArrayBuffer>, WTF::DefaultRefDerefTraits<JSC::ArrayBuffer> >&&, unsigned int, unsigned int)
                17  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments<JSC::JSDataView>(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional<unsigned int>)
                18  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
                19  0x5e4a38a010c7
                20  0x5e4a38a02095
                21  0x1004888d6 vmEntryToJavaScript
                22  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::JSGlobalObject*, JSC::JSObject*)
                23  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&)
                24  0x100007606 jscmain(int, char**)
                25  0x10000644b main

            In the real GC, opaque root0x10e4b52c0 was NOT added to the heap's opaque roots.
            Opaque root 0x10e4b52c0 was added via cell 0x12c577720 at:
                1   0x100ea4fc9 JSC::JSArrayBufferView::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&)
                2   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
                3   0x100a9bd48 JSC::Heap::verifyGC()
                4   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
                5   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
                6   0x100aa332d WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::$_0>::implFunction(void*, JSC::CurrentThreadState&)
                7   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&)
                8   0x100a9d2cd JSC::Heap::collectInMutatorThread()
                9   0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
                10  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
                11  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
                12  0x100ec0785 void* JSC::allocateCell<JSC::JSDataView>(JSC::Heap&, unsigned long)
                13  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr<JSC::ArrayBuffer, WTF::RawPtrTraits<JSC::ArrayBuffer>, WTF::DefaultRefDerefTraits<JSC::ArrayBuffer> >&&, unsigned int, unsigned int)
                14  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments<JSC::JSDataView>(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional<unsigned int>)
                15  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
                16  0x5e4a38a010c7
                17  0x5e4a38a02095
                18  0x1004888d6 vmEntryToJavaScript
                19  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::JSGlobalObject*, JSC::JSObject*)
                20  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&)
                21  0x100007606 jscmain(int, char**)
                22  0x10000644b main
                23  0x7fff203b4f3d start

            Object: 0x12c577720 with butterfly 0x0 (Structure 0x108eb6e60:[0xe135, DataView, {}, NonArray, Proto:0x108ed7da0, Leaf]), StructureID: 57653
            Cell 0x12c577720 was visited via cell 0x108b528e8 at:
                1   0x100acccdc JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
                2   0x100f1623c JSC::JSObject::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&)
                3   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
                4   0x100a9bd48 JSC::Heap::verifyGC()
                5   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
                6   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
                7   0x100aa332d WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::$_0>::implFunction(void*, JSC::CurrentThreadState&)
                8   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&)
                9   0x100a9d2cd JSC::Heap::collectInMutatorThread()
                10  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
                11  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
                12  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
                13  0x100ec0785 void* JSC::allocateCell<JSC::JSDataView>(JSC::Heap&, unsigned long)
                14  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr<JSC::ArrayBuffer, WTF::RawPtrTraits<JSC::ArrayBuffer>, WTF::DefaultRefDerefTraits<JSC::ArrayBuffer> >&&, unsigned int, unsigned int)
                15  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments<JSC::JSDataView>(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional<unsigned int>)
                16  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
                17  0x5e4a38a010c7
                18  0x5e4a38a02095
                19  0x1004888d6 vmEntryToJavaScript
                20  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::JSGlobalObject*, JSC::JSObject*)
                21  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&)
                22  0x100007606 jscmain(int, char**)
                23  0x10000644b main

            Object: 0x108b528e8 with butterfly 0x1806e93070 (Structure 0x108efb090:[0xde87, Array, {}, ArrayWithContiguous, Proto:0x108baf5e8]), StructureID: 56967
            Cell 0x108b528e8 was visited via cell 0x108e8fcc0 at:
                1   0x100accdd8 JSC::VerifierSlotVisitor::appendUnbarriered(JSC::JSCell*)
                2   0x10070634e void JSC::CodeBlock::stronglyVisitWeakReferences<JSC::AbstractSlotVisitor>(JSC::ConcurrentJSLocker const&, JSC::AbstractSlotVisitor&)
                3   0x1006eacd7 JSC::CodeBlock::visitChildren(JSC::JSCell*, JSC::AbstractSlotVisitor&)
                4   0x100acd4e9 JSC::VerifierSlotVisitor::drain()
                5   0x100a9bd48 JSC::Heap::verifyGC()
                6   0x100a9b2f7 JSC::Heap::runEndPhase(JSC::GCConductor)
                7   0x100a99434 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
                8   0x100aa332d WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::$_0>::implFunction(void*, JSC::CurrentThreadState&)
                9   0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&)
                10  0x100a9d2cd JSC::Heap::collectInMutatorThread()
                11  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
                12  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
                13  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
                14  0x100ec0785 void* JSC::allocateCell<JSC::JSDataView>(JSC::Heap&, unsigned long)
                15  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr<JSC::ArrayBuffer, WTF::RawPtrTraits<JSC::ArrayBuffer>, WTF::DefaultRefDerefTraits<JSC::ArrayBuffer> >&&, unsigned int, unsigned int)
                16  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments<JSC::JSDataView>(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional<unsigned int>)
                17  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
                18  0x5e4a38a010c7
                19  0x5e4a38a02095
                20  0x1004888d6 vmEntryToJavaScript
                21  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::JSGlobalObject*, JSC::JSObject*)
                22  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&)
                23  0x100007606 jscmain(int, char**)
                24  0x10000644b main

            Cell: 0x108e8fcc0 (0x108ef8c40:[0xc0e7, ProgramCodeBlock, {}, NonArray, Leaf]), StructureID: 49383
            Cell 0x108e8fcc0 was visited from scan of ConservativeScan roots at:
                1   0x100accaf8 JSC::VerifierSlotVisitor::append(JSC::ConservativeRoots const&)
                2   0x100aa42a2 WTF::Detail::CallableWrapper<JSC::Heap::addCoreConstraints()::$_31, void, JSC::SlotVisitor&>::call(JSC::SlotVisitor&)
                3   0x100ac1db2 JSC::MarkingConstraintSolver::runExecutionThread(JSC::SlotVisitor&, JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda<WTF::Optional<unsigned int> ()>)
                4   0x100a9f2de JSC::Heap::runTaskInParallel(WTF::RefPtr<WTF::SharedTask<void (JSC::SlotVisitor&)>, WTF::RawPtrTraits<WTF::SharedTask<void (JSC::SlotVisitor&)> >, WTF::DefaultRefDerefTraits<WTF::SharedTask<void (JSC::SlotVisitor&)> > >)
                5   0x100ac188f JSC::MarkingConstraintSolver::execute(JSC::MarkingConstraintSolver::SchedulerPreference, WTF::ScopedLambda<WTF::Optional<unsigned int> ()>)
                6   0x100ac125c JSC::MarkingConstraintSet::executeConvergenceImpl(JSC::SlotVisitor&)
                7   0x100ac0f9b JSC::MarkingConstraintSet::executeConvergence(JSC::SlotVisitor&)
                8   0x100a99f24 JSC::Heap::runFixpointPhase(JSC::GCConductor)
                9   0x100a99418 JSC::Heap::runCurrentPhase(JSC::GCConductor, JSC::CurrentThreadState*)
                10  0x100aa332d WTF::ScopedLambdaFunctor<void (JSC::CurrentThreadState&), JSC::Heap::collectInMutatorThread()::$_0>::implFunction(void*, JSC::CurrentThreadState&)
                11  0x100ab8794 JSC::callWithCurrentThreadState(WTF::ScopedLambda<void (JSC::CurrentThreadState&)> const&)
                12  0x100a9d2cd JSC::Heap::collectInMutatorThread()
                13  0x100a99217 JSC::Heap::waitForCollection(unsigned long long)
                14  0x100a98cb1 JSC::Heap::collectNow(JSC::Synchronousness, JSC::GCRequest)
                15  0x100ab7b4d JSC::LocalAllocator::allocateSlowCase(JSC::Heap&, JSC::GCDeferralContext*, JSC::AllocationFailureMode)
                16  0x100ec0785 void* JSC::allocateCell<JSC::JSDataView>(JSC::Heap&, unsigned long)
                17  0x100ec0629 JSC::JSDataView::create(JSC::JSGlobalObject*, JSC::Structure*, WTF::RefPtr<JSC::ArrayBuffer, WTF::RawPtrTraits<JSC::ArrayBuffer>, WTF::DefaultRefDerefTraits<JSC::ArrayBuffer> >&&, unsigned int, unsigned int)
                18  0x100f893d6 JSC::JSObject* JSC::constructGenericTypedArrayViewWithArguments<JSC::JSDataView>(JSC::JSGlobalObject*, JSC::Structure*, long long, unsigned int, WTF::Optional<unsigned int>)
                19  0x100f731dc JSC::constructDataView(JSC::JSGlobalObject*, JSC::CallFrame*)
                20  0x5e4a38a010c7
                21  0x5e4a38a02095
                22  0x1004888d6 vmEntryToJavaScript
                23  0x100b83690 JSC::Interpreter::executeProgram(JSC::SourceCode const&, JSC::JSGlobalObject*, JSC::JSObject*)
                24  0x100e39a82 JSC::evaluate(JSC::JSGlobalObject*, JSC::SourceCode const&, JSC::JSValue, WTF::NakedPtr<JSC::Exception>&)
                25  0x100007606 jscmain(int, char**)
                26  0x10000644b main

        Note that in this example, the 2nd stack trace was for an opaque root.  The verifier
        also noted that the opaque root (which was added for the verifier GC) was not added
        for the real GC.  This pointed to the bug that caused the error (this bug was fixed
        in https://bugs.webkit.org/show_bug.cgi?id=223241).

        Additional changes in this patch:

        1. Renamed AbstractSlotVisitor::Context to ReferrerContext.

        2. Introduced AbstractSlotVisitor::ReferrerToken, which is an abstraction for
           either a HeapCell*, an opaque root, or a GC root.  ReferrerContext now tracks
           a ReferrerToken instead of a HeapCell*.

        * heap/AbstractSlotVisitor.h:
        (JSC::AbstractSlotVisitor::ReferrerToken::ReferrerToken):
        (JSC::AbstractSlotVisitor::ReferrerToken::operator bool const):
        (JSC::AbstractSlotVisitor::ReferrerToken::operator! const):
        (JSC::AbstractSlotVisitor::ReferrerToken::isHeapCell const):
        (JSC::AbstractSlotVisitor::ReferrerToken::isOpaqueRoot const):
        (JSC::AbstractSlotVisitor::ReferrerToken::isRootMarkReason const):
        (JSC::AbstractSlotVisitor::ReferrerContext::referrer const):
        (JSC::AbstractSlotVisitor::ReferrerContext::setReferrer):
        (JSC::AbstractSlotVisitor::ReferrerContext::isOpaqueRootContext const):
        (JSC::AbstractSlotVisitor::didAddOpaqueRoot):
        (JSC::AbstractSlotVisitor::didFindOpaqueRoot):
        (JSC::SetRootMarkReasonScope::SetRootMarkReasonScope):
        (JSC::AbstractSlotVisitor::Context::cell const): Deleted.
        * heap/AbstractSlotVisitorInlines.h:
        (JSC::ReferrerToken::ReferrerToken):
        (JSC::ReferrerToken::asCell const):
        (JSC::ReferrerToken::asOpaqueRoot const):
        (JSC::ReferrerToken::asRootMarkReason const):
        (JSC::AbstractSlotVisitor::ReferrerContext::ReferrerContext):
        (JSC::AbstractSlotVisitor::ReferrerContext::~ReferrerContext):
        (JSC::AbstractSlotVisitor::addOpaqueRoot):
        (JSC::AbstractSlotVisitor::containsOpaqueRoot const):
        (JSC::AbstractSlotVisitor::referrer const):
        (JSC::AbstractSlotVisitor::Context::Context): Deleted.
        (JSC::AbstractSlotVisitor::Context::~Context): Deleted.
        (JSC::AbstractSlotVisitor::parentCell const): Deleted.
        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/Heap.h:
        * heap/SlotVisitor.h:
        * heap/SlotVisitorMacros.h:
        * heap/VerifierSlotVisitor.cpp:
        (JSC::MarkerData::MarkerData):
        (JSC::VerifierSlotVisitor::MarkedBlockData::markerData const):
        (JSC::VerifierSlotVisitor::PreciseAllocationData::markerData const):
        (JSC::VerifierSlotVisitor::OpaqueRootData::markerData const):
        (JSC::VerifierSlotVisitor::OpaqueRootData::addMarkerData):
        (JSC::VerifierSlotVisitor::VerifierSlotVisitor):
        (JSC::VerifierSlotVisitor::didAddOpaqueRoot):
        (JSC::VerifierSlotVisitor::didFindOpaqueRoot):
        (JSC::VerifierSlotVisitor::dump const):
        (JSC::VerifierSlotVisitor::dumpMarkerData):
        (JSC::VerifierSlotVisitor::testAndSetMarked):
        * heap/VerifierSlotVisitor.h:
        (JSC::VerifierSlotVisitor::MarkerData::referrer const):
        (JSC::VerifierSlotVisitor::MarkerData::stack const):
        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::specializedVisit):

2021-03-17  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Fix convertRecord() to throw on enumerable symbol |key|
        https://bugs.webkit.org/show_bug.cgi?id=223231

        Reviewed by Darin Adler.

        Export SymbolCoercionError.

        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toStringSlowCase const):
        * runtime/JSCJSValue.h:

2021-03-16  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Implement Error#cause
        https://bugs.webkit.org/show_bug.cgi?id=223302

        Reviewed by Yusuke Suzuki.

        This patch implements the Error.prototype.cause proposal, which reached Stage 3 at last week's TC39 meeting:
        https://github.com/tc39/proposal-error-cause

        This very simple proposal allows to one reference the "error that caused this one" in a cascading scenario.
        It does so by adding an options bag parameter to the Error, _NativeError_, and AggregateError constructors.
        If it is an object with a `cause` property, the property will be used; if not, nothing happens at all.

        * API/JSObjectRef.cpp:
        (JSObjectMakeError):
        * runtime/AggregateError.cpp:
        (JSC::AggregateError::finishCreation):
        (JSC::AggregateError::create):
        * runtime/AggregateError.h:
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (JSC::createGetterTypeError):
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::finishCreation):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        (JSC::NativeErrorConstructor<errorType>::callImpl):
        * runtime/NullSetterFunction.cpp:
        (JSC::NullSetterFunctionInternal::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::JSWebAssemblyLinkError::create):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::JSWebAssemblyRuntimeError::create):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-03-16  Saam Barati  <sbarati@apple.com>

        Object allocation sinking phase should prioritize materializations with no dependencies before materializations with no reverse dependencies
        https://bugs.webkit.org/show_bug.cgi?id=221069
        <rdar://problem/73686589>

        Reviewed by Yusuke Suzuki.

        Suppose we have two scope objects, A and B. Let's say A points to B, so B is
        A's parent scope. A then depends on B. B has no dependencies here. When deciding
        an order to materialize scope objects, we should always do it in reverse dependency
        order. So above, we should materialize B, then A.
        
        Inside object allocation sinking phase, when at an object materialization
        site, we do track both dependencies and reverse dependencies. In the above
        object graph, we'd attempt to materialize the objects in the right order,
        always picking things with no dependencies first (and updating the list of
        dependencies as we materialzed objects).
        
        The code was using an std::list to track things to materialize, and it had
        notions for materializing something first, and materializing something last.
        However, there was a bug in how the code managed to insert things when
        it first inserted last followed by inserting first. This patch simplifies
        the code and makes it do the right thing.

        * dfg/DFGObjectAllocationSinkingPhase.cpp:

2021-03-16  Mark Lam  <mark.lam@apple.com>

        Fixed undefined behavior bug in Const32Value::checkNegConstant().
        https://bugs.webkit.org/show_bug.cgi?id=223284

        Reviewed by Darin Adler.

        This was causing a failure in testb3 on a release build.
        Also do the same for Const64Value::checkNegConstant().

        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::checkNegConstant const):
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::checkNegConstant const):

2021-03-16  Alexey Shvayka  <shvaikalesh@gmail.com>

        Cache cross-origin methods / accessors of Window and Location per lexical global object
        https://bugs.webkit.org/show_bug.cgi?id=222739

        Reviewed by Darin Adler.

        1. Introduce WeakGCMap::ensureValue() to clean up JSObject::getOwnPropertyDescriptor() and
           avoid double hashing. It decorates HashMap::ensure() to guarantee non-null return value.
        2. Assert early that JSCustom{Getter,Setter}Function is created with non-null function pointer.
        3. Rename getCustom{Getter,Setter}Function() to align with newly-added JSDOMGlobalObject methods.

        * runtime/JSCustomGetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomGetterFunction::create):
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomSetterFunction::create):
        * runtime/JSObject.cpp:
        (JSC::createCustomGetterFunction):
        (JSC::createCustomSetterFunction):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::getCustomGetterFunction): Deleted.
        (JSC::getCustomSetterFunction): Deleted.
        * runtime/Lookup.h:
        (JSC::nonCachingStaticFunctionGetterImpl): Deleted.
        * runtime/WeakGCMap.h:

2021-03-16  Mark Lam  <mark.lam@apple.com>

        Add a RootMarkReason printer and also add a few additional reasons.
        https://bugs.webkit.org/show_bug.cgi?id=223263

        Reviewed by Michael Saboff.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json):
        (JSC::rootTypeToString): Deleted.
        * heap/RootMarkReason.cpp: Added.
        (JSC::rootMarkReasonDescription):
        (WTF::printInternal):
        * heap/RootMarkReason.h:

2021-03-16  Khem Raj  <raj.khem@gmail.com>

        [CMake] Build fails on RISC-V with GCC 11
        https://bugs.webkit.org/show_bug.cgi?id=222959

        Reviewed by Carlos Alberto Lopez Perez.

        Use renamed variable ATOMICS_REQUIRE_LIBATOMIC instead of ATOMIC_INT64_REQUIRES_LIBATOMIC

        * CMakeLists.txt:

2021-03-15  Angelos Oikonomopoulos  <angelos@igalia.com>

        postprocess-asm/resolve-asm-file-conflicts.rb build failure after upgrading to F34
        https://bugs.webkit.org/show_bug.cgi?id=223136

        Reviewed by Michael Catanzaro.

        When parsing .file assembler directives (for the purpose of
        deduplicating the file slots), also accept

          .file "path/to/CWD" "path/to/include"

        that seems to be emitted by GCC in some configurations. This also
        uses Pathname.cleanpath on the resulting path to canonicalize the
        paths. We could use .realpath, but since we only run this on the
        paths in a single compilation unit and the first component is
        supposed to be the CWD, this both seems unnecessary and would
        complicate our selftests.

        * Scripts/resolve-asm-file-conflicts.rb:

2021-03-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r274308): Two assertions in JSGlobalObject::defineOwnProperty() are failing
        https://bugs.webkit.org/show_bug.cgi?id=223134

        Reviewed by Yusuke Suzuki.

        This patch:

        1. Simplifies exception check after validateAndApplyPropertyDescriptor() as it
           conditionally throws on failure.
        2. Creates new SymbolTableEntry when global variable is redefined as read-only
           because setAttributes() performs pack(), which doesn't support fat entries.

        Due to #2, symbolTableGet() overload is simplified to return fast entry, and
        setAttributes() is removed as unused.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineOwnProperty):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTableGet):
        * runtime/SymbolTable.h:
        (JSC::SymbolTableEntry::getAttributes const):
        (JSC::SymbolTableEntry::setAttributes): Deleted.

2021-03-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [Big Sur arm64] testb3 crashing
        https://bugs.webkit.org/show_bug.cgi?id=222815

        Reviewed by Mark Lam.

        Fix dmb ish and dmb ishst's formats.

        * b3/testb3_6.cpp:
        (testMemoryFence):
        (testStoreFence):
        (testLoadFence):

2021-03-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] ARM64 branchAtomicWeakCAS should not use sign-extension
        https://bugs.webkit.org/show_bug.cgi?id=222813

        Reviewed by Mark Lam.

        ARM64 branchAtomicWeakCAS implementation should not use sign-extension. Instead, it should use zero-extension.
        This is because loadLinkAcq (ldaxr) will load a value with zero-extension. If we use sign-extension, we will
        encounter the state where LL/SC never succeeds just because we are comparing sign-extended value and zero-extended
        value. This implementation is aligned to how X86 implementation works: X86 only cares the effective bit width of branchAtomicWeakCAS.

        This is already tested by stress/atomics-store-result-int52.js.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::zeroExtend):
        (JSC::MacroAssemblerARM64::atomicStrongCAS):
        (JSC::MacroAssemblerARM64::atomicRelaxedStrongCAS):
        (JSC::MacroAssemblerARM64::branchAtomicWeakCAS):
        (JSC::MacroAssemblerARM64::branchAtomicRelaxedWeakCAS):
        (JSC::MacroAssemblerARM64::signExtend): Deleted.
        (JSC::MacroAssemblerARM64::signExtend<8>): Deleted.
        (JSC::MacroAssemblerARM64::signExtend<16>): Deleted.

2021-03-14  Mark Lam  <mark.lam@apple.com>

        GCSegmentedArray's size() and isEmpty() methods should be const.
        https://bugs.webkit.org/show_bug.cgi?id=223156

        Reviewed by Keith Miller.

        * heap/GCSegmentedArray.h:
        * heap/GCSegmentedArrayInlines.h:
        (JSC::GCSegmentedArray<T>::isEmpty const):
        (JSC::GCSegmentedArray<T>::size const):
        (JSC::GCSegmentedArray<T>::isEmpty): Deleted.
        (JSC::GCSegmentedArray<T>::size): Deleted.

2021-03-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] wasm atomic wait offset is not index
        https://bugs.webkit.org/show_bug.cgi?id=223159

        Reviewed by Mark Lam.

        While JS Atomics.wait's argument is "index" in the typed-array, argument of wasm wait and notify is address.
        But we are handling it as an index incorrectly.
        This patch uses it as an address.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):

2021-03-13  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274379.
        https://bugs.webkit.org/show_bug.cgi?id=223154

        Some LayoutTests are crashing

        Reverted changeset:

        "Cache cross-origin methods / accessors of Window and Location
        per lexical global object"
        https://bugs.webkit.org/show_bug.cgi?id=222739
        https://trac.webkit.org/changeset/274379

2021-03-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Cache cross-origin methods / accessors of Window and Location per lexical global object
        https://bugs.webkit.org/show_bug.cgi?id=222739

        Reviewed by Darin Adler.

        1. Add WeakGCMap::ensure() to avoid double hashing and clean up JSObject::getOwnPropertyDescriptor().
        2. Assert early that JSCustom{Getter,Setter}Function is created with non-null function pointer.
        3. Rename getCustom{Getter,Setter}Function() to align with newly-added JSDOMGlobalObject methods.

        * runtime/JSCustomGetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomGetterFunction::create):
        * runtime/JSCustomSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomSetterFunction::create):
        * runtime/JSObject.cpp:
        (JSC::createCustomGetterFunction):
        (JSC::createCustomSetterFunction):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::getCustomGetterFunction): Deleted.
        (JSC::getCustomSetterFunction): Deleted.
        * runtime/Lookup.h:
        (JSC::nonCachingStaticFunctionGetterImpl): Deleted.
        * runtime/WeakGCMap.h:

2021-03-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Bump API version when building with libsoup3
        https://bugs.webkit.org/show_bug.cgi?id=223067

        Reviewed by Adrian Perez de Castro.

        Use WEBKITGTK_API_DOC_VERSION instead of WEBKITGTK_API_VERSION for the gtkdoc configuration file.

        * PlatformGTK.cmake:

2021-03-11  Saam Barati  <sbarati@apple.com>

        Adopt VM_FLAGS_PERMANENT for the config vm mapping
        https://bugs.webkit.org/show_bug.cgi?id=222086
        <rdar://74402690>

        Reviewed by Yusuke Suzuki and Mark Lam.

        * runtime/JSCConfig.h:
        (JSC::Config::configureForTesting):

2021-03-11  Tadeu Zagallo  <tzagallo@apple.com>

        AI validator patchpoint should read heap top
        https://bugs.webkit.org/show_bug.cgi?id=223052
        <rdar://75087095>

        Reviewed by Yusuke Suzuki.

        Currently, the patchpoint doesn't specify any reads, which allows it to be moved around by B3
        and can cause false positives since it at least read the structure ID for comparing values.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):

2021-03-11  Alexey Shvayka  <shvaikalesh@gmail.com>

        Align JSGlobalObject::defineOwnProperty() with the spec and other runtimes
        https://bugs.webkit.org/show_bug.cgi?id=203456

        Reviewed by Robin Morisset.

        Per spec, top-level `var` bindings are non-configurable properties of the global
        object [1], while `undefined` / `NaN` / `Infinity` are also non-writable [2].

        Prior to this change, redefining global `var` binding with accessor descriptor
        failed silently (rather than throwing a TypeError); redefining with data or
        generic descriptor created a structure property, which took precedence over
        symbol table entry in JSGlobalObject::getOwnPropertySlot(), effectively
        destroying live binding between `global.foo` and `var foo`.

        This patch re-engineers JSGlobalObject::defineOwnProperty(), fixing both issues
        mentioned above. If defineOwnProperty() override is removed, there is no way
        a live binding can be maintained.

        In a follow-up change, JSGlobalObject::getOwnPropertySlot() will be updated to
        search symbol table first, aligning it with the spec [3], put(), and
        defineOwnProperty(). Apart from consistency, this will bring a mild speed-up.

        To accomodate global `var` binding reassignment right after it becomes read-only
        (in the same scope), this patch introduces a watchpoint that can be fired by
        JSGlobalObject::defineOwnProperty(). put_to_scope performance is neutral.

        Also, this patch removes unused symbolTableGet() overload and orphaned
        JSGlobalObject::defineGetter() / JSGlobalObject::defineSetter() declarations.

        [1]: https://tc39.es/ecma262/#sec-object-environment-records-createmutablebinding-n-d
        [2]: https://tc39.es/ecma262/#sec-value-properties-of-the-global-object
        [3]: https://tc39.es/ecma262/#sec-global-environment-records-getbindingvalue-n-s

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::needsDynamicLookup):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JIT.cpp:
        (JSC::JIT::emitVarReadOnlyCheck):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_to_scope):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_to_scope):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::defineOwnProperty):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::varReadOnlyWatchpoint):
        * runtime/JSSymbolTableObject.h:
        (JSC::symbolTableGet):

2021-03-11  BJ Burg  <bburg@apple.com>

        Web Inspector: Occasional crash under RemoteConnectionToTargetCocoa::close()
        https://bugs.webkit.org/show_bug.cgi?id=223038
        <rdar://74920246>

        Reviewed by Alex Christensen.

        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        Don't use a capture default, and copy the targetIdentifier.

2021-03-11  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274263.
        https://bugs.webkit.org/show_bug.cgi?id=223064

        Added few broken tests

        Reverted changeset:

        "AI validator patchpoint should read heap top"
        https://bugs.webkit.org/show_bug.cgi?id=223052
        https://trac.webkit.org/changeset/274263

2021-03-10  Tadeu Zagallo  <tzagallo@apple.com>

        AI validator patchpoint should read heap top
        https://bugs.webkit.org/show_bug.cgi?id=223052
        <rdar://75087095>

        Reviewed by Saam Barati.

        Currently, the patchpoint doesn't specify any reads, which allows it to be moved around by B3
        and can cause false positives since it at least read the structure ID for comparing values.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):

2021-03-10  Chris Dumez  <cdumez@apple.com>

        Use RetainPtr<> / OSObjectPtr<> more in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=223030

        Reviewed by Darin Adler.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::setupXPCConnectionIfNeeded):
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.h:
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        (Inspector::RemoteInspectorXPCConnection::RemoteInspectorXPCConnection):
        (Inspector::RemoteInspectorXPCConnection::closeFromMessage):
        (Inspector::RemoteInspectorXPCConnection::closeOnQueue):
        (Inspector::RemoteInspectorXPCConnection::handleEvent):
        (Inspector::RemoteInspectorXPCConnection::sendMessage):
        * jsc.cpp:
        (jscmain):

2021-03-10  Keith Miller  <keith_miller@apple.com>

        executeModuleProgram needs to ensure module argument array is still in scope
        https://bugs.webkit.org/show_bug.cgi?id=223039

        Reviewed by Saam Barati.

        This was causing testing builds to crash for wasm tests.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeModuleProgram):

2021-03-10  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Reenable -fvisibility=hidden
        https://bugs.webkit.org/show_bug.cgi?id=181916

        Reviewed by Don Olmstead.

        We need to export the destructor of IsoHeapCellType.

        * heap/IsoHeapCellType.cpp:
        * heap/IsoHeapCellType.h:

2021-03-09  Don Olmstead  <don.olmstead@sony.com>

        GLib JSC API headers should only include other GLib JSC API headers
        https://bugs.webkit.org/show_bug.cgi?id=222803

        Reviewed by Michael Catanzaro.

        A number of private GLib JSC headers are directly including private JavaScriptCore headers.
        To get this to compile ${FORWARDING_HEADERS_DIR}/JavaScriptCore was added to the list of
        includes in targets that needed the JSC headers. This is incorrect because they are being
        distributed in different directories.

        The private JSC headers being used were replaced with forward declarations. The source
        files were then updated accordingly.

        Also the include directories that contained the <jsc/Foo.h> headers were added to
        JavaScriptCore_INTERFACE_INCLUDE_DIRECTORIES so they're properly propagated to dependants.

        * API/glib/JSCClassPrivate.h:
        * API/glib/JSCContext.cpp:
        * API/glib/JSCContextPrivate.h:
        * API/glib/JSCVirtualMachine.cpp:
        * API/glib/JSCVirtualMachinePrivate.h:
        * API/glib/JSCWrapperMap.cpp:
        * GLib.cmake:
        * PlatformGTK.cmake:

2021-03-09  Keith Miller  <keith_miller@apple.com>

        JSC Crash in makeString() while creating Error object.
        https://bugs.webkit.org/show_bug.cgi?id=222452

        Reviewed by Mark Lam.

        This patch clamps the user provided part of error messages to
        2-KB of characters. Technically, it could actually be 4-KB of
        data for 16-bit strings. This is a somewhat randomly picked length
        but seems like it should be sufficient for any normal use case I
        can think of.

        * runtime/ExceptionHelpers.cpp:
        (JSC::clampErrorMessage):
        (JSC::defaultApproximateSourceError):
        (JSC::defaultSourceAppender):

2021-03-08  Saam Barati  <sbarati@apple.com>

        Using an undeclared private field inside eval shouldn't crash
        https://bugs.webkit.org/show_bug.cgi?id=222834
        <rdar://75035388>

        Reviewed by Yusuke Suzuki.

        The private methods patch regressed our behavior when using undeclared private
        fields or methods from an inner eval inside a class. That patch made us crash.
        This patch aligns us with the spec to throw a Syntax Error during eval parsing.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):

2021-03-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r274041.
        https://bugs.webkit.org/show_bug.cgi?id=222873

        Broke the build instead of fixing it

        Reverted changeset:

        "Fix the build"
        https://trac.webkit.org/changeset/274041

2021-03-06  Myles C. Maxfield  <mmaxfield@apple.com>

        Fix the build

        Unreviewed.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):

2021-03-06  Alexey Shvayka  <shvaikalesh@gmail.com>

        BooleanConstructor should be inlined in DFG / FTL
        https://bugs.webkit.org/show_bug.cgi?id=220322

        Reviewed by Yusuke Suzuki.

        `array.filter(Boolean)` is a rather popular idiom for removing falsy items from an array.
        Also, `Boolean(X)` is sometimes used for explicit type casting.

        This patch introduces ToBoolean DFG node and reorganizes compileLogicalNot(node) into
        compileToBoolean(node, bool invert), leveraging already existing emitConvertValueToBoolean().

        This approach is better than emitting LogicalNot<KnownBooleanUse>(LogicalNot(X)) as it results
        in cleaner DFG node tree and is ~7% faster w/o FTL. Also, it enables adding a op_to_boolean
        bytecode that will be generated for very common `!!X` patterns, reducing instruction count.

        Just as LogicalNot, BooleanConstructor should handle masquerader objects, because Annex B
        patches ToBoolean abstract op [1], preventing us from emitting simpler code.

        This change advances provided microbenchmark by 110%, and is neutral for other ToBoolean cases.

        [1]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-to-boolean

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToBooleanString):
        (JSC::DFG::SpeculativeJIT::compileToBooleanStringOrOther):
        (JSC::DFG::SpeculativeJIT::compileStringZeroLength): Deleted.
        (JSC::DFG::SpeculativeJIT::compileLogicalNotStringOrOther): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileToBooleanObjectOrOther):
        (JSC::DFG::SpeculativeJIT::compileToBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): Deleted.
        (JSC::DFG::SpeculativeJIT::compileLogicalNot): Deleted.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileToBooleanObjectOrOther):
        (JSC::DFG::SpeculativeJIT::compileToBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot): Deleted.
        (JSC::DFG::SpeculativeJIT::compileLogicalNot): Deleted.
        * dfg/DFGWatchpointCollectionPhase.cpp:
        (JSC::DFG::WatchpointCollectionPhase::handle):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileToBoolean):

2021-03-06  Tim Horton  <timothy_horton@apple.com>

        <model> should create a model-owning compositing layer
        https://bugs.webkit.org/show_bug.cgi?id=222798

        Reviewed by Simon Fraser.

        * inspector/protocol/LayerTree.json:
        Add a compositing reason for <model>.

2021-03-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, suppress warning as it is done in DFGOperations.cpp

        We are intentionally using this feature to reduce size of JIT memory.

        * dfg/DFGOSRExit.cpp:

2021-03-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Simplify OSRExit side state materialization
        https://bugs.webkit.org/show_bug.cgi?id=222648

        Reviewed by Keith Miller.

        Currently, JIT probe with lambda function has memory leaking issue. So we must not use it in production code.
        To avoid the future use, we rename probe to probeDebug.

        And to avoid using probe function in OSR exit side state materialization, we simplify the OSRExit side state materialization code,
        and making it just a function call. To achieve that, we materialize exit values into scratch buffer before restoring them to
        the stack. This aligns DFG to what FTL is doing. And DFG and FTL can use the same materialization operation function.

        Caio helped me to fix 32bit issue in DFG.

        * assembler/MacroAssembler.cpp:
        (JSC::MacroAssembler::probeDebug):
        (JSC::MacroAssembler::probe): Deleted.
        * assembler/MacroAssembler.h:
        * assembler/testmasm.cpp:
        (JSC::testClearBits64WithMask):
        (JSC::testClearBits64WithMaskTernary):
        (JSC::testShiftAndAdd):
        (JSC::testProbeReadsArgumentRegisters):
        (JSC::testProbeWritesArgumentRegisters):
        (JSC::testProbePreservesGPRS):
        (JSC::testProbeModifiesStackPointer):
        (JSC::testProbeModifiesProgramCounter):
        (JSC::testProbeModifiesStackValues):
        * b3/air/testair.cpp:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExit.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):

2021-03-05  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Bump cmake_minimum_required version to 3.12 or later
        https://bugs.webkit.org/show_bug.cgi?id=221727
        <rdar://problem/74454980>

        Reviewed by Konstantin Tokarev.

        Sync cmake_minimum_required version for AppleWin internal builds.

        * CMakeLists.txt:

2021-03-05  Tadeu Zagallo  <tzagallo@apple.com>

        OpGetPrivateName needs to be listed in FOR_EACH_OPCODE_WITH_VALUE_PROFILE
        https://bugs.webkit.org/show_bug.cgi?id=222775
        <rdar://74982634>

        Reviewed by Michael Saboff.

        Right now valueProfileForBytecodeIndex incorrectly returns null for op_get_private_name.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::valueProfileForBytecodeIndex):
        * bytecode/Opcode.h:

2021-03-05  Chris Dumez  <cdumez@apple.com>

        Reduce use of CFRetain() / CFRelease() / CFAutoRelease() in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=222760

        Reviewed by Darin Adler.

        Reduce use of CFRetain() / CFRelease() / CFAutoRelease() in WebKit by using RetainPtr<>.

        * API/JSContext.mm:
        (-[JSContext name]):
        * API/JSValue.mm:
        (valueToObjectWithoutCopy):
        (valueToString):
        * inspector/remote/cocoa/RemoteInspectorXPCConnection.mm:
        (Inspector::RemoteInspectorXPCConnection::deserializeMessage):

2021-03-05  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-Function-References] Update ref.func to produce (ref $t)
        https://bugs.webkit.org/show_bug.cgi?id=222779

        Reviewed by Yusuke Suzuki.

        Make ref.func to produce non nullable reference type which
        incorporates signature index. Since in JSC signature index represents
        type of the function from Type section we use it instead of type_idx
        for representing type of function references.


        * runtime/OptionsList.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addTableGrow):
        (JSC::Wasm::AirIRGenerator::addTableFill):
        (JSC::Wasm::AirIRGenerator::unify):
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValueType):
        (JSC::Wasm::isSubtype):
        (JSC::Wasm::isRefType):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::checkBranchTarget):
        (JSC::Wasm::FunctionParser<Context>::unify):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::callInformationForCallee):
        (JSC::Wasm::LLIntGenerator::addArguments):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseGlobal):
        * wasm/generateWasmOpsHeader.py:
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/wasm.json:

2021-03-04  Alex Christensen  <achristensen@webkit.org>

        [Cocoa] REGRESSION(r272752): fix some internal builds that use WTFString::WTFString(NSString *)
        https://bugs.webkit.org/show_bug.cgi?id=222610

        Reviewed by Chris Dumez.

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.objc_protocol_import_expression_for_member):
        (ObjCGenerator.objc_protocol_import_expression_for_parameter):
        (ObjCGenerator.protocol_to_objc_expression_for_member):
        (ObjCGenerator.payload_to_objc_expression_for_member):

2021-03-04  Saam Barati  <sbarati@apple.com>

        Don't trust parsing information to tell us if we've emitted op_call_eval
        https://bugs.webkit.org/show_bug.cgi?id=222694
        rdar://74778016

        Reviewed by Yusuke Suzuki.

        In the DFG, op_call_eval can't be inlined. Not inlining is required for how
        eval is currently implemented in the DFG. For CodeBlocks with eval in them,
        the scope register is also alive everywhere.
        
        When doing spread of arguments in eval, we end up emitting a call varargs
        instead of a direct eval. This seems like a spec bug:
        https://bugs.webkit.org/show_bug.cgi?id=222671
        
        However, this leads to something that had eval textually in it leading to
        us reporting the scope register is always alive, even if op_call_eval isn't
        in the bytecode stream. This leads to a validation error, since the DFG
        isn't actually keeping this scope register alive everywhere, because
        op_call_eval isn't in the bytecode stream.
        
        This patch fixes this by having a bit indicating if op_call_eval is in
        the bytecode stream or not.

        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeIndex):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::usesCallEval const):
        (JSC::CodeBlock::usesEval const): Deleted.
        * bytecode/ExecutableInfo.h:
        (JSC::ExecutableInfo::ExecutableInfo):
        (JSC::ExecutableInfo::usesEval const): Deleted.
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::usesCallEval const):
        (JSC::UnlinkedCodeBlock::setUsesCallEval):
        (JSC::UnlinkedCodeBlock::usesEval const): Deleted.
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::usesCallEval const):
        (JSC::UnlinkedCodeBlockGenerator::setUsesCallEval):
        (JSC::UnlinkedCodeBlockGenerator::usesEval const): Deleted.
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::isThisUsedInInnerArrowFunction):
        (JSC::BytecodeGenerator::isNewTargetUsedInInnerArrowFunction):
        (JSC::BytecodeGenerator::isSuperUsedInInnerArrowFunction):
        (JSC::BytecodeGenerator::isSuperCallUsedInInnerArrowFunction):
        * dfg/DFGGraph.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlock::usesCallEval const):
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        (JSC::CachedCodeBlock<CodeBlockType>::encode):
        (JSC::CachedCodeBlock::usesEval const): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        * runtime/EvalExecutable.h:
        (JSC::EvalExecutable::executableInfo const): Deleted.
        * runtime/ModuleProgramExecutable.h:
        * runtime/ProgramExecutable.h:
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::usesEval const): Deleted.

2021-03-04  Alex Christensen  <achristensen@webkit.org>

        Unreviewed, reverting r273906.

        Broke internal build

        Reverted changeset:

        "[Cocoa] REGRESSION(r272752): fix some internal builds that
        use WTFString::WTFString(NSString *)"
        https://bugs.webkit.org/show_bug.cgi?id=222610
        https://commits.webkit.org/r273906

2021-03-04  Alex Christensen  <achristensen@webkit.org>

        [Cocoa] REGRESSION(r272752): fix some internal builds that use WTFString::WTFString(NSString *)
        https://bugs.webkit.org/show_bug.cgi?id=222610

        Reviewed by Chris Dumez.

        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.objc_protocol_import_expression_for_member):
        (ObjCGenerator.objc_protocol_import_expression_for_parameter):
        (ObjCGenerator.protocol_to_objc_expression_for_member):
        (ObjCGenerator.payload_to_objc_expression_for_member):

2021-03-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: `RecordCanvasActionVariant` causes a huge symbol to be created in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=222639
        <rdar://problem/73728057>

        Reviewed by Tim Horton and Brian Burg.

        * inspector/protocol/Recording.json:
        Drive-by: Add info about `snapshot` to the `"description"` of `"actions"` in `"Frame"`.

2021-03-03  Caio Lima  <ticaiolima@gmail.com>

        [ESNext] Private methods can't be named as '#constructor'
        https://bugs.webkit.org/show_bug.cgi?id=222680

        Reviewed by Yusuke Suzuki.

        It's a `SyntaxError` when we try to use `#constructor` as private name
        for methods, accessors, and fields. This patch is fixing such bug for
        methods and accessors.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseGetterSetter):

2021-03-03  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r273814.
        https://bugs.webkit.org/show_bug.cgi?id=222676

        Unresolved types in JavaScriptCore-4.0.gir

        Reverted changeset:

        "[CMake] JavaScriptCore GLib headers should be copies"
        https://bugs.webkit.org/show_bug.cgi?id=222625
        https://trac.webkit.org/changeset/273814

2021-03-03  Alexey Shvayka  <shvaikalesh@gmail.com>

        Add JSModuleNamespaceObject::deletePropertyByIndex() method
        https://bugs.webkit.org/show_bug.cgi?id=222611

        Reviewed by Yusuke Suzuki.

        r270923 introduced arbitrary module namespace identifiers, enabling indexed identifiers
        to be exported. While they were already handled by getOwnPropertySlotByIndex(), indexed
        [[Delete]] override was absent, which prevented TypeError from being thrown.

        This patch adds the missing method, aligning JSC with the spec [1].

        [1]: https://tc39.es/ecma262/#sec-module-namespace-exotic-objects-delete-p

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::deleteProperty):
        (JSC::JSModuleNamespaceObject::deletePropertyByIndex):
        * runtime/JSModuleNamespaceObject.h:

2021-03-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake] JavaScriptCore GLib headers should be copies
        https://bugs.webkit.org/show_bug.cgi?id=222625

        Reviewed by Michael Catanzaro.

        Copy the headers rather than creating a symbolic link to structure the JavaScriptCore Glib
        headers into a jsc directory. This follows the convention used in JavaScriptCore where
        there are public and private headers.

        The public JavaScriptCore GLib headers are copied before building JavaScriptCore. The
        private JavaScriptCore were modified to include the public GLib headers through
        <jsc/Header.h> rather than "Header.h" which is convention for the private C APIs in
        JavaScriptCore.

        APICast.h was being erroneously included in JSCClassPrivate.h because its not a
        JavaScriptCore GLib header. Instead forward declarations were added to the private headers
        and APICast.h was used as necessary in the .cpp files.

        * API/glib/JSCClassPrivate.h:
        * API/glib/JSCContext.cpp:
        * API/glib/JSCContextPrivate.h:
        * API/glib/JSCExceptionPrivate.h:
        * API/glib/JSCValuePrivate.h:
        * API/glib/JSCVirtualMachine.cpp:
        * API/glib/JSCVirtualMachinePrivate.h:
        * API/glib/JSCWrapperMap.cpp:
        * GLib.cmake:
        * PlatformGTK.cmake:

2021-03-03  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-Function-References] Extend wasm type with type index
        https://bugs.webkit.org/show_bug.cgi?id=222351

        Reviewed by Keith Miller.

        Extend wasm type with type index to represent
        new reference types from typed function references
        proposal: https://github.com/WebAssembly/function-references/blob/master/proposals/function-references/Overview.md.

        * bytecode/BytecodeDumper.cpp:
        (JSC::Wasm::BytecodeDumper::dumpConstants):
        (JSC::Wasm::BytecodeDumper::formatConstant const):
        * bytecode/BytecodeDumper.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::TypedTmp::TypedTmp):
        (JSC::Wasm::TypedTmp::dump const):
        (JSC::Wasm::AirIRGenerator::g32):
        (JSC::Wasm::AirIRGenerator::g64):
        (JSC::Wasm::AirIRGenerator::gExternref):
        (JSC::Wasm::AirIRGenerator::gFuncref):
        (JSC::Wasm::AirIRGenerator::f32):
        (JSC::Wasm::AirIRGenerator::f64):
        (JSC::Wasm::AirIRGenerator::tmpForType):
        (JSC::Wasm::AirIRGenerator::emitCCall):
        (JSC::Wasm::AirIRGenerator::moveOpForValueType):
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::addLocal):
        (JSC::Wasm::AirIRGenerator::addConstant):
        (JSC::Wasm::AirIRGenerator::addRefIsNull):
        (JSC::Wasm::AirIRGenerator::addRefFunc):
        (JSC::Wasm::AirIRGenerator::addTableGet):
        (JSC::Wasm::AirIRGenerator::addTableSet):
        (JSC::Wasm::AirIRGenerator::addTableInit):
        (JSC::Wasm::AirIRGenerator::addElemDrop):
        (JSC::Wasm::AirIRGenerator::addTableSize):
        (JSC::Wasm::AirIRGenerator::addTableGrow):
        (JSC::Wasm::AirIRGenerator::addTableFill):
        (JSC::Wasm::AirIRGenerator::addTableCopy):
        (JSC::Wasm::AirIRGenerator::addGrowMemory):
        (JSC::Wasm::AirIRGenerator::addCurrentMemory):
        (JSC::Wasm::AirIRGenerator::addMemoryFill):
        (JSC::Wasm::AirIRGenerator::addMemoryCopy):
        (JSC::Wasm::AirIRGenerator::addMemoryInit):
        (JSC::Wasm::AirIRGenerator::addDataDrop):
        (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::AirIRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::AirIRGenerator::appendGeneralAtomic):
        (JSC::Wasm::AirIRGenerator::appendStrongCAS):
        (JSC::Wasm::AirIRGenerator::emitAtomicLoadOp):
        (JSC::Wasm::AirIRGenerator::atomicLoad):
        (JSC::Wasm::AirIRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::AirIRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::AirIRGenerator::atomicBinaryRMW):
        (JSC::Wasm::AirIRGenerator::emitAtomicCompareExchange):
        (JSC::Wasm::AirIRGenerator::atomicCompareExchange):
        (JSC::Wasm::AirIRGenerator::atomicWait):
        (JSC::Wasm::AirIRGenerator::atomicNotify):
        (JSC::Wasm::AirIRGenerator::truncSaturated):
        (JSC::Wasm::AirIRGenerator::addReturn):
        (JSC::Wasm::AirIRGenerator::addSwitch):
        (JSC::Wasm::AirIRGenerator::emitModOrDiv):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncUF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF64>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncSF32>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64TruncUF32>):
        (JSC::Wasm::AirIRGenerator::addShift):
        (JSC::Wasm::AirIRGenerator::addFloatingPointBinOp):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Min>):
        (JSC::Wasm::AirIRGenerator::addFloatingPointMinOrMax):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Max>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Mul>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Div>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Div>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F32Neg>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotr>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Rotl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32ShrS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Shl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Min>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Sub>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrS>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64ShrU>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Shl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotl>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Rotr>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Neg>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::F64Max>):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addTableGet):
        (JSC::Wasm::B3IRGenerator::addRefFunc):
        (JSC::Wasm::B3IRGenerator::addTableInit):
        (JSC::Wasm::B3IRGenerator::addTableSize):
        (JSC::Wasm::B3IRGenerator::addTableGrow):
        (JSC::Wasm::B3IRGenerator::addTableFill):
        (JSC::Wasm::B3IRGenerator::addTableCopy):
        (JSC::Wasm::B3IRGenerator::addMemoryFill):
        (JSC::Wasm::B3IRGenerator::addMemoryInit):
        (JSC::Wasm::B3IRGenerator::addMemoryCopy):
        (JSC::Wasm::B3IRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::B3IRGenerator::atomicLoad):
        (JSC::Wasm::B3IRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::B3IRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::B3IRGenerator::atomicBinaryRMW):
        (JSC::Wasm::B3IRGenerator::emitAtomicCompareExchange):
        (JSC::Wasm::B3IRGenerator::atomicCompareExchange):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::WasmCallingConvention::marshallLocation const):
        (JSC::Wasm::WasmCallingConvention::callInformationFor const):
        (JSC::Wasm::JSCallingConvention::marshallLocation const):
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValueType):
        (JSC::Wasm::isRefType):
        (JSC::Wasm::TableInformation::wasmType const):
        * wasm/WasmFunctionCodeBlock.h:
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser::TypedExpression::TypedExpression):
        (JSC::Wasm::FunctionParser<Context>::load):
        (JSC::Wasm::FunctionParser<Context>::store):
        (JSC::Wasm::FunctionParser<Context>::atomicLoad):
        (JSC::Wasm::FunctionParser<Context>::atomicStore):
        (JSC::Wasm::FunctionParser<Context>::atomicBinaryRMW):
        (JSC::Wasm::FunctionParser<Context>::atomicCompareExchange):
        (JSC::Wasm::FunctionParser<Context>::atomicWait):
        (JSC::Wasm::FunctionParser<Context>::atomicNotify):
        (JSC::Wasm::FunctionParser<Context>::checkBranchTarget):
        (JSC::Wasm::FunctionParser<Context>::unify):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmGlobal.cpp:
        (JSC::Wasm::Global::get const):
        (JSC::Wasm::Global::set):
        (JSC::Wasm::Global::visitAggregateImpl):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::jsNullConstant):
        (JSC::Wasm::LLIntGenerator::zeroConstant):
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::callInformationForCallee):
        (JSC::Wasm::LLIntGenerator::addArguments):
        (JSC::Wasm::LLIntGenerator::addLocal):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::parseBlockSignature):
        (JSC::Wasm::Parser<SuccessType>::parseValueType):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseType):
        (JSC::Wasm::SectionParser::parseTableHelper):
        (JSC::Wasm::SectionParser::parseGlobal):
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::parseInitExpr):
        (JSC::Wasm::SectionParser::parseI32InitExpr):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfExpressions):
        * wasm/WasmSignature.cpp:
        (JSC::Wasm::Signature::dump const):
        (JSC::Wasm::computeHash):
        (JSC::Wasm::SignatureInformation::SignatureInformation):
        * wasm/WasmSignature.h:
        (JSC::Wasm::SignatureInformation::thunkFor const):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::wasmType const):
        * wasm/generateWasmOpsHeader.py:
        (TypeKind):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::marshallJSResult):
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::defaultValueForReferenceType):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::linkImpl):

2021-03-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Flaky JSC test: stress/shared-array-buffer-sort-while-different-thread-is-modifying.js.default
        https://bugs.webkit.org/show_bug.cgi?id=221129

        Reviewed by Saam Barati.

        Speculative fix for JSC shell's termination handling change.

        * jsc.cpp:
        (CommandLine::CommandLine):
        (jscmain):

2021-03-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove ImpureProxyType
        https://bugs.webkit.org/show_bug.cgi?id=222626

        Reviewed by Alexey Shvayka.

        ImpureProxyType is no longer used. This patch just removes it.

        * API/tests/JSObjectGetProxyTargetTest.cpp:
        (testJSObjectGetProxyTarget):
        * runtime/HasOwnPropertyCache.h:
        (JSC::HasOwnPropertyCache::tryAdd):
        * runtime/JSCast.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isProxy const):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::resetPrototype):
        (JSC::JSGlobalObject::finishCreation):
        * runtime/JSProxy.h:
        (JSC::JSProxy::createStructure):
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/Structure.h:
        (JSC::Structure::isProxy const):
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-03-02  Saam Barati  <sbarati@apple.com>

        Improve logging of OSR availability analysis validation failures
        https://bugs.webkit.org/show_bug.cgi?id=222612

        Reviewed by Yusuke Suzuki.

        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):

2021-03-02  Devin Rousso  <drousso@apple.com>

        Allow IDL `Date` to be parsed from a string in addition to a number and actual JS `Date`
        https://bugs.webkit.org/show_bug.cgi?id=222605
        <rdar://problem/74502335>

        Reviewed by Yusuke Suzuki.

        JS `Date` can be stringified into JSON, but cannot be parsed back into a JS `Date` without
        additional logic since the stringified value is indistinguishable from a regular string.

        * runtime/JSDateMath.h:
        Export `DateCache::parseDate` so it can be used in WebCore bindings code.

2021-03-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize getEnumerableLength
        https://bugs.webkit.org/show_bug.cgi?id=222539

        Reviewed by Alexey Shvayka.

        Now getEnumerableLength is only overridden by JSProxy. And this is called in the critical path of propertyNameEnumerator.
        We should not use indirect call for getEnumerableLength. We remove indirect functions for getEnumerableLength. For JSProxy,
        any results is OK since anyway JSProxy does not utilize the result of this function since it cannot use fast index enumerator.

        We also avoid calling holesMustForwardToPrototype in getEnumerableLength when it is meaningless. For example,
        if the object is ALL_BLANK_INDEXING_TYPES, then regardless of the condition of holesMustForwardToPrototype, the result of
        getEnumerableLength is zero.

        * runtime/ClassInfo.h:
        * runtime/JSCast.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getEnumerableLength): Deleted.
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getEnumerableLength):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::getEnumerableLength): Deleted.
        * runtime/JSProxy.h:

2021-03-02  BJ Burg  <bburg@apple.com>

        [Cocoa] REGRESSION(r272752): fix some internal builds that use WTFString::WTFString(NSString *)
        https://bugs.webkit.org/show_bug.cgi?id=222610
        <rdar://74938249>

        Unreviewed build fix.

        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_method_implementation):
        Some builders seem to find the new version of the header (without the exported NSString constructor)
        whereas others don't find the new version (expecting the symbol to be exported), causing a linker error later on.

        As a workaround, force usage of the CFStringRef constructor, which is always exported.

        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        Rebaseline generator test results.

2021-03-02  Alexey Shvayka  <shvaikalesh@gmail.com>

        TypedArray's [[DefineOwnProperty]] should throw in case of failure
        https://bugs.webkit.org/show_bug.cgi?id=220492

        Reviewed by Darin Adler.

        While web reality [1] requires failures of the most TypeArray internal methods to be
        silent, [[DefineOwnProperty]] can fail loudly if called via Object.defineProperty.

        With this patch, TypeError is thrown for detached buffer, out-of-bounds index, and
        non-index canonical numeric string key. Aligns JSC with the spec [2], V8, and SM.

        [1]: https://github.com/tc39/ecma262/pull/2164
        [2]: https://tc39.es/ecma262/#sec-integer-indexed-exotic-objects-defineownproperty-p-desc (step 3.b)

        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):

2021-03-01  Keith Miller  <keith_miller@apple.com>

        Reduce promise reaction memory usage when there are multiple reactions
        https://bugs.webkit.org/show_bug.cgi?id=222533

        Reviewed by Yusuke Suzuki.

        Previously, we would store each reaction in a linked list. This
        meant each reaction required 8 bytes to point to the next
        reaction.  Instead, this patch makes it so the first reaction is
        store inline an object and any additional reactions are store into
        index storage for that object. This doesn't save memory for the
        first reaction since we now need to have a count of all the out of
        line reactions but extra reactions use 8 bytes less each.

        * builtins/BuiltinNames.h:
        * builtins/PromiseOperations.js:
        (globalPrivate.pushNewPromiseReaction):
        (globalPrivate.triggerPromiseReactions):
        (globalPrivate.newPromiseReaction): Deleted.
        (globalPrivate.resolvePromise): Deleted.
        (globalPrivate.rejectPromise): Deleted.
        (globalPrivate.fulfillPromise): Deleted.
        (globalPrivate.resolvePromiseWithFirstResolvingFunctionCallCheck): Deleted.
        (globalPrivate.fulfillPromiseWithFirstResolvingFunctionCallCheck): Deleted.
        (globalPrivate.rejectPromiseWithFirstResolvingFunctionCallCheck): Deleted.
        (globalPrivate.createResolvingFunctions): Deleted.
        (globalPrivate.promiseReactionJobWithoutPromise): Deleted.
        (globalPrivate.resolveWithoutPromise): Deleted.
        (globalPrivate.rejectWithoutPromise): Deleted.
        (globalPrivate.fulfillWithoutPromise): Deleted.
        (globalPrivate.createResolvingFunctionsWithoutPromise): Deleted.
        (globalPrivate.promiseReactionJob): Deleted.
        (globalPrivate.promiseResolveThenableJobFast): Deleted.
        (globalPrivate.promiseResolveThenableJobWithoutPromiseFast): Deleted.
        (globalPrivate.promiseResolveThenableJob): Deleted.
        (globalPrivate.promiseResolveThenableJobWithDerivedPromise): Deleted.
        (onFulfilled): Deleted.
        (onRejected): Deleted.
        (globalPrivate.performPromiseThen): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSMicrotask.cpp:
        (JSC::createJSMicrotask):
        * runtime/JSMicrotask.h:

2021-03-01  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION: Object.defineProperties triggering a setter
        https://bugs.webkit.org/show_bug.cgi?id=222538

        Reviewed by Keith Miller.

        DFG's compilePutByValForCellWithString and compilePutByValForCellWithSymbol do not care about "Direct" flag.
        This patch fixes that to call appropriate function if node is PutByValDirect.
        FTL does not have this issue.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForCellWithString):
        (JSC::DFG::SpeculativeJIT::compilePutByValForCellWithSymbol):

2021-03-01  Xan Lopez  <xan@igalia.com>

        [JSC] WebAssembly: make Wasm::Signature 32bit friendly
        https://bugs.webkit.org/show_bug.cgi?id=222543

        Reviewed by Yusuke Suzuki.

        The Wasm code uses the address of a Signature object as its
        index. To make this work in 32bit just change Wasm::SignatureIndex
        to be a uintptr_t instead of uint64_t. Also, remove some
        unnecessary includes while we are at it.

        * wasm/WasmModule.h:
        * wasm/WasmSignature.h:
        * wasm/js/JSWebAssemblyModule.h:

2021-03-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Throw TypeError when getFunctionRealm hits revoked Proxy
        https://bugs.webkit.org/show_bug.cgi?id=222523

        Reviewed by Alexey Shvayka.

        This patch throws TypeError when getFunctionRealm encounters revoked Proxy. However,
        this makes derived structure creation code difficult to be written inlinely.
        The fast path of derived structure creation must be inlined since this is critical
        path of every builtin constructors.

        So, this patch introduces JSC_GET_DERIVED_STRUCTURE macro which streamlines the derived
        structure creation code while keeping the fast path inlined. And it inserts appropriate
        error checks after this new getFunctionRealm call.

        Then, we appropriately use getFunctionRealm in op_create_this implementation.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/BooleanConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/FinalizationRegistryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/InternalFunction.cpp:
        (JSC::getFunctionRealm):
        * runtime/InternalFunction.h:
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlDisplayNamesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlListFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlLocaleConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlSegmenterConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructImpl):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructCustomArrayBufferIfNeeded):
        (JSC::constructGenericTypedArrayViewImpl):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::errorStructureWithErrorType const):
        (JSC::JSGlobalObject::arrayBufferStructureWithSharingMode const):
        (JSC::JSGlobalObject::typedArrayStructureWithTypedArrayType const):
        * runtime/JSGlobalObjectInlines.h:
        (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation const):
        * runtime/MapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        * runtime/NumberConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObjectWithNewTarget):
        * runtime/ProxyConstructor.cpp:
        (JSC::ProxyConstructor::create):
        (JSC::ProxyConstructor::finishCreation):
        * runtime/ProxyConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::getRegExpStructure):
        * runtime/SetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/StringConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakMapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakObjectRefConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/WeakSetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-03-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        BytecodeGenerator::fuseCompareAndJump() fails for some language constructs
        https://bugs.webkit.org/show_bug.cgi?id=221927

        Reviewed by Yusuke Suzuki.

        For BytecodeGenerator::fuseCompareAndJump() to merge two ops into one, condition's `dst`
        register should not be referenced from elsewhere. This change tracks down and eliminates
        all such cases, which reduces bytecode size for a few language constructs:
          -1 per every `case` of a `switch`;
          -2 per generator function, -2 per every `yield` / `yield*`;
          -2 per `class extends`;
          -2 per `finally`, -1 per every `break` / `continue` / `return` inside;
          -3 per Function.prototype.apply() with `...spread` as a single argument.

        Instead of mixing RefPtr with raw C++ pointers, single-line branches were preferred.
        To keep them cleaner, this patch introduces emitLoad() override for JSGenerator::ResumeMode
        enum, and tweaks existing override for CompletionType.

        A few drive-by improvements:
          * to enable future optimizations, replaces emitBinaryOp() with emitEqualityOp()
            for OpEq / OpStricteq (adds an assert), and vice-versa for other comparison ops;
          * removes OperandTypes for comparison ops as it was ignored
            (let's re-introduce them consistently once supported);
          * inlines too specific BytecodeGenerator::emitJumpIf();
          * replaces `eq` with `stricteq` in ApplyFunctionCallDotNode.

        No behavior change, no callee registers count grow.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitFinallyCompletion):
        (JSC::BytecodeGenerator::emitJumpIf): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitEqualityOp):
        (JSC::BytecodeGenerator::emitLoad):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        (JSC::CaseBlockNode::emitBytecodeForBlock):
        (JSC::FunctionNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):

2021-02-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add gc and clearKeptObjects to $262
        https://bugs.webkit.org/show_bug.cgi?id=222527

        Reviewed by Ross Kirsling.

        Add $262.gc and $262.clearKeptObjects functions. They are required for test262 host-gc-required.
        Since all the tests using "host-gc-required" are currently also marked with cleanupSome, we are currently not running them.
        But if some more tests are landed in test262 with "host-gc-required", we will run them with these functions.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):

2021-02-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Update test262 host environments
        https://bugs.webkit.org/show_bug.cgi?id=222525

        Reviewed by Ross Kirsling.

        1. $262.global should be `globalThis` of the realm according to test/built-ins/Function/call-bind-this-realm-undef.js
        2. $262.evalScript should uwrap JSProxy to get GlobalObject.

        This fixes test262 test/built-ins/Function/call-bind-this-realm-undef.js, it was wrongly tested and failing.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):

2021-02-27  Rob Buis  <rbuis@igalia.com>

        Null check ArrayBufferView RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=221569

        Reviewed by Ryosuke Niwa.

        Null check ArrayBufferView RefPtr before using it.

        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::unsharedImpl):

2021-02-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Avoid creating functions unnecessarily in builtins
        https://bugs.webkit.org/show_bug.cgi?id=222509

        Reviewed by Ross Kirsling.

        Avoid unnecessary function creation and make them @globalPrivate.

        * builtins/ArrayPrototype.js:
        (globalPrivate.maxWithPositives):
        (globalPrivate.minWithMaybeNegativeZeroAndPositive):
        (copyWithin):
        (maxWithPositives): Deleted.
        (minWithMaybeNegativeZeroAndPositive): Deleted.
        * builtins/DatePrototype.js:
        (globalPrivate.toDateTimeOptionsAnyAll):
        (toLocaleString):
        (globalPrivate.toDateTimeOptionsDateDate):
        (toLocaleDateString):
        (globalPrivate.toDateTimeOptionsTimeTime):
        (toLocaleTimeString):
        (toLocaleString.toDateTimeOptionsAnyAll): Deleted.
        (toLocaleDateString.toDateTimeOptionsDateDate): Deleted.
        (toLocaleTimeString.toDateTimeOptionsTimeTime): Deleted.
        * builtins/RegExpPrototype.js:
        (globalPrivate.getSubstitution):
        (overriddenName.string_appeared_here.replace):
        (getSubstitution): Deleted.

2021-02-26  Saam Barati  <sbarati@apple.com>

        Remove bad assertion of AI ArrayMode state in various "by val" opcodes
        https://bugs.webkit.org/show_bug.cgi?id=222494
        <rdar://73613460>

        Reviewed by Filip Pizlo.

        It's invalid to ever assert that AI must have proved something. We've been
        slowly removing these faulty asserts from the compiler, and this patch
        removes some more of them. AI is conservative, and it's not guaranteed
        that it will prove X, even if X must be true.
        
        In this particular test case, we are looking at a race between the concurrent
        compiler thread and the main thread, and the compilation will be thrown away
        because of a Structure transition.
        
        What happened in this particular program is we had a CheckStructure that was
        proved to exit in an early run of AI, that is not shown to exit during a later
        run of AI. Because of that, in the earlier AI run, we have some narrower type
        info (because fewer predecessory type info). This narrower type info allowed
        us to elide a CheckArray. The later runs don't have this narrower type info,
        because the CheckStructure doesn't exit. The safety of all of this is
        guaranteed by the compilation being thrown away because we fired the transition
        watchpoint from the earlier Structure seen by AI.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnDirectArguments):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnScopedArguments):
        (JSC::DFG::SpeculativeJIT::compileGetArrayLength):

2021-02-26  Chris Dumez  <cdumez@apple.com>

        Reduce explicit usage of [objC retain] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=222439

        Reviewed by Darin Adler.

        Reduce explicit usage of [objC retain] in WebKit by using RetainPtr<>.

        * API/JSContext.mm:
        (+[JSContext currentArguments]):
        (-[JSContext beginCallbackWithData:calleeValue:thisValue:argumentCount:arguments:]):
        (-[JSContext endCallbackWithData:]):
        * API/JSContextInternal.h:
        * API/tests/testapi.mm:
        (-[TinyDOMNode initWithVirtualMachine:]):

2021-02-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Avoid function allocations for non-user-provided Promise then callbacks
        https://bugs.webkit.org/show_bug.cgi?id=222490

        Reviewed by Keith Miller.

        At @performPromiseThen point, callback function objects themselves are not accessible from users
        if they are not passed from users. So, we can reuse functions if users do not pass functions.

        * builtins/PromiseOperations.js:
        (globalPrivate.promiseEmptyOnFulfilled):
        (globalPrivate.promiseEmptyOnRejected):
        (globalPrivate.performPromiseThen):
        (onFulfilled): Deleted.
        (onRejected): Deleted.

2021-02-26  Michael Saboff  <msaboff@apple.com>

        unexpected minimumInputSize in setupDisjunctionOffsets for regexp engine(yarr)
        https://bugs.webkit.org/show_bug.cgi?id=220357

        Reviewed by Saam Barati.

        Removed an unnecessary ASSERT.
        This assert checked that the minimum size wasn't UINT_MAX which I believe was
        intended to make sure the minimum size was changed while computing the  
        disjunction's size and offsets.  Those calculations involve checked arithmetic,
        which would catch any overflow.

        The other part of this patch adds a test that checks this condition as well
        as the case where the pattern is one character longer, 2^32, which triggers
        the arithmetic overflow.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::setupDisjunctionOffsets):

2021-02-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Flaky JSC test: stress/atomic-increment-bigint64.js
        https://bugs.webkit.org/show_bug.cgi?id=221904

        Reviewed by Keith Miller.

        bytecode-cache test assumes that code can be cached once it is executed. But this
        is not correct for threading tests using JSC shell's agent feature: code is running
        different VM in the different thread. And we have no guarantee that this thread destroys
        VM when the main thread is finished. So this is possible that bytecode used in that thread
        is not committed.

        We use Options::forceDiskCache's RELEASE_ASSERT only if it is in main thread.

        * runtime/CodeCache.h:

2021-02-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix typo in wasm error message
        https://bugs.webkit.org/show_bug.cgi?id=222444

        Reviewed by Saam Barati.

        * wasm/WasmStreamingParser.cpp:
        (JSC::Wasm::StreamingParser::parseModuleHeader):

2021-02-25  Alex Christensen  <achristensen@webkit.org>

        Add stubs to enable SafariForWebKitDevelopment to launch
        https://bugs.webkit.org/show_bug.cgi?id=222388

        Reviewed by Myles Maxfield.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/SymbolStubsForSafariCompatibility.mm: Added.
        (WTF::String::String):
        (WTF::JSONImpl::ObjectBase::getArray const):
        (WTF::JSONImpl::ObjectBase::getValue const):
        (WTF::JSONImpl::ObjectBase::getObject const):
        (Inspector::BackendDispatcher::sendResponse):

2021-02-25  Razvan Caliman  <rcaliman@apple.com>

        Web Inspector: List of grid nodes is incomplete in Layout sidebar panel
        https://bugs.webkit.org/show_bug.cgi?id=222364
        <rdar://problem/74700960>

        Reviewed by Devin Rousso.

        Update inspector protocol description for CSS domain to mention default value for
        `layoutContextTypeChangedMode` ("observed") and clarify behavior of "all" value.

        * inspector/protocol/CSS.json:

2021-02-25  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r273469.
        https://bugs.webkit.org/show_bug.cgi?id=222417

        Broke 30+ debug layout tests

        Reverted changeset:

        "Add stubs to enable SafariForWebKitDevelopment to launch"
        https://bugs.webkit.org/show_bug.cgi?id=222388
        https://trac.webkit.org/changeset/273469

2021-02-25  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        Fix signed vs unsigned comparision warning in JSBigInt
        https://bugs.webkit.org/show_bug.cgi?id=222400

        Reviewed by Yusuke Suzuki.

        Fix the warning about comparing uint64_t with int64_t in JSBigInt.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::parseInt):

2021-02-24  Alex Christensen  <achristensen@webkit.org>

        Add stubs to enable SafariForWebKitDevelopment to launch
        https://bugs.webkit.org/show_bug.cgi?id=222388

        Reviewed by Myles Maxfield.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/SymbolStubsForSafariCompatibility.mm: Added.
        (WTF::String::String):
        (WTF::JSONImpl::ObjectBase::getArray const):
        (WTF::JSONImpl::ObjectBase::getValue const):
        (WTF::JSONImpl::ObjectBase::getObject const):
        (Inspector::BackendDispatcher::sendResponse):

2021-02-24  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r273373.

        The test added with this change is frequently failing

        Reverted changeset:

        "Null check ArrayBufferView RefPtr"
        https://bugs.webkit.org/show_bug.cgi?id=221569
        https://commits.webkit.org/r273373

2021-02-24  Rob Buis  <rbuis@igalia.com>

        Null check ArrayBufferView RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=221569

        Reviewed by Yusuke Suzuki.

        Null check ArrayBufferView RefPtr before using it.

        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::unsharedImpl):

2021-02-23  Michael Saboff  <msaboff@apple.com>

        [YARR JIT] Crash on overflow when compiling /(a{1000000000}b{1000000000}|c{1000000000}|)d{1000000000}e{1000000000}/.test();
        https://bugs.webkit.org/show_bug.cgi?id=220130

        Reviewed by Yusuke Suzuki.

        Changed code to subtract out the offset of a current op before adding the offset
        of the prior op when backtracking to avoid overflowing checked arithmetic.
        It looks like the code had this wrong for some time.

        * yarr/YarrJIT.cpp:

2021-02-22  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes late February 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=222303

        Unreviewed non-unified build fixes.

        * API/JSAPIValueWrapper.cpp:
        * bytecode/SetPrivateBrandVariant.h:
        * heap/HeapAnalyzer.h:
        * heap/HeapProfiler.cpp:
        * parser/ParserTokens.h:
        * runtime/DOMAttributeGetterSetter.cpp:
        * runtime/GlobalExecutable.cpp:
        * runtime/JSScriptFetchParameters.cpp:

2021-02-22  Keith Miller  <keith_miller@apple.com>

        Move asyncModuleEvaluation into its own function and use intrinsic constants
        https://bugs.webkit.org/show_bug.cgi?id=222281

        Reviewed by Yusuke Suzuki.

        Also delete an unused field on the module entry.

        * builtins/ModuleLoader.js:
        (globalPrivate.newRegistryEntry):
        (moduleEvaluation):
        (async asyncModuleEvaluation):
        * runtime/JSModuleLoader.cpp:

2021-02-22  Keith Miller  <keith_miller@apple.com>

        Remove unused internal fields from AbstractModuleLoader
        https://bugs.webkit.org/show_bug.cgi?id=222256

        Reviewed by Saam Barati.

        * runtime/AbstractModuleRecord.h:
        (JSC::AbstractModuleRecord::initialValues):

2021-02-21  Lauro Moura  <lmoura@igalia.com>

        Fix warning after r273225
        https://bugs.webkit.org/show_bug.cgi?id=222257

        Reviewed by Keith Miller.

        The UNLIKELY condition raises a warn with "suggest parentheses around
        ‘&&’ within ‘||’" for the last pair.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseUnaryExpression):

2021-02-21  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix CMake build.

        * CMakeLists.txt:

2021-02-21  Keith Miller  <keith_miller@apple.com>

        Implement the Top-level await proposal
        https://bugs.webkit.org/show_bug.cgi?id=202484

        Reviewed by Yusuke Suzuki.

        This patch adds support for the TLA proposal. The bulk of this patch is adding a couple of main parts.

         1) converting the AbstractModuleRecord to contain many of same internal fields as JSGenerator so much of the async codegen can be shared.
        2) having the link phase of the module loader record whether a module subgraph is async.
        3) teaching the module loader that evaluating a module may require more than one vm entry and forwarding the awaited value as well as the resume mode to the VM.

         One thing particularly interesting about this patch is that moduleEvaluation now *sometimes* (when a strongly connected subgraph is async) will return a promise. This happened to already be awaited when called from loadAndEvaluateModule (unnecessarily before) but now also needs to be handled by requestImportModule.

         No new tests because every test I came up with was subsumed by tests already in test262.

        * API/JSAPIGlobalObject.h:
        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderEvaluate):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/ModuleLoader.js:
        (globalPrivate.newRegistryEntry):
        (link):
        (async requestImportModule):
        (moduleEvaluation): Deleted.
        (requestImportModule): Deleted.
        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::BytecodeGeneratorification::run):
        (JSC::performGeneratorification):
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        * bytecode/UnlinkedModuleProgramCodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitWillLeaveCallFrameDebugHook):
        (JSC::BytecodeGenerator::emitGenericEnumeration):
        (JSC::BytecodeGenerator::emitYieldPoint):
        (JSC::BytecodeGenerator::emitYield):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitGeneratorStateChange):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::generatorStateRegister):
        (JSC::BytecodeGenerator::generatorValueRegister):
        (JSC::BytecodeGenerator::generatorResumeModeRegister):
        (JSC::BytecodeGenerator::generatorFrameRegister):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::abstractModuleRecordInternalFieldIndex):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_getAbstractModuleRecordInternalField):
        (JSC::FunctionNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeModuleProgram):
        * interpreter/Interpreter.h:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createAwait):
        (JSC::ASTBuilder::usesAwait):
        * parser/Nodes.cpp:
        (JSC::ModuleProgramNode::ModuleProgramNode):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::JSToken::dump const):
        (JSC::Parser<LexerType>::parseForStatement):
        (JSC::Parser<LexerType>::parseAwaitExpression):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        (JSC::Parser<LexerType>::parseUnaryExpression):
        * parser/ParserModes.h:
        * parser/ParserTokens.h:
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::finishCreation):
        (JSC::AbstractModuleRecord::link):
        (JSC::AbstractModuleRecord::evaluate):
        * runtime/AbstractModuleRecord.h:
        (JSC::AbstractModuleRecord::initialValues):
        (JSC::AbstractModuleRecord::internalField):
        (JSC::AbstractModuleRecord::internalField const):
        * runtime/JSAsyncGenerator.h:
        * runtime/JSGenerator.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::evaluate):
        (JSC::JSModuleLoader::evaluateNonVirtual):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSModuleLoader.h:
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::link):
        (JSC::JSModuleRecord::evaluate):
        * runtime/JSModuleRecord.h:
        * runtime/ModuleProgramExecutable.h:
        * runtime/OptionsList.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::dump const):
        * runtime/SymbolTable.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        (JSC::WebAssemblyModuleRecord::linkImpl):
        * wasm/js/WebAssemblyModuleRecord.h:

2021-02-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSInternalPromise::then can fail if execution is terminated
        https://bugs.webkit.org/show_bug.cgi?id=222244

        Reviewed by Mark Lam.

        JSInternalPromise::then assumed that call's result is always JSInternalPromise.
        But this is wrong if termination exception is thrown. In that case, this call fails.
        This patch makes it robust against this behavior.

        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::then):

2021-02-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove vm.topCallFrame storing in Baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=222162

        Reviewed by Mark Lam.

        This patch removes vm.topCallFrame storing in the Baseline JIT for ports that can USE(BUILTIN_FRAME_ADDRESS).
        Also refactored some CommonSlowPath functions so that they can start using __builtin_frame_address later
        instead of requiring that CallFrame be passed in.

        * jit/JITInlines.h:
        (JSC::JIT::updateTopCallFrame):
        * runtime/CommonSlowPaths.cpp:
        (JSC::iteratorOpenTryFastImpl):
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        (JSC::iteratorNextTryFastImpl):

2021-02-19  Yusuke Suzuki  <ysuzuki@apple.com>

        JS Modules in Workers
        https://bugs.webkit.org/show_bug.cgi?id=164860

        Reviewed by Saam Barati.

        Add error information to extract this in WebCore's module loader.
        Currently, we are using Promise pipeline, and this makes it a bit difficult to extract error information.
        This error information attached in this patch allows us to extract SyntaxError in WebCore, and throwing
        JS SyntaxError instead of AbortError.

        We are planning to update our module pipieline not using Promises in the future. The current design derived
        from the original module loader pipeline where using Promises is critical. But now, that proposal was abandoned,
        so we can just simplify the module loader.

        * runtime/AggregateError.cpp:
        (JSC::AggregateError::AggregateError):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (JSC::createGetterTypeError):
        (JSC::throwSyntaxError):
        * runtime/Error.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::sanitizedMessageString):
        (JSC::ErrorInstance::sanitizedNameString):
        (JSC::ErrorInstance::sanitizedToString):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::errorType const):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        (JSC::NativeErrorConstructor<errorType>::callImpl):
        * runtime/NullSetterFunction.cpp:
        (JSC::NullSetterFunctionInternal::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::JSWebAssemblyCompileError::JSWebAssemblyCompileError):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::JSWebAssemblyLinkError::JSWebAssemblyLinkError):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::JSWebAssemblyRuntimeError::JSWebAssemblyRuntimeError):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-19  Chris Dumez  <cdumez@apple.com>

        Review remaining usage of autorelease to make sure it is necessary
        https://bugs.webkit.org/show_bug.cgi?id=222177

        Reviewed by Geoffrey Garen.

        * API/JSContext.mm:
        (+[JSContext contextWithJSGlobalContextRef:]):
        * API/JSVirtualMachine.mm:
        (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
        * API/JSWrapperMap.mm:
        (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):

2021-02-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Not allocating empty object for Intl options
        https://bugs.webkit.org/show_bug.cgi?id=222203

        Reviewed by Mark Lam.

        This patch introduces Optional<JSObject&> to Intl options to explicitly mark it as maybe-null.
        This maybe-null object can appear when the options is undefined. According to the spec, we allocates
        empty object (with null [[Prototype]]) for this case, but accessing this object's property is non-observable
        since this does not have [[Prototype]]. As a result, we can skip allocation and accesses in this case.

        This can also pave the way to avoiding allocations of options objects for Date#toLocaleString etc.'s specific cases.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::toDateTimeOptionsAnyDate): Deleted.
        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        * runtime/IntlListFormat.cpp:
        (JSC::IntlListFormat::initializeListFormat):
        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::initializeLocale):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatInlines.h:
        (JSC::setNumberFormatDigitOptions):
        * runtime/IntlObject.cpp:
        (JSC::intlBooleanOption):
        (JSC::intlStringOption):
        (JSC::intlNumberOption):
        (JSC::supportedLocales):
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::intlOption):
        (JSC::intlGetOptionsObject): Deleted.
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        * runtime/IntlSegmenter.cpp:
        (JSC::IntlSegmenter::initializeSegmenter):

2021-02-19  Michael Saboff  <msaboff@apple.com>

        Minor fixes to RegExp match indices after r273086
        https://bugs.webkit.org/show_bug.cgi?id=222157

        Reviewed by Yusuke Suzuki.

        When hasIndices is true, but there aren't any named groups, the spec says that we should
        create the indices.groups property is the value undefined.
        Increased the size of FlagsString to 7 plus terminater to account for the new 'd' flags.

        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):
        * runtime/RegExpPrototype.cpp:

2021-02-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not use toObject for options in new Intl constructors
        https://bugs.webkit.org/show_bug.cgi?id=222164

        Reviewed by Alexey Shvayka.

        New spec change[1] introduced stricter GetOptionsObject for relatively new Intl constructors: Intl.DisplayNames, Intl.ListFormat, and Intl.Segmenter[2].
        This does not perform `ToObject`, and instead,

            1. If the input is an undefined, then it returns empty object.
            2. If the input is an object, then it returns this object.
            3. Otherwise, throwing a TypeError.

        This patch implements it.

        [1]: https://github.com/tc39/ecma402/pull/538
        [2]: https://github.com/tc39/proposal-intl-segmenter/issues/132

        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        * runtime/IntlListFormat.cpp:
        (JSC::IntlListFormat::initializeListFormat):
        * runtime/IntlObjectInlines.h:
        (JSC::intlGetOptionsObject):
        * runtime/IntlSegmenter.cpp:
        (JSC::IntlSegmenter::initializeSegmenter):

2021-02-19  Mark Lam  <mark.lam@apple.com>

        Need to rebase builtins generator tests results.
        https://bugs.webkit.org/show_bug.cgi?id=222184
        rdar://74528501

        Reviewed by Yusuke Suzuki.

        * Scripts/tests/builtins/expected/WebCore-AnotherGuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result:

2021-02-19  Mark Lam  <mark.lam@apple.com>

        Implement a GC verifier.
        https://bugs.webkit.org/show_bug.cgi?id=217274
        rdar://56255683

        Reviewed by Filip Pizlo and Saam Barati.

        The idea behind the GC verifier is that in the GC End phase before we finalize
        and sweep, we'll do a simple stop the world synchronous full GC with the
        VerifierSlotVisitor.  The VerifierSlotVisitor will collect it's own information
        on whether a JS cell should be marked or not.  After this verifier GC pass, we'll
        compare the mark results.

        If the verifier GC says a cell should be marked, then the real GC should have
        marked the cell.  The reverse is not true: if the verifier does not mark a cell,
        it is still OK for the real GC to mark it.  For example, in an eden GC, all old
        generation cells would be considered mark by the real GC though the verifier would
        know better if they are already dead.

        Implementation details:

        1. SlotVisitor (only used by the real GC) now inherits from a new abstract class,
           AbstractSlotVisitor.

           VerifierSlotVisitor (only used by the verifier GC) also inherits from
           AbstractSlotVisitor.

        2. AbstractSlotVisitor declares many virtual methods.

           SlotVisitor implements some of these virtual methods as inline and final.
           If the client is invoking one these methods and knows that it will be operating
           on a SlotVisitor, the method being final allows it to be inlined into the client
           instead of going through the virtual dispatch.

           For the VerifierSlotVisitor, these methods will always be invoked by virtual
           dispatch via the AbstractSlotVisitor abstraction.

        3. Almost all methods that takes a SlotVisitor previously (with a few exceptions)
           will now be templatized, and specialized to either take a SlotVisitor or an
           AbstractSlotVisitor.

           The cell MethodTable will now have 2 versions of visitChildren and visitOutputConstraints:
           one for SlotVisitor, and one for AbstractSlotVisitor.

           The reason we don't wire the 2nd version to VerifierSlotVisitor (instead of
           AbstractSlotVisitor) is because we don't need the GC verifier to run at top
           speed (though we don't want it to be too slow).  Also, having hooks for using
           an AbstractSlotVisitor gives us more utility for implementing other types of
           GC checkers / analyzers in the future as subclasses of AbstractSlotVisitor.

        4. Some minority of methods that used to take a SlotVisitor but are not critical
           to performance, will now just take an AbstractSlotVisitor instead.  For example,
           see TypeProfilerLog::visit().

        5. isReachableFromOpaqueRoots() methods will also only take an AbstractSlotVisitor.

           The reason this is OK is because isReachableFromOpaqueRoots() only uses the
           visitor's addOpaqueRoot() and containsOpaqueRoot() methods, which are implemented
           in the AbstractSlotVisitor itself.

           For SlotVisitor, the m_opaqueRoot field will reference Heap::m_opaqueRoots.
           For VerifierSlotVisitor, the m_opaqueRoot field will reference its own
           opaque roots storage.

           This implementation of addOpaqueRoot() is perf neutral for SlotVisitor because
           where it would previously invoke m_heap.m_opaqueRoots.add(), it will now
           invoke m_opaqueRoot.add() instead where m_opaqueRoot points to m_heap.m_opaqueRoots.

           Ditto for AbstractSlotVisitor::containsOpaqueRoot().

        6. When reifying a templatized visit method, we do it in 2 ways:

           a. Implement the template method as an ALWAYS_INLINE Impl method, and have
              2 visit methods (taking a SlotVisitor and an AbstractSlotVisitor respectively)
              inline the Impl method.  For example, see JSObject::visitChildrenImpl().

           b. Just templatize the visit method, and explicitly instantiate it with a SlotVisitor
              and an AbstractSlotVisitor.  For example, see DesiredTransition::visitChildren().

           The reason we need form (a) is if:

            i. we need to export the visit methods.
               For example, see JSObject:visitChildren().

               Note: A Clang engineer told me that "there's no way to export an explicit
               instantiation that will make it a strong symbol."  This is because "C++ does not
               provide any standard way to guarantee that an explicit instantiation is unique,
               and Clang hasn't added any extension to do so."

           ii. the visit method is an override of a virtual method.
               For example, see DFG::Scannable::visitChildren() and DFG::Graph::visitChildren().

           Otherwise, we'll prefer form (b) as it is natural C++.

        7. Because templatizing all the visit methods requires a lot of boiler plate code,
           we introduce some macros in SlotVisitorMacros.h to reduce some of the boiler
           plate burden.

           We especially try to do this for methods of form (a) (see (6) above) which
           require more boiler plate.

        8. The driver of the real GC is MarkingConstraintSet::executeConvergence() which
           runs with the MarkingConstraintSolver.

           The driver of the verifier GC is Heap::verifyGC(), which has a loop to drain
           marked objects and execute contraints.

        9. The GC verifier is built in by default but disabled.  The relevant options are:
           JSC_verifyGC and JSC_verboseVerifyGC.

           JSC_verifyGC will enable the GC verifier.

           If JSC_verifyGC is true and the verifier finds a cell that is
           erroneously not marked by the real GC, it will dump an error message and then
           crash with a RELEASE_ASSERT.

           JSC_verboseVerifyGC will enable the GC verifier along with some more heavy
           weight record keeping (i.e. tracking the parent / owner cell that marked a
           cell, and capturing the call stack when the marked cell is appended to the mark
           stack).

           If JSC_verboseVerifyGC is true and the verifier finds a cell that is
           erroneously not marked by the real GC, it will dump the parent cell and
           captured stack along with an error message before crashing.  This extra
           information provides the starting point for debugging GC bugs found by the
           verifier.

           Enabling JSC_verboseVerifyGC will automatically enable JSC_verifyGC.

        10. Non-determinism in the real GC.

           The GC verifier's algorithm relies on the real GC being deterministic.  However,
           there are a few places where this is not true:

           a. Marking conservative roots on the mutator stacks.

              By the time the verifier GC runs (in the GC End phase), the mutator stacks
              will look completely different than what the real GC saw.  To work around
              this, if the verifier is enabled, then every conservative root captured by
              the real GC will also be added to the verifier's mark stack.

              When running verifyGC() in the End phase, the conservative root scans will be
              treated as no-ops.

           b. CodeBlock::shouldJettisonDueToOldAge() may return a different value.

              This is possible because the codeBlock may be in mid compilation while the
              real GC is in progress.

              CodeBlock::shouldVisitStrongly() calls shouldJettisonDueToOldAge(), and may
              see an old LLInt codeBlock whose timeToLive has expired.  As a result,
              shouldJettisonDueToOldAge() returns true and shouldVisitStrongly() will
              return false for the real GC, leading to it not marking the codeBlock.

              However, before the verifier GC gets to run, baseline compilation on the
              codeBlock may finish.  As a baseline codeBlock now, it gets a longer time
              to live.

              As a result, when the verifier GC runs, shouldJettisonDueToOldAge() will
              return false, and shouldVisitStrongly() in turn returns true.  This results
              in the verifier GC marking the codeBlock (and its children) when the real
              GC did not, which leads to a false error.  This is not a real error because
              if the real GC did not mark the code block, it will simply get jettisoned,
              and can be reinstantiated when needed later.  There's no GC bug here.
              However, we do need to work around this to prevent the false error for the
              GC verifier.

              The work around is to introduce a CodeBlock::m_visitChildrenSkippedDueToOldAge
              flag that records what the real GC decided in shouldJettisonDueToOldAge().
              This allows the verifier GC to replay the same decision and get a consistent
              result.

           c. CodeBlock::propagateTransitions() will only do a best effort at visiting
              cells in ICs, etc.  If a cell is not already strongly marked by the time
              CodeBlock::propagateTransitions() checks it, propagateTransitions() will
              not mark other cells that are reachable from it.

              Since the real GC does marking on concurrent threads, marking order is not
              deterministic.  CodeBlock::propagateTransitions() may or may not see a cell
              as already marked by the time it runs.

              The verifier GC may mark some of these cells in a different order than the
              real GC.  As a result, in the verifier GC, CodeBlock::propagateTransitions()
              may see a cell as marked (and therefore, visit its children) when it did
              not for the real GC.

              To work around this, we currently add a SuppressGCVerifierScope to
              CodeBlock::propagateTransitions() to pessimize the verifier, and assume that
              propagateTransitions() will mark nothing.

              SuppressGCVerifierScope is a blunt hammer that stops the verifier GC from
              analyzing all cells potentially reachable via CodeBlock::propagateTransitions().
              In the future, it may be possible to refine this and track which cells were
              actually skipped over (like we did for shouldJettisonDueToOldAge()).
              However, this decision tracking needs to be done in the real GC, and can be
              very expensive in terms of performance.  The shouldJettisonDueToOldAge()
              case is rare, and as such lends itself to this more fine grain tracking
              without hurting performance.  The decisions made in CodeBlock::propagateTransitions()
              are not as rare, and hence, it would hurt performance if we did fine grain
              decision tracking there (at least or now).

        11. Marking in the verifier GC.

            The real GC tracks cell marks using a Bitmap in the MarkedBlocks.  The verifier
            GC keeps tracks of MarkedBlock cell marks using a Bitmap on the side, stashed
            away in a HashMap.

            To improve the verifier marking performance, we reserve a void* m_verifierMemo
            pointer in the MarkedBlock, which the verifier will employ to cache its
            MarkedBlockData for that MarkedBlock.  This allows the verifier to get to its
            side Bitmap without having to do a HashMap look up for every cell.

            Size-wise, in the current 16K MarkBlocks, there is previously room for 1005.5
            atoms after reserving space for the MarkedBlock::Footer.  Since we can never
            allocate half an atom anyway, that .5 atom gives us the 8 bytes we need for
            the m_verifierMemo pointer, which we'll put in the MarkedBlock::Footer.  With
            this patch, each MarkedBlock will now have exactly 1005 atoms available for
            allocation.

        I ran JetStream2 and Speedometer2 locally on a MacBookAir10,1, MacBookPro16,1,
        and a 12.9” 4th Gen iPad Pro.  The benchmark results for these were all neutral.

        The design of the GC verifier is such that it incurs almost no additional runtime
        memory overhead if not in use.  Code size does increase significantly because
        there are now 2 variants of most of the methods that take a SlotVisitor.

        When in use, the additional runtime memory is encapsulated in the
        VerifierSlotVisitor, which is instantiated and destructed every GC cycle.  Hence,
        it can affect peak memory usage during GCs, but the cost is transient.  It does
        not persist past the GC End phase.

        * API/JSAPIWrapperObject.h:
        * API/JSAPIWrapperObject.mm:
        (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
        (JSC::JSAPIWrapperObject::visitChildrenImpl):
        (JSC::JSAPIWrapperObject::visitChildren): Deleted.
        * API/JSCallbackObject.cpp:
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::visitChildren):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        (JSC::JSCallbackObject<Parent>::visitChildrenImpl):
        * API/JSManagedValue.mm:
        (JSManagedValueHandleOwner::isReachableFromOpaqueRoots):
        * API/JSMarkingConstraintPrivate.cpp:
        (JSC::isMarked):
        (JSContextGroupAddMarkingConstraint):
        * API/JSVirtualMachine.mm:
        (scanExternalObjectGraph):
        (scanExternalRememberedSet):
        * API/JSVirtualMachineInternal.h:
        * API/MarkedJSValueRefArray.cpp:
        (JSC::MarkedJSValueRefArray::visitAggregate):
        * API/MarkedJSValueRefArray.h:
        * API/glib/JSAPIWrapperGlobalObject.cpp:
        (JSC::JSAPIWrapperGlobalObject::visitChildren): Deleted.
        * API/glib/JSAPIWrapperGlobalObject.h:
        * API/glib/JSAPIWrapperObjectGLib.cpp:
        (JSAPIWrapperObjectHandleOwner::isReachableFromOpaqueRoots):
        (JSC::JSAPIWrapperObject::visitChildrenImpl):
        (JSC::JSAPIWrapperObject::visitChildren): Deleted.
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_header.py:
        (BuiltinsInternalsWrapperHeaderGenerator):
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:
        (BuiltinsInternalsWrapperImplementationGenerator.generate_visit_method):
        * Scripts/wkbuiltins/builtins_templates.py:
        * Sources.txt:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::propagateTransitions const):
        (JSC::AccessCase::visitAggregateImpl const):
        (JSC::AccessCase::visitAggregate const): Deleted.
        * bytecode/AccessCase.h:
        * bytecode/ByValInfo.cpp:
        (JSC::ByValInfo::visitAggregateImpl):
        (JSC::ByValInfo::visitAggregate): Deleted.
        * bytecode/ByValInfo.h:
        * bytecode/CheckPrivateBrandStatus.cpp:
        (JSC::CheckPrivateBrandStatus::visitAggregateImpl):
        (JSC::CheckPrivateBrandStatus::markIfCheap):
        (JSC::CheckPrivateBrandStatus::visitAggregate): Deleted.
        * bytecode/CheckPrivateBrandStatus.h:
        * bytecode/CheckPrivateBrandVariant.cpp:
        (JSC::CheckPrivateBrandVariant::markIfCheap):
        (JSC::CheckPrivateBrandVariant::visitAggregateImpl):
        (JSC::CheckPrivateBrandVariant::visitAggregate): Deleted.
        * bytecode/CheckPrivateBrandVariant.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::visitChildrenImpl):
        (JSC::CodeBlock::visitChildren):
        (JSC::CodeBlock::shouldVisitStrongly):
        (JSC::CodeBlock::shouldJettisonDueToOldAge):
        (JSC::shouldMarkTransition):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::determineLiveness):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::visitOSRExitTargets):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        * bytecode/CodeBlock.h:
        * bytecode/DeleteByIdVariant.cpp:
        (JSC::DeleteByIdVariant::visitAggregateImpl):
        (JSC::DeleteByIdVariant::markIfCheap):
        (JSC::DeleteByIdVariant::visitAggregate): Deleted.
        * bytecode/DeleteByIdVariant.h:
        * bytecode/DeleteByStatus.cpp:
        (JSC::DeleteByStatus::visitAggregateImpl):
        (JSC::DeleteByStatus::markIfCheap):
        (JSC::DeleteByStatus::visitAggregate): Deleted.
        * bytecode/DeleteByStatus.h:
        * bytecode/DirectEvalCodeCache.cpp:
        (JSC::DirectEvalCodeCache::visitAggregateImpl):
        (JSC::DirectEvalCodeCache::visitAggregate): Deleted.
        * bytecode/DirectEvalCodeCache.h:
        * bytecode/ExecutableToCodeBlockEdge.cpp:
        (JSC::ExecutableToCodeBlockEdge::visitChildrenImpl):
        (JSC::ExecutableToCodeBlockEdge::visitOutputConstraintsImpl):
        (JSC::ExecutableToCodeBlockEdge::runConstraint):
        (JSC::ExecutableToCodeBlockEdge::visitChildren): Deleted.
        (JSC::ExecutableToCodeBlockEdge::visitOutputConstraints): Deleted.
        * bytecode/ExecutableToCodeBlockEdge.h:
        * bytecode/GetByIdVariant.cpp:
        (JSC::GetByIdVariant::visitAggregateImpl):
        (JSC::GetByIdVariant::markIfCheap):
        (JSC::GetByIdVariant::visitAggregate): Deleted.
        * bytecode/GetByIdVariant.h:
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::visitAggregateImpl):
        (JSC::GetByStatus::markIfCheap):
        (JSC::GetByStatus::visitAggregate): Deleted.
        * bytecode/GetByStatus.h:
        * bytecode/InByIdStatus.cpp:
        (JSC::InByIdStatus::markIfCheap):
        * bytecode/InByIdStatus.h:
        * bytecode/InByIdVariant.cpp:
        (JSC::InByIdVariant::markIfCheap):
        * bytecode/InByIdVariant.h:
        * bytecode/InternalFunctionAllocationProfile.h:
        (JSC::InternalFunctionAllocationProfile::visitAggregate):
        * bytecode/ObjectAllocationProfile.h:
        (JSC::ObjectAllocationProfileBase::visitAggregate):
        (JSC::ObjectAllocationProfileWithPrototype::visitAggregate):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::propagateTransitions const):
        (JSC::PolymorphicAccess::visitAggregateImpl):
        (JSC::PolymorphicAccess::visitAggregate): Deleted.
        * bytecode/PolymorphicAccess.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::markIfCheap):
        * bytecode/PutByIdStatus.h:
        * bytecode/PutByIdVariant.cpp:
        (JSC::PutByIdVariant::markIfCheap):
        * bytecode/PutByIdVariant.h:
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::visitAggregateImpl):
        (JSC::RecordedStatuses::markIfCheap):
        (JSC::RecordedStatuses::visitAggregate): Deleted.
        * bytecode/RecordedStatuses.h:
        * bytecode/SetPrivateBrandStatus.cpp:
        (JSC::SetPrivateBrandStatus::visitAggregateImpl):
        (JSC::SetPrivateBrandStatus::markIfCheap):
        (JSC::SetPrivateBrandStatus::visitAggregate): Deleted.
        * bytecode/SetPrivateBrandStatus.h:
        * bytecode/SetPrivateBrandVariant.cpp:
        (JSC::SetPrivateBrandVariant::markIfCheap):
        (JSC::SetPrivateBrandVariant::visitAggregateImpl):
        (JSC::SetPrivateBrandVariant::visitAggregate): Deleted.
        * bytecode/SetPrivateBrandVariant.h:
        * bytecode/StructureSet.cpp:
        (JSC::StructureSet::markIfCheap const):
        * bytecode/StructureSet.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitAggregateImpl):
        (JSC::StructureStubInfo::propagateTransitions):
        (JSC::StructureStubInfo::visitAggregate): Deleted.
        * bytecode/StructureStubInfo.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::visitChildrenImpl):
        (JSC::UnlinkedCodeBlock::visitChildren): Deleted.
        * bytecode/UnlinkedCodeBlock.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::visitChildrenImpl):
        (JSC::UnlinkedFunctionExecutable::visitChildren): Deleted.
        * bytecode/UnlinkedFunctionExecutable.h:
        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::visitChildrenImpl):
        (JSC::DebuggerScope::visitChildren): Deleted.
        * debugger/DebuggerScope.h:
        * dfg/DFGDesiredTransitions.cpp:
        (JSC::DFG::DesiredTransition::visitChildren):
        (JSC::DFG::DesiredTransitions::visitChildren):
        * dfg/DFGDesiredTransitions.h:
        * dfg/DFGDesiredWeakReferences.cpp:
        (JSC::DFG::DesiredWeakReferences::visitChildren):
        * dfg/DFGDesiredWeakReferences.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::visitChildrenImpl):
        (JSC::DFG::Graph::visitChildren):
        * dfg/DFGGraph.h:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::checkLivenessAndVisitChildren):
        (JSC::DFG::Plan::isKnownToBeLiveDuringGC):
        (JSC::DFG::Plan::isKnownToBeLiveAfterGC):
        * dfg/DFGPlan.h:
        * dfg/DFGPlanInlines.h:
        (JSC::DFG::Plan::iterateCodeBlocksForGC):
        * dfg/DFGSafepoint.cpp:
        (JSC::DFG::Safepoint::checkLivenessAndVisitChildren):
        (JSC::DFG::Safepoint::isKnownToBeLiveDuringGC):
        (JSC::DFG::Safepoint::isKnownToBeLiveAfterGC):
        * dfg/DFGSafepoint.h:
        * dfg/DFGScannable.h:
        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::visitWeakReferences):
        (JSC::DFG::Worklist::removeDeadPlans):
        * dfg/DFGWorklist.h:
        * dfg/DFGWorklistInlines.h:
        (JSC::DFG::iterateCodeBlocksForGC):
        (JSC::DFG::Worklist::iterateCodeBlocksForGC):
        * heap/AbstractSlotVisitor.h: Added.
        (JSC::AbstractSlotVisitor::Context::cell const):
        (JSC::AbstractSlotVisitor::SuppressGCVerifierScope::SuppressGCVerifierScope):
        (JSC::AbstractSlotVisitor::SuppressGCVerifierScope::~SuppressGCVerifierScope):
        (JSC::AbstractSlotVisitor::DefaultMarkingViolationAssertionScope::DefaultMarkingViolationAssertionScope):
        (JSC::AbstractSlotVisitor::collectorMarkStack):
        (JSC::AbstractSlotVisitor::mutatorMarkStack):
        (JSC::AbstractSlotVisitor::collectorMarkStack const):
        (JSC::AbstractSlotVisitor::mutatorMarkStack const):
        (JSC::AbstractSlotVisitor::isEmpty):
        (JSC::AbstractSlotVisitor::setIgnoreNewOpaqueRoots):
        (JSC::AbstractSlotVisitor::visitCount const):
        (JSC::AbstractSlotVisitor::addToVisitCount):
        (JSC::AbstractSlotVisitor::rootMarkReason const):
        (JSC::AbstractSlotVisitor::setRootMarkReason):
        (JSC::AbstractSlotVisitor::didRace):
        (JSC::AbstractSlotVisitor::codeName const):
        (JSC::SetRootMarkReasonScope::SetRootMarkReasonScope):
        (JSC::SetRootMarkReasonScope::~SetRootMarkReasonScope):
        * heap/AbstractSlotVisitorInlines.h: Added.
        (JSC::AbstractSlotVisitor::Context::Context):
        (JSC::AbstractSlotVisitor::Context::~Context):
        (JSC::AbstractSlotVisitor::AbstractSlotVisitor):
        (JSC::AbstractSlotVisitor::heap const):
        (JSC::AbstractSlotVisitor::vm):
        (JSC::AbstractSlotVisitor::vm const):
        (JSC::AbstractSlotVisitor::addOpaqueRoot):
        (JSC::AbstractSlotVisitor::containsOpaqueRoot const):
        (JSC::AbstractSlotVisitor::append):
        (JSC::AbstractSlotVisitor::appendHidden):
        (JSC::AbstractSlotVisitor::appendHiddenUnbarriered):
        (JSC::AbstractSlotVisitor::appendValues):
        (JSC::AbstractSlotVisitor::appendValuesHidden):
        (JSC::AbstractSlotVisitor::appendUnbarriered):
        (JSC::AbstractSlotVisitor::parentCell const):
        (JSC::AbstractSlotVisitor::reset):
        * heap/HandleSet.cpp:
        (JSC::HandleSet::visitStrongHandles):
        * heap/HandleSet.h:
        * heap/Heap.cpp:
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocksWithoutHoldingLocks):
        (JSC::Heap::runEndPhase):
        (JSC::Heap::willStartCollection):
        (JSC::scanExternalRememberedSet):
        (JSC::serviceSamplingProfiler):
        (JSC::Heap::addCoreConstraints):
        (JSC::Heap::verifyGC):
        (JSC::Heap::isAnalyzingHeap const): Deleted.
        * heap/Heap.h:
        (JSC::Heap::isMarkingForGCVerifier const):
        (JSC::Heap::numOpaqueRoots const): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::isMarked):
        * heap/HeapProfiler.cpp:
        (JSC::HeapProfiler::setActiveHeapAnalyzer):
        * heap/IsoCellSet.h:
        * heap/IsoCellSetInlines.h:
        (JSC::IsoCellSet::forEachMarkedCellInParallel):
        * heap/JITStubRoutineSet.cpp:
        (JSC::JITStubRoutineSet::traceMarkedStubRoutines):
        * heap/JITStubRoutineSet.h:
        (JSC::JITStubRoutineSet::traceMarkedStubRoutines):
        * heap/MarkStackMergingConstraint.cpp:
        (JSC::MarkStackMergingConstraint::prepareToExecuteImpl):
        (JSC::MarkStackMergingConstraint::executeImplImpl):
        (JSC::MarkStackMergingConstraint::executeImpl):
        * heap/MarkStackMergingConstraint.h:
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::atomAt const):
        (JSC::MarkedBlock::setVerifierMemo):
        (JSC::MarkedBlock::verifierMemo const):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::visitWeakSets):
        * heap/MarkedSpace.h:
        * heap/MarkingConstraint.cpp:
        (JSC::MarkingConstraint::execute):
        (JSC::MarkingConstraint::executeSynchronously):
        (JSC::MarkingConstraint::prepareToExecute):
        (JSC::MarkingConstraint::doParallelWork):
        (JSC::MarkingConstraint::prepareToExecuteImpl):
        * heap/MarkingConstraint.h:
        * heap/MarkingConstraintExecutorPair.h: Added.
        (JSC::MarkingConstraintExecutorPair::MarkingConstraintExecutorPair):
        (JSC::MarkingConstraintExecutorPair::execute):
        * heap/MarkingConstraintSet.cpp:
        (JSC::MarkingConstraintSet::add):
        (JSC::MarkingConstraintSet::executeAllSynchronously):
        (JSC::MarkingConstraintSet::executeAll): Deleted.
        * heap/MarkingConstraintSet.h:
        (JSC::MarkingConstraintSet::add):
        * heap/MarkingConstraintSolver.cpp:
        * heap/MarkingConstraintSolver.h:
        * heap/SimpleMarkingConstraint.cpp:
        (JSC::SimpleMarkingConstraint::SimpleMarkingConstraint):
        (JSC::SimpleMarkingConstraint::executeImplImpl):
        (JSC::SimpleMarkingConstraint::executeImpl):
        * heap/SimpleMarkingConstraint.h:
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::SlotVisitor):
        (JSC::SlotVisitor::reset):
        (JSC::SlotVisitor::appendSlow):
        (JSC::SlotVisitor::addParallelConstraintTask):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::collectorMarkStack): Deleted.
        (JSC::SlotVisitor::mutatorMarkStack): Deleted.
        (JSC::SlotVisitor::collectorMarkStack const): Deleted.
        (JSC::SlotVisitor::mutatorMarkStack const): Deleted.
        (JSC::SlotVisitor::isEmpty): Deleted.
        (JSC::SlotVisitor::isFirstVisit const): Deleted.
        (JSC::SlotVisitor::bytesVisited const): Deleted.
        (JSC::SlotVisitor::visitCount const): Deleted.
        (JSC::SlotVisitor::addToVisitCount): Deleted.
        (JSC::SlotVisitor::isAnalyzingHeap const): Deleted.
        (JSC::SlotVisitor::heapAnalyzer const): Deleted.
        (JSC::SlotVisitor::rootMarkReason const): Deleted.
        (JSC::SlotVisitor::setRootMarkReason): Deleted.
        (JSC::SlotVisitor::markingVersion const): Deleted.
        (JSC::SlotVisitor::mutatorIsStopped const): Deleted.
        (JSC::SlotVisitor::rightToRun): Deleted.
        (JSC::SlotVisitor::didRace): Deleted.
        (JSC::SlotVisitor::setIgnoreNewOpaqueRoots): Deleted.
        (JSC::SlotVisitor::codeName const): Deleted.
        (JSC::SetRootMarkReasonScope::SetRootMarkReasonScope): Deleted.
        (JSC::SetRootMarkReasonScope::~SetRootMarkReasonScope): Deleted.
        * heap/SlotVisitorInlines.h:
        (JSC::SlotVisitor::isMarked const):
        (JSC::SlotVisitor::addOpaqueRoot): Deleted.
        (JSC::SlotVisitor::containsOpaqueRoot const): Deleted.
        (JSC::SlotVisitor::heap const): Deleted.
        (JSC::SlotVisitor::vm): Deleted.
        (JSC::SlotVisitor::vm const): Deleted.
        * heap/SlotVisitorMacros.h: Added.
        * heap/Subspace.h:
        * heap/SubspaceInlines.h:
        (JSC::Subspace::forEachMarkedCellInParallel):
        * heap/VerifierSlotVisitor.cpp: Added.
        (JSC::MarkerData::MarkerData):
        (JSC::VerifierSlotVisitor::MarkedBlockData::MarkedBlockData):
        (JSC::VerifierSlotVisitor::MarkedBlockData::addMarkerData):
        (JSC::VerifierSlotVisitor::MarkedBlockData::markerData const):
        (JSC::VerifierSlotVisitor::PreciseAllocationData::PreciseAllocationData):
        (JSC::VerifierSlotVisitor::PreciseAllocationData::markerData const):
        (JSC::VerifierSlotVisitor::PreciseAllocationData::addMarkerData):
        (JSC::VerifierSlotVisitor::VerifierSlotVisitor):
        (JSC::VerifierSlotVisitor::~VerifierSlotVisitor):
        (JSC::VerifierSlotVisitor::addParallelConstraintTask):
        (JSC::VerifierSlotVisitor::executeConstraintTasks):
        (JSC::VerifierSlotVisitor::append):
        (JSC::VerifierSlotVisitor::appendToMarkStack):
        (JSC::VerifierSlotVisitor::appendUnbarriered):
        (JSC::VerifierSlotVisitor::appendHiddenUnbarriered):
        (JSC::VerifierSlotVisitor::drain):
        (JSC::VerifierSlotVisitor::dumpMarkerData):
        (JSC::VerifierSlotVisitor::isFirstVisit const):
        (JSC::VerifierSlotVisitor::isMarked const):
        (JSC::VerifierSlotVisitor::markAuxiliary):
        (JSC::VerifierSlotVisitor::mutatorIsStopped const):
        (JSC::VerifierSlotVisitor::testAndSetMarked):
        (JSC::VerifierSlotVisitor::setMarkedAndAppendToMarkStack):
        (JSC::VerifierSlotVisitor::visitAsConstraint):
        (JSC::VerifierSlotVisitor::visitChildren):
        * heap/VerifierSlotVisitor.h: Added.
        (JSC::VerifierSlotVisitor::MarkedBlockData::block const):
        (JSC::VerifierSlotVisitor::MarkedBlockData::atoms const):
        (JSC::VerifierSlotVisitor::MarkedBlockData::isMarked):
        (JSC::VerifierSlotVisitor::MarkedBlockData::testAndSetMarked):
        (JSC::VerifierSlotVisitor::PreciseAllocationData::allocation const):
        (JSC::VerifierSlotVisitor::appendSlow):
        * heap/VerifierSlotVisitorInlines.h: Added.
        (JSC::VerifierSlotVisitor::forEachLiveCell):
        (JSC::VerifierSlotVisitor::forEachLivePreciseAllocation):
        (JSC::VerifierSlotVisitor::forEachLiveMarkedBlockCell):
        * heap/VisitCounter.h:
        (JSC::VisitCounter::VisitCounter):
        (JSC::VisitCounter::visitor const):
        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::specializedVisit):
        (JSC::WeakBlock::visitImpl):
        (JSC::WeakBlock::visit):
        * heap/WeakBlock.h:
        * heap/WeakHandleOwner.cpp:
        (JSC::WeakHandleOwner::isReachableFromOpaqueRoots):
        * heap/WeakHandleOwner.h:
        * heap/WeakSet.cpp:
        * heap/WeakSet.h:
        (JSC::WeakSet::visit):
        * interpreter/ShadowChicken.cpp:
        (JSC::ShadowChicken::visitChildren):
        * interpreter/ShadowChicken.h:
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::MarkingGCAwareJITStubRoutine::markRequiredObjectsInternalImpl):
        (JSC::MarkingGCAwareJITStubRoutine::markRequiredObjectsInternal):
        (JSC::GCAwareJITStubRoutine::markRequiredObjectsInternal): Deleted.
        * jit/GCAwareJITStubRoutine.h:
        (JSC::GCAwareJITStubRoutine::markRequiredObjects):
        (JSC::GCAwareJITStubRoutine::markRequiredObjectsInternal):
        * jit/JITWorklist.cpp:
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallStubRoutine::markRequiredObjectsInternalImpl):
        (JSC::PolymorphicCallStubRoutine::markRequiredObjectsInternal):
        * jit/PolymorphicCallStubRoutine.h:
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::visitChildrenImpl):
        (JSC::AbstractModuleRecord::visitChildren): Deleted.
        * runtime/AbstractModuleRecord.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/ArgList.h:
        * runtime/CacheableIdentifier.h:
        * runtime/CacheableIdentifierInlines.h:
        (JSC::CacheableIdentifier::visitAggregate const):
        * runtime/ClassInfo.h:
        (JSC::MethodTable::visitChildren const):
        (JSC::MethodTable::visitOutputConstraints const):
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::visitChildrenImpl):
        (JSC::ClonedArguments::visitChildren): Deleted.
        * runtime/ClonedArguments.h:
        * runtime/DirectArguments.cpp:
        (JSC::DirectArguments::visitChildrenImpl):
        (JSC::DirectArguments::visitChildren): Deleted.
        * runtime/DirectArguments.h:
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::visitChildrenImpl):
        (JSC::EvalExecutable::visitChildren): Deleted.
        * runtime/EvalExecutable.h:
        * runtime/Exception.cpp:
        (JSC::Exception::visitChildrenImpl):
        (JSC::Exception::visitChildren): Deleted.
        * runtime/Exception.h:
        * runtime/FunctionExecutable.cpp:
        (JSC::FunctionExecutable::visitChildrenImpl):
        (JSC::FunctionExecutable::visitChildren): Deleted.
        * runtime/FunctionExecutable.h:
        * runtime/FunctionRareData.cpp:
        (JSC::FunctionRareData::visitChildrenImpl):
        (JSC::FunctionRareData::visitChildren): Deleted.
        * runtime/FunctionRareData.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::visitChildrenImpl):
        (JSC::GenericArguments<Type>::visitChildren): Deleted.
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildrenImpl):
        (JSC::GetterSetter::visitChildren): Deleted.
        * runtime/GetterSetter.h:
        * runtime/HashMapImpl.cpp:
        (JSC::HashMapBucket<Data>::visitChildrenImpl):
        (JSC::HashMapImpl<HashMapBucket>::visitChildrenImpl):
        (JSC::HashMapBucket<Data>::visitChildren): Deleted.
        (JSC::HashMapImpl<HashMapBucket>::visitChildren): Deleted.
        * runtime/HashMapImpl.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::visitChildrenImpl):
        (JSC::InternalFunction::visitChildren): Deleted.
        * runtime/InternalFunction.h:
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::visitChildrenImpl):
        (JSC::IntlCollator::visitChildren): Deleted.
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::visitChildrenImpl):
        (JSC::IntlDateTimeFormat::visitChildren): Deleted.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::visitChildrenImpl):
        (JSC::IntlLocale::visitChildren): Deleted.
        * runtime/IntlLocale.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::visitChildrenImpl):
        (JSC::IntlNumberFormat::visitChildren): Deleted.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::visitChildrenImpl):
        (JSC::IntlPluralRules::visitChildren): Deleted.
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::visitChildrenImpl):
        (JSC::IntlRelativeTimeFormat::visitChildren): Deleted.
        * runtime/IntlRelativeTimeFormat.h:
        * runtime/IntlSegmentIterator.cpp:
        (JSC::IntlSegmentIterator::visitChildrenImpl):
        (JSC::IntlSegmentIterator::visitChildren): Deleted.
        * runtime/IntlSegmentIterator.h:
        * runtime/IntlSegments.cpp:
        (JSC::IntlSegments::visitChildrenImpl):
        (JSC::IntlSegments::visitChildren): Deleted.
        * runtime/IntlSegments.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::visitChildrenImpl):
        (JSC::JSArrayBufferView::visitChildren): Deleted.
        * runtime/JSArrayBufferView.h:
        * runtime/JSArrayIterator.cpp:
        (JSC::JSArrayIterator::visitChildrenImpl):
        (JSC::JSArrayIterator::visitChildren): Deleted.
        * runtime/JSArrayIterator.h:
        * runtime/JSAsyncGenerator.cpp:
        (JSC::JSAsyncGenerator::visitChildrenImpl):
        (JSC::JSAsyncGenerator::visitChildren): Deleted.
        * runtime/JSAsyncGenerator.h:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::visitChildrenImpl):
        (JSC::JSBigInt::visitChildren): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::visitChildrenImpl):
        (JSC::JSBoundFunction::visitChildren): Deleted.
        * runtime/JSBoundFunction.h:
        * runtime/JSCallee.cpp:
        (JSC::JSCallee::visitChildrenImpl):
        (JSC::JSCallee::visitChildren): Deleted.
        * runtime/JSCallee.h:
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::visitChildrenImpl):
        (JSC::JSCell::visitOutputConstraintsImpl):
        (JSC::JSCell::visitChildren): Deleted.
        (JSC::JSCell::visitOutputConstraints): Deleted.
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::visitChildrenImpl):
        (JSC::JSFinalizationRegistry::visitChildren): Deleted.
        * runtime/JSFinalizationRegistry.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildrenImpl):
        (JSC::JSFunction::visitChildren): Deleted.
        * runtime/JSFunction.h:
        * runtime/JSGenerator.cpp:
        (JSC::JSGenerator::visitChildrenImpl):
        (JSC::JSGenerator::visitChildren): Deleted.
        * runtime/JSGenerator.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildrenImpl):
        (JSC::JSGenericTypedArrayView<Adaptor>::visitChildren): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildrenImpl):
        (JSC::JSGlobalObject::visitChildren): Deleted.
        * runtime/JSGlobalObject.h:
        * runtime/JSImmutableButterfly.cpp:
        (JSC::JSImmutableButterfly::visitChildrenImpl):
        (JSC::JSImmutableButterfly::visitChildren): Deleted.
        * runtime/JSImmutableButterfly.h:
        * runtime/JSInternalFieldObjectImpl.h:
        * runtime/JSInternalFieldObjectImplInlines.h:
        (JSC::JSInternalFieldObjectImpl<passedNumberOfInternalFields>::visitChildrenImpl):
        (JSC::JSInternalFieldObjectImpl<passedNumberOfInternalFields>::visitChildren): Deleted.
        * runtime/JSLexicalEnvironment.cpp:
        (JSC::JSLexicalEnvironment::visitChildrenImpl):
        (JSC::JSLexicalEnvironment::visitChildren): Deleted.
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSMapIterator.cpp:
        (JSC::JSMapIterator::visitChildrenImpl):
        (JSC::JSMapIterator::visitChildren): Deleted.
        * runtime/JSMapIterator.h:
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::visitChildrenImpl):
        (JSC::JSModuleEnvironment::visitChildren): Deleted.
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::visitChildrenImpl):
        (JSC::JSModuleNamespaceObject::visitChildren): Deleted.
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::visitChildrenImpl):
        (JSC::JSModuleRecord::visitChildren): Deleted.
        * runtime/JSModuleRecord.h:
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSNativeStdFunction::visitChildrenImpl):
        (JSC::JSNativeStdFunction::visitChildren): Deleted.
        * runtime/JSNativeStdFunction.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::markAuxiliaryAndVisitOutOfLineProperties):
        (JSC::JSObject::visitButterfly):
        (JSC::JSObject::visitButterflyImpl):
        (JSC::JSObject::visitChildrenImpl):
        (JSC::JSFinalObject::visitChildrenImpl):
        (JSC::JSObject::visitChildren): Deleted.
        (JSC::JSFinalObject::visitChildren): Deleted.
        * runtime/JSObject.h:
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::visitChildrenImpl):
        (JSC::JSPromise::visitChildren): Deleted.
        * runtime/JSPromise.h:
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::JSPropertyNameEnumerator::visitChildrenImpl):
        (JSC::JSPropertyNameEnumerator::visitChildren): Deleted.
        * runtime/JSPropertyNameEnumerator.h:
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::visitChildrenImpl):
        (JSC::JSProxy::visitChildren): Deleted.
        * runtime/JSProxy.h:
        * runtime/JSScope.cpp:
        (JSC::JSScope::visitChildrenImpl):
        (JSC::JSScope::visitChildren): Deleted.
        * runtime/JSScope.h:
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::visitChildrenImpl):
        (JSC::JSSegmentedVariableObject::visitChildren): Deleted.
        * runtime/JSSegmentedVariableObject.h:
        * runtime/JSSetIterator.cpp:
        (JSC::JSSetIterator::visitChildrenImpl):
        (JSC::JSSetIterator::visitChildren): Deleted.
        * runtime/JSSetIterator.h:
        * runtime/JSString.cpp:
        (JSC::JSString::visitChildrenImpl):
        (JSC::JSString::visitChildren): Deleted.
        * runtime/JSString.h:
        * runtime/JSStringIterator.cpp:
        (JSC::JSStringIterator::visitChildrenImpl):
        (JSC::JSStringIterator::visitChildren): Deleted.
        * runtime/JSStringIterator.h:
        * runtime/JSSymbolTableObject.cpp:
        (JSC::JSSymbolTableObject::visitChildrenImpl):
        (JSC::JSSymbolTableObject::visitChildren): Deleted.
        * runtime/JSSymbolTableObject.h:
        * runtime/JSWeakObjectRef.cpp:
        (JSC::JSWeakObjectRef::visitChildrenImpl):
        (JSC::JSWeakObjectRef::visitChildren): Deleted.
        * runtime/JSWeakObjectRef.h:
        * runtime/JSWithScope.cpp:
        (JSC::JSWithScope::visitChildrenImpl):
        (JSC::JSWithScope::visitChildren): Deleted.
        * runtime/JSWithScope.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildrenImpl):
        (JSC::JSWrapperObject::visitChildren): Deleted.
        * runtime/JSWrapperObject.h:
        * runtime/LazyClassStructure.cpp:
        (JSC::LazyClassStructure::visit):
        * runtime/LazyClassStructure.h:
        * runtime/LazyProperty.h:
        * runtime/LazyPropertyInlines.h:
        (JSC::ElementType>::visit):
        * runtime/ModuleProgramExecutable.cpp:
        (JSC::ModuleProgramExecutable::visitChildrenImpl):
        (JSC::ModuleProgramExecutable::visitChildren): Deleted.
        * runtime/ModuleProgramExecutable.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/ProgramExecutable.cpp:
        (JSC::ProgramExecutable::visitChildrenImpl):
        (JSC::ProgramExecutable::visitChildren): Deleted.
        * runtime/ProgramExecutable.h:
        * runtime/PropertyMapHashTable.h:
        * runtime/PropertyTable.cpp:
        (JSC::PropertyTable::visitChildrenImpl):
        (JSC::PropertyTable::visitChildren): Deleted.
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::visitChildrenImpl):
        (JSC::ProxyObject::visitChildren): Deleted.
        * runtime/ProxyObject.h:
        * runtime/ProxyRevoke.cpp:
        (JSC::ProxyRevoke::visitChildrenImpl):
        (JSC::ProxyRevoke::visitChildren): Deleted.
        * runtime/ProxyRevoke.h:
        * runtime/RegExpCachedResult.cpp:
        (JSC::RegExpCachedResult::visitAggregateImpl):
        (JSC::RegExpCachedResult::visitAggregate): Deleted.
        * runtime/RegExpCachedResult.h:
        * runtime/RegExpGlobalData.cpp:
        (JSC::RegExpGlobalData::visitAggregateImpl):
        (JSC::RegExpGlobalData::visitAggregate): Deleted.
        * runtime/RegExpGlobalData.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildrenImpl):
        (JSC::RegExpObject::visitChildren): Deleted.
        * runtime/RegExpObject.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::visit):
        * runtime/SamplingProfiler.h:
        * runtime/ScopedArguments.cpp:
        (JSC::ScopedArguments::visitChildrenImpl):
        (JSC::ScopedArguments::visitChildren): Deleted.
        * runtime/ScopedArguments.h:
        * runtime/SimpleTypedArrayController.cpp:
        (JSC::SimpleTypedArrayController::JSArrayBufferOwner::isReachableFromOpaqueRoots):
        * runtime/SimpleTypedArrayController.h:
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::visitStrongReferences):
        * runtime/SmallStrings.h:
        * runtime/SparseArrayValueMap.cpp:
        (JSC::SparseArrayValueMap::visitChildrenImpl):
        (JSC::SparseArrayValueMap::visitChildren): Deleted.
        * runtime/SparseArrayValueMap.h:
        * runtime/StackFrame.cpp:
        (JSC::StackFrame::visitChildren): Deleted.
        * runtime/StackFrame.h:
        (JSC::StackFrame::visitChildren):
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildrenImpl):
        (JSC::Structure::isCheapDuringGC):
        (JSC::Structure::markIfCheap):
        (JSC::Structure::visitChildren): Deleted.
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildrenImpl):
        (JSC::StructureChain::visitChildren): Deleted.
        * runtime/StructureChain.h:
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildrenImpl):
        (JSC::StructureRareData::visitChildren): Deleted.
        * runtime/StructureRareData.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::visitChildrenImpl):
        (JSC::SymbolTable::visitChildren): Deleted.
        * runtime/SymbolTable.h:
        * runtime/TypeProfilerLog.cpp:
        (JSC::TypeProfilerLog::visit):
        * runtime/TypeProfilerLog.h:
        * runtime/VM.h:
        (JSC::VM::isAnalyzingHeap const):
        (JSC::VM::activeHeapAnalyzer const):
        (JSC::VM::setActiveHeapAnalyzer):
        * runtime/WeakMapImpl.cpp:
        (JSC::WeakMapImpl<WeakMapBucket>::visitChildrenImpl):
        (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKey>>::visitOutputConstraints):
        (JSC::WeakMapImpl<BucketType>::visitOutputConstraints):
        (JSC::WeakMapImpl<WeakMapBucket>::visitChildren): Deleted.
        (JSC::WeakMapImpl<WeakMapBucket<WeakMapBucketDataKeyValue>>::visitOutputConstraints): Deleted.
        * runtime/WeakMapImpl.h:
        (JSC::WeakMapBucket::visitAggregate):
        * tools/JSDollarVM.cpp:
        (JSC::JSDollarVM::visitChildrenImpl):
        (JSC::JSDollarVM::visitChildren): Deleted.
        * tools/JSDollarVM.h:
        * wasm/WasmGlobal.cpp:
        (JSC::Wasm::Global::visitAggregateImpl):
        (JSC::Wasm::Global::visitAggregate): Deleted.
        * wasm/WasmGlobal.h:
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::visitAggregateImpl):
        (JSC::Wasm::Table::visitAggregate): Deleted.
        * wasm/WasmTable.h:
        * wasm/js/JSToWasmICCallee.cpp:
        (JSC::JSToWasmICCallee::visitChildrenImpl):
        (JSC::JSToWasmICCallee::visitChildren): Deleted.
        * wasm/js/JSToWasmICCallee.h:
        * wasm/js/JSWebAssemblyCodeBlock.cpp:
        (JSC::JSWebAssemblyCodeBlock::visitChildrenImpl):
        (JSC::JSWebAssemblyCodeBlock::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyCodeBlock.h:
        * wasm/js/JSWebAssemblyGlobal.cpp:
        (JSC::JSWebAssemblyGlobal::visitChildrenImpl):
        (JSC::JSWebAssemblyGlobal::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyGlobal.h:
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::visitChildrenImpl):
        (JSC::JSWebAssemblyInstance::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::visitChildrenImpl):
        (JSC::JSWebAssemblyMemory::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::visitChildrenImpl):
        (JSC::JSWebAssemblyModule::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyModule.h:
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::visitChildrenImpl):
        (JSC::JSWebAssemblyTable::visitChildren): Deleted.
        * wasm/js/JSWebAssemblyTable.h:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::visitChildrenImpl):
        (JSC::WebAssemblyFunction::visitChildren): Deleted.
        * wasm/js/WebAssemblyFunction.h:
        * wasm/js/WebAssemblyFunctionBase.cpp:
        (JSC::WebAssemblyFunctionBase::visitChildrenImpl):
        (JSC::WebAssemblyFunctionBase::visitChildren): Deleted.
        * wasm/js/WebAssemblyFunctionBase.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::visitChildrenImpl):
        (JSC::WebAssemblyModuleRecord::visitChildren): Deleted.
        * wasm/js/WebAssemblyModuleRecord.h:
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::WebAssemblyWrapperFunction::visitChildrenImpl):
        (JSC::WebAssemblyWrapperFunction::visitChildren): Deleted.
        * wasm/js/WebAssemblyWrapperFunction.h:

2021-02-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Simplify excludedSet handling in object rest expression
        https://bugs.webkit.org/show_bug.cgi?id=221668

        Reviewed by Alexey Shvayka.

        This patch simplifies Object rest/spread by avoiding use of JSSet.
        Instead, we store IdentifierSet into UnlinkedCodeBlock's vector and
        access this directly through JS constant number.
        And for additional properties, we collect it during destructuring,
        and pass it to @copyDataProperties as an argument so that we do not
        need to call Set#add in JS side.

        We also check (isNumber() || isString) conditions for properties to
        avoid calling ToPropertyKey for constant case. This is OK since we
        will call ToPropertyKey inside @copyDataProperties, and this is
        side-effect free if the input is number or string.

        This patch shows 2x improvement in microbenchmarking.

                                                       ToT                     Patched

        object-rest-computed-destructuring       62.9960+-6.5072     ^     30.2157+-1.1420        ^ definitely 2.0849x faster

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::setConstantIdentifierSetRegisters): Deleted.
        * bytecode/CodeBlock.h:
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::constantIdentifierSets):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::constantIdentifierSets):
        (JSC::UnlinkedCodeBlockGenerator::addSetConstant):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue const):
        (JSC::ObjectSpreadExpressionNode::emitBytecode):
        * runtime/CachedTypes.cpp:
        (JSC::CachedConstantIdentifierSetEntry::encode): Deleted.
        (JSC::CachedConstantIdentifierSetEntry::decode const): Deleted.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::getCallerCodeBlock):
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-18  Chris Dumez  <cdumez@apple.com>

        Reduce explicit usage of [objC autorelease] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=221932
        <rdar://problem/74410900>

        Reviewed by Darin Adler.

        Follow-up to r272936 in order to address post-landing review comments.

        * API/JSContext.mm:
        (-[JSContext init]):
        * API/JSWrapperMap.mm:
        (-[JSWrapperMap classInfoForClass:]):

2021-02-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable private methods
        https://bugs.webkit.org/show_bug.cgi?id=222137

        Reviewed by Tadeu Zagallo.

        * runtime/OptionsList.h:

2021-02-18  Caio Lima  <ticaiolima@gmail.com>

        [JSC] Implement private static method
        https://bugs.webkit.org/show_bug.cgi?id=219181

        Reviewed by Yusuke Suzuki.

        This patch is implementing static private methods and accessors
        proposal based on https://github.com/tc39/proposal-static-class-features.
        This implementation diverge a bit from private methods&accessors on the
        brand check, because we are using a simpler way to perform static
        brand checks. Since only the class constructor is allowed to access
        its private methods and accessors, we save it on `@privateClassBrand`
        on class lexical scope and compare it with the receiver of the static
        private method (and accessors) using `===` operation.
        While this genenrates more bytecodes than `check_private_brand`, we
        don't need to perform a Structure transition to install a brand, 
        and avoid allocation of a private symbol. Since each evaluation of a
        class generates a different constructor object, we preserve the semantics
        that private methods are lexically scoped.

        * builtins/BuiltinNames.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCreatePrivateBrand):
        (JSC::BytecodeGenerator::emitInstallPrivateBrand):
        (JSC::BytecodeGenerator::emitInstallPrivateClassBrand):
        (JSC::BytecodeGenerator::emitGetPrivateBrand):
        (JSC::BytecodeGenerator::emitCheckPrivateBrand):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BaseDotNode::emitGetPropertyValue):
        (JSC::BaseDotNode::emitPutProperty):
        (JSC::PostfixNode::emitDot):
        (JSC::PrefixNode::emitDot):
        (JSC::ClassExprNode::emitBytecode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseGetterSetter):
        * parser/Parser.h:
        (JSC::Scope::declarePrivateMethod):
        (JSC::Scope::declarePrivateAccessor):
        (JSC::Scope::declarePrivateSetter):
        (JSC::Scope::declarePrivateGetter):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironment::declarePrivateAccessor):
        (JSC::VariableEnvironment::declarePrivateSetter):
        (JSC::VariableEnvironment::declarePrivateGetter):
        (JSC::VariableEnvironment::declarePrivateMethod):
        * parser/VariableEnvironment.h:
        (JSC::PrivateNameEntry::isStatic const):
        (JSC::VariableEnvironment::isEmpty const):
        (JSC::VariableEnvironment::declareStaticPrivateMethod):
        (JSC::VariableEnvironment::declarePrivateSetter):
        (JSC::VariableEnvironment::declareStaticPrivateSetter):
        (JSC::VariableEnvironment::declarePrivateGetter):
        (JSC::VariableEnvironment::declareStaticPrivateGetter):
        (JSC::VariableEnvironment::hasStaticPrivateMethodOrAccessor const):
        (JSC::VariableEnvironment::hasInstancePrivateMethodOrAccessor const):
        (JSC::VariableEnvironment::hasPrivateMethodOrAccessor const): Deleted.

2021-02-18  Daniel Kolesa  <dkolesa@igalia.com>

        [JSC] Fix segfaults on 32-bit big endian systems
        https://bugs.webkit.org/show_bug.cgi?id=221710

        Reviewed by Yusuke Suzuki.

        In these cases, we are loading values from memory into registers.
        Seemingly, these values are present at an offset on 32-bit big
        endian targets; therefore, add PayloadOffset, which is 4 on BE
        and 0 on LE (same behavior as right now) and is already present
        in other similar accesses in the file.

        * llint/LowLevelInterpreter32_64.asm:

2021-02-18  Michael Saboff  <msaboff@apple.com>

        [JSC] Implement RegExp Match Indices proposal
        https://bugs.webkit.org/show_bug.cgi?id=202475

        Reviewed by Yusuke Suzuki.

        This implements the latest version of the RegExp match indices proposal (https://github.com/tc39/proposal-regexp-match-indices).
        It includes a new 'd' flag to RegExp's to trigger the population of the 'indices' property tree in a Matches result from
        RegExp.exec() and related methods.  This change is performance neutral on JetStream2.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * runtime/CommonIdentifiers.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::fireWatchpointAndMakeAllArrayStructuresSlowPut):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::regExpMatchesArrayWithIndicesStructure const):
        (JSC::JSGlobalObject::regExpMatchesIndicesArrayStructure const):
        * runtime/RegExp.cpp:
        (JSC::RegExpFunctionalTestCollector::outputOneTest):
        (JSC::regexpToSourceString):
        * runtime/RegExp.h:
        * runtime/RegExpMatchesArray.cpp:
        (JSC::createEmptyRegExpMatchesArray):
        (JSC::createStructureWithIndicesImpl):
        (JSC::createIndicesStructureImpl):
        (JSC::createRegExpMatchesArrayWithIndicesStructure):
        (JSC::createRegExpMatchesIndicesArrayStructure):
        (JSC::createRegExpMatchesArrayWithIndicesSlowPutStructure):
        (JSC::createRegExpMatchesIndicesArraySlowPutStructure):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::finishCreation):
        (JSC::flagsString):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * yarr/YarrFlags.cpp:
        (JSC::Yarr::parseFlags):
        * yarr/YarrFlags.h:
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::BytecodePattern::hasIndices const):
        * yarr/YarrPattern.h:
        (JSC::Yarr::YarrPattern::hasIndices const):

2021-02-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Rename entitlements for JITCage
        https://bugs.webkit.org/show_bug.cgi?id=222077
        <rdar://problem/74451093>

        Reviewed by Mark Lam.

        * Scripts/process-entitlements.sh:
        * entitlements.plist:
        * runtime/Options.cpp:
        (JSC::canUseJITCage):

2021-02-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove unnecessary hack for iOS7
        https://bugs.webkit.org/show_bug.cgi?id=222017

        Reviewed by Mark Lam.

        Remove this symbol hack since we are not supporting iOS7.

        * API/JSBase.cpp:
        (JSGetMemoryUsageStatistics):

2021-02-16  Saam Barati  <sbarati@apple.com>

        operationNewArrayWithSize should call tryCreate instead of create
        https://bugs.webkit.org/show_bug.cgi?id=221983
        <rdar://74265630>

        Reviewed by Mark Lam.

        I disassembled crashlogs inside operationNewArrayWithSize. They are crashing
        inside array allocation. They are crashing on OOM. By code inspection,
        operationNewArrayWithSizeAndHint has the same problem.
        
        Callsites to both functions already handle exceptions being thrown, so
        converting both operationNewArrayWithSize and operationNewArrayWithSizeAndHint
        to throw instead of crash on OOM is trivial.
        
        I wasn't able to come up with a test case for this.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * runtime/ObjectConstructor.cpp:
        (JSC::ownPropertyKeys):

2021-02-16  Chris Dumez  <cdumez@apple.com>

        Reduce explicit usage of [objC autorelease] in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=221932

        Reviewed by Geoff Garen.

        Reduce explicit usage of [objC autorelease] in WebKit by using RetainPtr<>.

        * API/JSContext.mm:
        (-[JSContext init]):
        (+[JSContext contextWithJSGlobalContextRef:]):
        * API/JSManagedValue.mm:
        (+[JSManagedValue managedValueWithValue:]):
        (+[JSManagedValue managedValueWithValue:andOwner:]):
        * API/JSScript.mm:
        (+[JSScript scriptOfType:withSource:andSourceURL:andBytecodeCache:inVirtualMachine:error:]):
        (+[JSScript scriptOfType:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:inVirtualMachine:error:]):
        * API/JSVirtualMachine.mm:
        (+[JSVirtualMachine virtualMachineWithContextGroupRef:]):
        * API/JSWrapperMap.mm:
        (-[JSWrapperMap classInfoForClass:]):
        (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteConnectionToTarget::connectionIdentifier const):
        (Inspector::RemoteConnectionToTarget::destination const):
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.objc_protocol_import_expression_for_variable):

2021-02-16  Yusuke Suzuki  <ysuzuki@apple.com> and Sergey Rubanov <chi187@gmail.com>

        WebAssembly: implement non-trapping float to int conversion
        https://bugs.webkit.org/show_bug.cgi?id=173471

        Reviewed by Tadeu Zagallo.

        This patch implements trunc-saturated opcodes in Wasm. This does not trap, and instead it generates
        saturated-truncated integer results from floats.

            1. If the input is NaN, then return 0.
            2. If the input is higher than the maximum value, then return the maximum value (e.g. INT_32MAX).
            3. If the input is lower than the minimum value, then return the minimum value (e.g. INT_32MIN).

        These wasm opcodes are defined as two-byte opcodes. Currently, we do not have a mechanism to define
        this kind of opcodes automatically, so we manually define them. We will clean up in the future patch.

        We rename ExtTableOpType to Ext1OpType since it is no longer limited to table opcodes.

        * generator/Wasm.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::truncSaturated):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::truncSaturated):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::truncSaturated):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::truncSaturated):
        * wasm/generateWasm.py:
        (isNormal):
        * wasm/generateWasmOpsHeader.py:
        (opcodeWithTypesMacroizer):
        (saturatedTruncMacroizer):
        (saturatedTruncMacroizer.modifier):
        (Ext1OpType):
        (ExtTableOpType): Deleted.
        * wasm/wasm.json:

2021-02-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable JITCage on macOS
        https://bugs.webkit.org/show_bug.cgi?id=221805
        <rdar://problem/74153806>

        Reviewed by Mark Lam.

        We enable JITCage too on macOS if it is ARM64E.
        We need to add this entitlement only when building it on macOS 120000 or higher version.
        Otherwise, we cannot launch the process. This means that we need to dynamically generate entitlements file
        because we must not attach this entitlement when building JSC for non 120000 macOS.

        We also remove install_name for jsc binary because it broke codesigning. Previously, it was OK since we didn't
        have com.apple.private.xxx, but now this broken codesigning makes JSC binary unlaunchable.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/process-entitlements.sh:

2021-02-16  Chris Dumez  <cdumez@apple.com>

        Reduce explicit usage of [objC release] in WebKit even more
        https://bugs.webkit.org/show_bug.cgi?id=221914

        Reviewed by Alex Christensen.

        * API/JSContext.mm:
        (-[JSContext initWithVirtualMachine:]):
        (-[JSContext dealloc]):
        (-[JSContext virtualMachine]):
        (-[JSContext initWithGlobalContextRef:]):
        * API/JSManagedValue.mm:
        (-[JSManagedValue initWithValue:]):
        (-[JSManagedValue dealloc]):
        (-[JSManagedValue didAddOwner:]):
        (-[JSManagedValue didRemoveOwner:]):
        * API/JSVirtualMachine.mm:
        (-[JSVirtualMachine initWithContextGroupRef:]):
        (-[JSVirtualMachine dealloc]):
        (-[JSVirtualMachine contextForGlobalContextRef:]):
        (-[JSVirtualMachine addContext:forGlobalContextRef:]):
        (-[JSVirtualMachine externalObjectGraph]):
        (-[JSVirtualMachine externalRememberedSet]):
        * API/JSWrapperMap.mm:
        (createRenameMap):
        (copyMethodsToObject):
        (-[JSWrapperMap initWithGlobalContextRef:]):
        (-[JSWrapperMap classInfoForClass:]):
        (-[JSWrapperMap objcWrapperForJSValueRef:inContext:]):
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        (ObjCConfigurationImplementationGenerator._generate_configuration_implementation_for_domains):
        (ObjCConfigurationImplementationGenerator._generate_ivars):
        * inspector/scripts/codegen/objc_generator_templates.py:

2021-02-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Dynamically generate entitlements
        https://bugs.webkit.org/show_bug.cgi?id=221944

        Reviewed by Saam Barati.

        This patch generates entitlements at compile time since we need to selectively add certain entitlements to binaries.
        It follows r248164's way: we must not use CODE_SIGN_ENTITLEMENTS because XCode inserts implicit code-signing
        and it breaks our pipeline. We need to disable this XCode's implicit behavior by setting CODE_SIGN_INJECT_BASE_ENTITLEMENTS.

        And we also create TestAPI.xcconfig to apply generated entitlements only to testapi and jsc shell.

        * Configurations/Base.xcconfig:
        * Configurations/JSC.xcconfig:
        * Configurations/TestAPI.xcconfig: Copied from Source/JavaScriptCore/Configurations/ToolExecutable.xcconfig.
        * Configurations/ToolExecutable.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/process-entitlements.sh: Added.
        * allow-jit-macOS.entitlements: Removed.
        * testapi.entitlements: Removed.

2021-02-15  Michael Saboff  <msaboff@apple.com>

        [ARM64] Change break instruction comment to indicate possible security failure
        https://bugs.webkit.org/show_bug.cgi?id=221936

        Reviewed by Mark Lam.

        We change the comment value to indicate a possible security issue by
        using the same value the C++ compiler emits.

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::breakpoint):
        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64OpcodeExceptionGeneration::format):
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64OpcodeExceptionGeneration::immediate16):
        * offlineasm/arm64.rb:

2021-02-15  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add a way to wake up debuggables to the remote inspector protocol
        https://bugs.webkit.org/show_bug.cgi?id=221871
        rdar://70351644

        Reviewed by Devin Rousso.

        * inspector/remote/RemoteInspector.h:
        * inspector/remote/RemoteInspectorConstants.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::xpcConnectionReceivedMessage): Handle WIRApplicationWakeUpDebuggablesMessage.
        (Inspector::RemoteInspector::receivedWakeUpDebuggables): Added. Call the client.

2021-02-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] PropertySlot should allow passing custom setters
        https://bugs.webkit.org/show_bug.cgi?id=221872

        Reviewed by Yusuke Suzuki.

        This patch:

        1. Merges PropertySlot::TypeCustomAccessor into TypeCustom, allowing to pass a setter for
           CustomAccessor / CustomValue. Raw C++ function pointers are used to avoid creating
           CustomGetterSetter instances for non-reified static properties.
        2. Reworks JSObject::getOwnPropertyDescriptor() for custom accessors, making it simpler,
           more robust, and no longer required to reify all static properties.
        3. Hoists GetValueFunc / PutValueFunc declarations to JSC namespace so they can be used
           in header files.
        4. Moves CustomAccessor's wrapper maps to JSGlobalObject (because VM outlives it) and
           simplifies their keys to C++ function pointers.
        5. Splits JSCustomGetterSetterFunction into JSCustomGetterFunction / JSCustomSetterFunction
           since their signatures and [[Call]] logic are quite different. This is a nice refactor
           that also simplifies garbage collection and reduces memory needed for setter wrappers.
        6. Removes PropertyDescriptor::setCustomDescriptor(), making PropertyDescriptor unaware of
           custom accessors. Also, drops CustomAccessor check from validateAndApplyPropertyDescriptor()
           that was incorrect (no error should be thrown if accessors are unchanged) yet unreachable
           because PropertyDescriptor::equalTo() ignores CustomAccessor.

        This change fixes a) accessor functions of unforgeable properties [1] to be persistent
        (in terms of referential equality) and b) cross-realm accessor functions to be of correct
        global object (instead of lexical).

        [1]: https://heycam.github.io/webidl/#dfn-unforgeable-on-an-interface

        * API/JSCallbackObject.h:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/JSCustomGetterFunction.cpp: Added.
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomGetterFunction::JSCustomGetterFunction):
        (JSC::JSCustomGetterFunction::create):
        * runtime/JSCustomGetterFunction.h: Added.
        * runtime/JSCustomGetterSetterFunction.cpp: Removed.
        * runtime/JSCustomGetterSetterFunction.h: Removed.
        * runtime/JSCustomSetterFunction.cpp: Added.
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSCustomSetterFunction::JSCustomSetterFunction):
        (JSC::JSCustomSetterFunction::create):
        * runtime/JSCustomSetterFunction.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::customGetterFunctionMap):
        (JSC::JSGlobalObject::customSetterFunctionMap):
        (JSC::JSGlobalObject::customGetterFunctionStructure const):
        (JSC::JSGlobalObject::customSetterFunctionStructure const):
        (JSC::JSGlobalObject::customGetterSetterFunctionStructure const): Deleted.
        * runtime/JSObject.cpp:
        (JSC::getCustomGetterFunction):
        (JSC::getCustomSetterFunction):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::validateAndApplyPropertyDescriptor):
        (JSC::getCustomGetterSetterFunctionForGetterSetter): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::fillCustomGetterPropertySlot):
        * runtime/Lookup.h:
        (JSC::getStaticPropertySlotFromTable):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::setAccessorDescriptor):
        (JSC::PropertyDescriptor::setCustomDescriptor): Deleted.
        * runtime/PropertyDescriptor.h:
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::customAccessorGetter const): Deleted.
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::isCustom const):
        (JSC::PropertySlot::customGetter const):
        (JSC::PropertySlot::customSetter const):
        (JSC::PropertySlot::setCustom):
        (JSC::PropertySlot::setCacheableCustom):
        (JSC::PropertySlot::getValue const):
        (JSC::PropertySlot::isCustomAccessor const): Deleted.
        (JSC::PropertySlot::customGetterSetter const): Deleted.
        (JSC::PropertySlot::setCustomGetterSetter): Deleted.
        * runtime/PutPropertySlot.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2021-02-15  Caio Lima  <ticaiolima@gmail.com>

        [ESNext] Implement private accessors
        https://bugs.webkit.org/show_bug.cgi?id=194435

        Reviewed by Yusuke Suzuki.

        This patch is implementing support for instance private getters and
        setters following the proposal on https://tc39.es/proposal-private-methods.
        Private accessors also use the private brand check mechanism of
        private methods, which means that we are using both
        `op_set_private_brand` and `op_check_private_brand` to perform brand
        checks. Accessors are also stored on class lexical scope as a pair of
        `getter` and `setter`. This is done creating a new `JSObject` and
        storing the `getter` on `get` property, and `setter` on `set`
        property. This is designed in such way that we can always hit IC fast
        path on `get_by_id_direct` to access the property, and also to allow
        constant folding of accessors on DFG/FTL, since acessors objects are
        going to be constant once created.

        For reference, we have the following bytecode for a private getter
        access:

        ```
        class C {
            get #m() {...}
            access() {
                return this.#m;
            }
        }
        ```

        Bytecode for class declaration:

        ```
        ...
        new_object         dst:loc12, inlineCapacity:2 // this is the object to store getter and setter pair
        new_func_exp       dst:loc13, scope:loc4, functionDecl:"get #m() {...}"
        put_by_id          base:loc13, property:@homeObject, value:loc11, flags:Strict
        put_by_id          base:loc12, property:@get, value:loc13, flags:IsDirect|Strict
        put_to_scope       scope:loc4, var:#m, value:loc12 // loc4 is the class lexical scope
        ...

        ```

        Bytecode for `access()`:

        ```
        ...
        resolve_scope      dst:loc7, scope:loc4, var:"#m", resolveType:GlobalProperty, localScopeDepth:0
        get_from_scope     dst:loc8, scope:loc7, var:@privateBrand
        check_private_brand base:this, brand:loc8
        get_from_scope     dst:loc8, scope:loc7, var:"#m"
        get_by_id_direct   dst:loc9, base:loc8, property:@get
        mov                dst:loc10, src:this
        call               dst:loc6, callee:loc9, argc:1, argv:16
        ...

        ```

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::instantiateLexicalVariables):
        (JSC::BytecodeGenerator::getPrivateTraits):
        (JSC::BytecodeGenerator::getAvailablePrivateAccessNames):
        (JSC::BytecodeGenerator::isPrivateMethod): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::BaseDotNode::emitGetPropertyValue):
        (JSC::BaseDotNode::emitPutProperty):
        (JSC::PostfixNode::emitDot):
        (JSC::PrefixNode::emitDot):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseGetterSetter):
        * parser/Parser.h:
        (JSC::Scope::declarePrivateSetter):
        (JSC::Scope::declarePrivateGetter):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironment::declarePrivateAccessor):
        (JSC::VariableEnvironment::declarePrivateSetter):
        (JSC::VariableEnvironment::declarePrivateGetter):
        * parser/VariableEnvironment.h:
        (JSC::VariableEnvironmentEntry::isPrivateSetter const):
        (JSC::VariableEnvironmentEntry::isPrivateGetter const):
        (JSC::VariableEnvironmentEntry::setIsPrivateSetter):
        (JSC::VariableEnvironmentEntry::setIsPrivateGetter):
        (JSC::PrivateNameEntry::isSetter const):
        (JSC::PrivateNameEntry::isGetter const):
        (JSC::PrivateNameEntry::isField const):
        (JSC::PrivateNameEntry::isPrivateMethodOrAcessor const):
        (JSC::VariableEnvironment::declarePrivateSetter):
        (JSC::VariableEnvironment::declarePrivateGetter):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createPrivateMethodAccessError):

2021-02-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r272831.
        https://bugs.webkit.org/show_bug.cgi?id=221907

        breaking internal build

        Reverted changeset:

        "[JSC] Enable JITCage on macOS"
        https://bugs.webkit.org/show_bug.cgi?id=221805
        https://trac.webkit.org/changeset/272831

2021-02-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Proxy's [[GetOwnProperty]] should complete trap result descriptor before validation
        https://bugs.webkit.org/show_bug.cgi?id=221772

        Reviewed by Yusuke Suzuki.

        This patch implements CompletePropertyDescriptor abstract op and utilizes it in
        Proxy's [[GetOwnProperty]], right before IsCompatiblePropertyDescriptor check
        as per spec [1].

        This change tightens trap result validation rules for properties that are
        non-configurable on [[ProxyTarget]], aligning JSC with V8 and SpiderMonkey.

        It's impossible to prefill trap result descriptor: toPropertyDescriptor() throws
        on malformed descriptors, thus it expects the argument to be an empty descriptor
        (added an assert).

        Property descriptors returned to userland are unaffected as they were implicitly
        completed when filling PropertySlot (see PropertyDescriptor::defaultAttributes).

        [1]: https://tc39.es/ecma262/#sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p (step 14)

        * runtime/ObjectConstructor.cpp:
        (JSC::toPropertyDescriptor):
        * runtime/ProxyObject.cpp:
        (JSC::completePropertyDescriptor):
        (JSC::ProxyObject::performInternalMethodGetOwnProperty):

2021-02-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable JITCage on macOS
        https://bugs.webkit.org/show_bug.cgi?id=221805
        <rdar://problem/74153806>

        Reviewed by Mark Lam.

        We enable JITCage too on macOS if it is ARM64E.
        We need to add this entitlement only when building it on macOS 120000 or higher version.
        Otherwise, we cannot launch the process. This means that we need to dynamically generate entitlements file
        because we must not attach this entitlement when building JSC for non 120000 macOS.

        This patch follows r248164's way: we must not use CODE_SIGN_ENTITLEMENTS because XCode inserts implicit code-signing
        and it breaks our pipeline. We need to disable this XCode's implicit behavior by setting CODE_SIGN_INJECT_BASE_ENTITLEMENTS.

        And we also create TestAPI.xcconfig to apply generated entitlements only to testapi and jsc shell.

        * Configurations/Base.xcconfig:
        * Configurations/JSC.xcconfig:
        * Configurations/TestAPI.xcconfig: Copied from Source/JavaScriptCore/Configurations/ToolExecutable.xcconfig.
        * Configurations/ToolExecutable.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/process-entitlements.sh: Added.
        * allow-jit-macOS.entitlements: Removed.
        * testapi.entitlements: Removed.

2021-02-12  Mark Lam  <mark.lam@apple.com>

        Rename `slotVisitor` variables to `visitor`.
        https://bugs.webkit.org/show_bug.cgi?id=221866

        Reviewed by Yusuke Suzuki.

        In existing code, we sometimes name a SlotVisitor instance `slotVisitor` and
        sometimes just `visitor`.  This patch makes it so that we use `visitor` consistently
        everywhere.  This will also reduce the size of the GC verifier patch later.

        Also fixed a few typos in comments.

        This is a pure refactoring patch.  There are no behavior changes.

        * API/JSMarkingConstraintPrivate.cpp:
        (JSContextGroupAddMarkingConstraint):
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::visitAggregate):
        (JSC::RecordedStatuses::markIfCheap):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::blocksInPostOrder):
        * heap/Heap.cpp:
        (JSC::Heap::runBeginPhase):
        (JSC::Heap::runFixpointPhase):
        (JSC::Heap::runConcurrentPhase):
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::resumeThePeriphery):
        (JSC::Heap::addCoreConstraints):
        (JSC::Heap::performIncrement):
        * heap/HeapInlines.h:
        (JSC::Heap::forEachSlotVisitor):
        * runtime/JSSegmentedVariableObject.cpp:
        (JSC::JSSegmentedVariableObject::visitChildren):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::visit):

2021-02-12  Mark Lam  <mark.lam@apple.com>

        Remove some unused methods in MarkedBlock and PreciseAllocation.
        https://bugs.webkit.org/show_bug.cgi?id=221864

        Reviewed by Yusuke Suzuki.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::visitWeakSet): Deleted.
        (JSC::MarkedBlock::Handle::reapWeakSet): Deleted.
        * heap/PreciseAllocation.cpp:
        (JSC::PreciseAllocation::shrink): Deleted.
        (JSC::PreciseAllocation::visitWeakSet): Deleted.
        (JSC::PreciseAllocation::reapWeakSet): Deleted.
        * heap/PreciseAllocation.h:

2021-02-12  Michael Saboff  <msaboff@apple.com>

        [ARM64e] Harden Mach exception handling
        https://bugs.webkit.org/show_bug.cgi?id=221841

        Reviewed by Geoffrey Garen.

        Split wasm_throw_from_fault_handler_trampoline into two trampolines to eliminate the
        need to pass a register argument to signify if we are using FastTLS.  With this change
        we don't need to modify registers besides the PC when handling exceptions.
        Added sanity checks to make sure handlers are being called for the exceptions they
        were registered for.
        
        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * runtime/VMTraps.cpp:
        * signal: Added.
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::installCrashHandler):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):

2021-02-12  Mark Lam  <mark.lam@apple.com>

        Move RootMarkReason out of SlotVisitor.
        https://bugs.webkit.org/show_bug.cgi?id=221831

        Reviewed by Tadeu Zagallo.

        This will lessen the amount of diff needed for the GC verifier later.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::addCoreConstraints):
        * heap/HeapAnalyzer.h:
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::analyzeEdge):
        (JSC::rootTypeToString):
        * heap/HeapSnapshotBuilder.h:
        * heap/RootMarkReason.h: Added.
        * heap/SlotVisitor.h:
        (JSC::SetRootMarkReasonScope::SetRootMarkReasonScope):
        * inspector/JSInjectedScriptHost.cpp:

2021-02-11  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: "Show Extended Gridlines" option for grid overlay does not work
        https://bugs.webkit.org/show_bug.cgi?id=221775

        Reviewed by Devin Rousso.

        Replace all mentions of "Gridlines" with "GridLines" (camelcase).

        * inspector/protocol/DOM.json:

2021-02-11  Mark Lam  <mark.lam@apple.com>

        CodeBlock::propagateTransitions() should also handle OpSetPrivateBrand's LLInt IC.
        https://bugs.webkit.org/show_bug.cgi?id=221787

        Reviewed by Yusuke Suzuki.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::propagateTransitions):

2021-02-11  Alexey Shvayka  <shvaikalesh@gmail.com>

        SetIntegrityLevel should call [[DefineOwnProperty]] with partial descriptor
        https://bugs.webkit.org/show_bug.cgi?id=221497

        Reviewed by Yusuke Suzuki.

        This patch prevents [[GetOwnProperty]] result descriptor from being reused for
        [[DefineOwnProperty]]. Instead, partial descriptor with only [[Configurable]]
        and (conditionally) [[Writable]] fields is passed, which is observable by
        ProxyObject's "defineProperty" trap (and possibly any other opaque object).

        Also, replaces isDataDescriptor() check with negated isAccessorDescriptor()
        as per spec [1], which is equivalent in this case yet is false dichotomy
        for partial descriptors.

        Aligns JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-setintegritylevel (step 7.b.ii)

        * runtime/ObjectConstructor.cpp:
        (JSC::setIntegrityLevel):

2021-02-11  Don Olmstead  <don.olmstead@sony.com>

        [CMake] WEBKIT_EXECUTABLE can incorrectly link framework
        https://bugs.webkit.org/show_bug.cgi?id=221703

        Reviewed by Michael Catanzaro.

        GTK compiles JavaScriptCore as a SHARED library but the symbols from WTF are not being
        properly exposed from it. Workaround this by linking WTF directly until GTK turns on
        hidden visibility and properly exports symbols.

        * shell/PlatformGTK.cmake:

2021-02-10  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early February 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=221701

        Unreviewed non-unified build fixes.

        * bytecode/IterationModeMetadata.h:
        * bytecode/SetPrivateBrandStatus.h:

2021-02-10  Mark Lam  <mark.lam@apple.com>

        We should not static_assert on an ENABLE() macro.
        https://bugs.webkit.org/show_bug.cgi?id=221714
        rdar://74197896

        Reviewed by Yusuke Suzuki.

        This is because the ENABLE() macro reduces to a macro expression
        `(defined ENABLE_##WTF_FEATURE && ENABLE_##WTF_FEATURE)` which is not a C++
        expression that a static_assert can evaluate.

        * llint/LLIntData.cpp:
        * llint/LLIntData.h:
        (JSC::LLInt::getCodePtr):
        (JSC::LLInt::getWide16CodePtr):
        (JSC::LLInt::getWide32CodePtr):

2021-02-10  Saam Barati  <sbarati@apple.com>

        Don't crash when reparsing an arrow function and the parsing invariant is broken
        https://bugs.webkit.org/show_bug.cgi?id=221632
        <rdar://71874091>

        Reviewed by Tadeu Zagallo and Mark Lam.

        We have code where we assert that when reparsing an arrow function,
        we see the '=>' token after parsing the parameters. Since we already
        parsed the arrow function before, this assertion makes sense. But somehow,
        this is leading to crashes on real websites. We don't know why this invariant
        is being broken. I'm changing this to a debug assert, and we're tracking
        the full fix in:
        https://bugs.webkit.org/show_bug.cgi?id=221633

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):

2021-02-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] C++ iteration should support fast iterator protocol
        https://bugs.webkit.org/show_bug.cgi?id=221526

        Reviewed by Alexey Shvayka.

        This patch adds fast iteration protocol support in C++ iteration (forEachIterable).
        In JS, we have op_iterator_open / op_iterator_next to iterate array quickly.
        But we do not use this feature in C++ forEachIterable. In this patch we integrate
        the same (or a bit more efficient since we can avoid creating JSArrayIterator) mechanism
        so that iteration in C++ gets faster for normal arrays.

        We observed 1.9x faster in Map creation with arrays.

                                        ToT                     Patched

            map-constructor       35.7446+-0.2354     ^     18.7516+-0.4534        ^ definitely 1.9062x faster

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * runtime/CommonSlowPaths.cpp:
        (JSC::iteratorOpenTryFastImpl):
        * runtime/IteratorOperations.cpp:
        (JSC::iteratorClose):
        (JSC::prepareForFastArrayIteration):
        * runtime/IteratorOperations.h:
        (JSC::forEachInIterable):
        * runtime/JSArrayIterator.h:

2021-02-09  Caio Lima  <ticaiolima@gmail.com>

        Fix warning introduced by r272580
        https://bugs.webkit.org/show_bug.cgi?id=221612

        Unreviewed build fixes.

        * bytecode/CheckPrivateBrandVariant.cpp:
        * bytecode/CheckPrivateBrandVariant.h:
        * bytecode/SetPrivateBrandVariant.cpp:
        * bytecode/SetPrivateBrandVariant.h:

2021-02-09  Caio Lima  <ticaiolima@gmail.com>

        [ESNext] Implement private methods
        https://bugs.webkit.org/show_bug.cgi?id=194434

        Reviewed by Filip Pizlo.

        This patch is adding support to private methods following the
        specification on https://tc39.es/proposal-private-methods/.
        This is introducing a new way to declare private methods on
        class syntax. Private methods are only accessible within
        classes they were declared, and only can be called from
        objects that are instance of these classes.
        To guarantee such rules, the proposal presents the concept of
        Brand Check. During class evaluation, if a private method is present,
        a `brand` is installed in this class. Every instance of such class
        then gets this brand installed during `[[Construct]]` operation. It
        means that an object can have multiple brands (e.g when there is also
        private methods declared on super class). Before accessing a private
        method, there is a check to validate if the target of the call has the
        brand of callee method.
        The brand check mechanism is implemented using a `@privateBrand`
        stored on class scope. Here is a representation of how this mechanism
        works:

        ```
        class C {
            #m() { return 3; }
            method() { return this.#m(); }
        }

        let c = new C();
        console.log(c.method()); // prints 3
        ```

        Generated bytecode for the following representation:
        ```
        { // class lexical scope
            const @privateBrand = @createPrivateSymbol();
            const #m = function () { return 3; }
            C.prototype.method = function() {
                @check_private_brand(this, @privateBrand);
                return #m.call(this);
            }
            C = function() {
                @set_private_brand(this, @privateBrand);
            }
        }

        let c = new C();
        console.log(c.method()); // prints 3
        ```

        # Resolving correct brand to check

        In the case of shadowing or nested scope, we need to emit brand
        checks to the right private brand. See code below:

        ```
        class C {
            #m() { return 3; }
            method() { return this.#m();}

            A = class {
                #m2() { return 3; }
                foo(o) { return o.#m(); }
            }
        }
        ```

        The call of "#m" in `foo` refers to "C::#m". In such case, we need to
        check C's private brand, instead of A's private brand.
        To perform the proper check, we first resolve scope of "#m" and then
        check the private brand of this scope (the scope where the private
        method and brand are stored is the same).
        So the bytecode to lookup the right brand is:

        ```
        mov loc9, arg1
        resolve_scope loc10, "#m"
        get_from_scope loc11, loc10, "@privateBrand"
        check_private_brand loc9, loc11
        get_from_scope loc11, loc10, "#m"
        // setup call frame
        call loc11, ...
        // ...
        ```

        # Brand check mechanism

        We are introducing in this patch 2 new bytecodes to allow brand check
        of objects: `op_set_brand` and `op_check_brand`.
        `op_set_brand` sets a new brand in an object, so we can perform the brand
        check later when accessing private methods. This operations throws when
        trying to add the same brand twice in an Object.
        `op_check_brand` checks if the given object contains the brand we are
        looking for. It traverses the brand chain to verify if the brand is
        present, and throws `TypeError` otherwise.

        We are also introducing a subclass for Structure called BrandedStructure.
        It is used to store brands and to allow brand check mechanism. BrandedStructure
        stores a brand and a parent pointer to another BrandedStructure that allow
        us traverse the brand chain. With `BrandedStructure`, we can then
        infer that a given object has the brand we are looking for just
        checking its structureId. This is a very good optimization, since we can
        reduce most of brand checks to structure checks.

        We created a new kind of transition called `SetBrand` that happens when
        `op_set_brand` is executed. This allow us to cache such kind of
        trasitions on trasition table using the key `<brand->uid, 0,
        TransitionKind::SetBrand>`. During this transition, we take previous
        structure and apply one of the following rules:

            1. If it's a BrandedStructure, we then set it to `m_parentBrand`,
            to allow proper brand chain check.
        
            2. If it's not a BrandedStructure, we set `m_parentBrand` to `nullptr`,
            meaning that this is the first brand being added to the object
            with this structure.
        
        For now, we are using the flag `isBrandedStructure` to identify that a
        given Structure is a BrandedStructure. This is done to avoid changes
        on places where we are checking for `vm.structureStructure()`.
        However, if we ever need space on Structure, this flag is a good
        candidate to be deleted and we can move to a solution that uses
        `vm.brandedStructureStructure()`;

         # JIT Support

        This patch also includes initial JIT support for `set_private_brand`
        and `check_private_brand`. On Baseline JIT, we are using
        `JITPravateBrandAccessGenerator` to support IC for both operands.
        On `DFGByteCodeParser` we are trying to inline brand access whenever
        possible, and fallbacking to `SetPrivateBrand` and
        `CheckPrivateBrand` otherwise. Those nodes are not being optimized at
        their full potential, but the code generated by them is also relying on 
        `JITPrivateBrandAccessGenerator` to have IC support for both DFG and
        FTL. During DFG parsing, we try to reduce those access  to `CheckIsConstant`
        and `CheckStructure` (with `PutStructure` for `set_private_brand` cases)
        based on available profiled data. This is meant to make brand checks
        almost free on DFG/FTL tiers when we have a single evaluation of a
        class, since the `CheckIsConstant` can be eliminated by the constant-folded
        scope load, and the `CheckStructure` is very likely to be redundant
        to any other `CheckStructure` that can be performed on receiver
        when we have a finite structure set.
        For instance, when we have a brand check on a path-of-no-return to
        a `GetByOffset` sequence on the same receiver, the `CheckStructure`
        for the brand check will enable CSE of the `CheckStructure` that
        would happen for that `GetByOffset`. Such design is possible because brand
        checks supports polymorphic access very similr to what we have for
        `GetByOffset` sequences.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createDefaultConstructor):
        (JSC::BuiltinExecutables::createExecutable):
        * builtins/BuiltinExecutables.h:

        We are adding a new parameter `PrivateBrandRequirement` to propagate
        when a default constructor needs to emit code to setup private brand
        on instances.

        * builtins/BuiltinNames.h:

        Adding `@privateBrand` that  we use to store private brand on
        class's scope.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::createCheckPrivateBrand):
        (JSC::AccessCase::createSetPrivateBrand):
        (JSC::AccessCase::requiresIdentifierNameMatch const):
        (JSC::AccessCase::requiresInt32PropertyCheck const):
        (JSC::AccessCase::needsScratchFPR const):
        (JSC::AccessCase::forEachDependentCell const):
        (JSC::AccessCase::doesCalls const):
        (JSC::AccessCase::canReplace const):
        (JSC::AccessCase::dump const):
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * bytecode/AccessCase.h:
        (JSC::AccessCase::structure const):
        (JSC::AccessCase::newStructure const):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CheckPrivateBrandStatus.cpp: Added.
        (JSC::CheckPrivateBrandStatus::appendVariant):
        (JSC::CheckPrivateBrandStatus::computeForBaseline):
        (JSC::CheckPrivateBrandStatus::CheckPrivateBrandStatus):
        (JSC::CheckPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::CheckPrivateBrandStatus::computeFor):
        (JSC::CheckPrivateBrandStatus::slowVersion const):
        (JSC::CheckPrivateBrandStatus::merge):
        (JSC::CheckPrivateBrandStatus::filter):
        (JSC::CheckPrivateBrandStatus::singleIdentifier const):
        (JSC::CheckPrivateBrandStatus::visitAggregate):
        (JSC::CheckPrivateBrandStatus::markIfCheap):
        (JSC::CheckPrivateBrandStatus::finalize):
        (JSC::CheckPrivateBrandStatus::dump const):
        * bytecode/CheckPrivateBrandStatus.h: Added.
        * bytecode/CheckPrivateBrandVariant.cpp: Added.
        (JSC::CheckPrivateBrandVariant::CheckPrivateBrandVariant):
        (JSC::CheckPrivateBrandVariant::~CheckPrivateBrandVariant):
        (JSC::CheckPrivateBrandVariant::attemptToMerge):
        (JSC::CheckPrivateBrandVariant::markIfCheap):
        (JSC::CheckPrivateBrandVariant::finalize):
        (JSC::CheckPrivateBrandVariant::visitAggregate):
        (JSC::CheckPrivateBrandVariant::dump const):
        (JSC::CheckPrivateBrandVariant::dumpInContext const):
        * bytecode/CheckPrivateBrandVariant.h: Added.
        (JSC::CheckPrivateBrandVariant::structureSet const):
        (JSC::CheckPrivateBrandVariant::structureSet):
        (JSC::CheckPrivateBrandVariant::identifier const):
        (JSC::CheckPrivateBrandVariant::overlaps):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * bytecode/ExecutableInfo.h:
        (JSC::ExecutableInfo::ExecutableInfo):
        (JSC::ExecutableInfo::privateBrandRequirement const):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        (WTF::printInternal):
        * bytecode/RecordedStatuses.cpp:
        (JSC::RecordedStatuses::operator=):
        (JSC::RecordedStatuses::addCheckPrivateBrandStatus):
        (JSC::RecordedStatuses::addSetPrivateBrandStatus):
        (JSC::RecordedStatuses::visitAggregate):
        (JSC::RecordedStatuses::markIfCheap):
        * bytecode/RecordedStatuses.h:
        (JSC::RecordedStatuses::forEachVector):
        * bytecode/SetPrivateBrandStatus.cpp: Added.
        (JSC::SetPrivateBrandStatus::appendVariant):
        (JSC::SetPrivateBrandStatus::computeForBaseline):
        (JSC::SetPrivateBrandStatus::SetPrivateBrandStatus):
        (JSC::SetPrivateBrandStatus::computeForStubInfoWithoutExitSiteFeedback):
        (JSC::SetPrivateBrandStatus::computeFor):
        (JSC::SetPrivateBrandStatus::slowVersion const):
        (JSC::SetPrivateBrandStatus::merge):
        (JSC::SetPrivateBrandStatus::filter):
        (JSC::SetPrivateBrandStatus::singleIdentifier const):
        (JSC::SetPrivateBrandStatus::visitAggregate):
        (JSC::SetPrivateBrandStatus::markIfCheap):
        (JSC::SetPrivateBrandStatus::finalize):
        (JSC::SetPrivateBrandStatus::dump const):
        * bytecode/SetPrivateBrandStatus.h: Added.
        * bytecode/SetPrivateBrandVariant.cpp: Added.
        (JSC::SetPrivateBrandVariant::SetPrivateBrandVariant):
        (JSC::SetPrivateBrandVariant::~SetPrivateBrandVariant):
        (JSC::SetPrivateBrandVariant::attemptToMerge):
        (JSC::SetPrivateBrandVariant::markIfCheap):
        (JSC::SetPrivateBrandVariant::finalize):
        (JSC::SetPrivateBrandVariant::visitAggregate):
        (JSC::SetPrivateBrandVariant::dump const):
        (JSC::SetPrivateBrandVariant::dumpInContext const):
        * bytecode/SetPrivateBrandVariant.h: Added.
        (JSC::SetPrivateBrandVariant::oldStructure const):
        (JSC::SetPrivateBrandVariant::newStructure const):
        (JSC::SetPrivateBrandVariant::identifier const):
        (JSC::SetPrivateBrandVariant::overlaps):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedCodeBlock.h:
        (JSC::UnlinkedCodeBlock::privateBrandRequirement const):
        * bytecode/UnlinkedCodeBlockGenerator.h:
        (JSC::UnlinkedCodeBlockGenerator::privateBrandRequirement const):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):

        We changed BytecodeGenerator for FunctionNode and EvalNode to
        propagate parentScope PrivateNameEnvironment. These environments stores
        private name entries that are visible into the scope of the
        function/eval.
        This is required to identify the kind of access a private name is
        referring to, since it can be a private field or a private method.

        (JSC::BytecodeGenerator::instantiateLexicalVariables):
        (JSC::BytecodeGenerator::emitGetPrivateName):
        (JSC::BytecodeGenerator::emitCreatePrivateBrand):

        The process to create a private brand is as follows:
            1. Create a PrivateSymbol using `@createPrivateSymbol`.
            2. Store this symbol into a given scope (i.e class lexical scope)
               on `@privateBrand` variable.

        (JSC::BytecodeGenerator::emitInstallPrivateBrand):
        (JSC::BytecodeGenerator::emitGetPrivateBrand):

        We added `m_privateNamesStack` to BytecodeGenerator to represent the
        scope chain of available private names while generating bytecode.

        (JSC::BytecodeGenerator::emitCheckPrivateBrand):
        (JSC::BytecodeGenerator::isPrivateMethod):
        (JSC::BytecodeGenerator::pushPrivateAccessNames):
        (JSC::BytecodeGenerator::popPrivateAccessNames):
        (JSC::BytecodeGenerator::getAvailablePrivateAccessNames):
        (JSC::BytecodeGenerator::emitNewDefaultConstructor):
        (JSC::BytecodeGenerator::emitNewClassFieldInitializerFunction):
        (JSC::BytecodeGenerator::emitDirectGetByVal): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::privateBrandRequirement const):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::makeFunction):

        This change is required to properly propagate PrivateBrandRequirement
        to arrow functions that can potentially call `super()`.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitDeclarePrivateFieldNames):
        (JSC::PropertyListNode::emitBytecode):
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::BaseDotNode::emitGetPropertyValue):

        Adding support to properly access private method. Since we store
        private methods on class lexical scope, we need a different set of
        instructions to access a private method.

        (JSC::BaseDotNode::emitPutProperty):

        In the case of we trying to write in a private method, we need to
        throw a TypeError according to specification
        (https://tc39.es/proposal-private-methods/#sec-privatefieldset).

        (JSC::FunctionCallValueNode::emitBytecode):
        (JSC::PostfixNode::emitDot):
        (JSC::PrefixNode::emitDot):
        (JSC::ClassExprNode::emitBytecode):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::filterICStatus):
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPrivateBrandAccess):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasCheckPrivateBrandStatus):
        (JSC::DFG::Node::checkPrivateBrandStatus):
        (JSC::DFG::Node::hasSetPrivateBrandStatus):
        (JSC::DFG::Node::setPrivateBrandStatus):
        * dfg/DFGNodeType.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckPrivateBrand):
        (JSC::DFG::SpeculativeJIT::compileSetPrivateBrand):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * dfg/DFGVarargsForwardingPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compilePrivateBrandAccess):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckPrivateBrand):
        (JSC::FTL::DFG::LowerDFGToB3::compileSetPrivateBrand):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator):
        (JSC::JITPrivateBrandAccessGenerator::generateFastPath):
        (JSC::JITPrivateBrandAccessGenerator::finalize):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITPrivateBrandAccessGenerator::JITPrivateBrandAccessGenerator):
        (JSC::JITPrivateBrandAccessGenerator::slowPathJump const):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        (JSC::getPrivateName):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_set_private_brand):
        (JSC::JIT::emitSlow_op_set_private_brand):
        (JSC::JIT::emit_op_check_private_brand):
        (JSC::JIT::emitSlow_op_check_private_brand):
        * jit/Repatch.cpp:
        (JSC::tryCacheCheckPrivateBrand):
        (JSC::repatchCheckPrivateBrand):
        (JSC::tryCacheSetPrivateBrand):
        (JSC::repatchSetPrivateBrand):
        (JSC::resetCheckPrivateBrand):
        (JSC::resetSetPrivateBrand):
        * jit/Repatch.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * parser/Nodes.cpp:
        (JSC::FunctionMetadataNode::FunctionMetadataNode):
        * parser/Nodes.h:
        (JSC::BaseDotNode::isPrivateMember const):
        (JSC::BaseDotNode::isPrivateField const): Deleted.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseMemberExpression):
        * parser/Parser.h:
        (JSC::Scope::declarePrivateMethod):
        (JSC::Scope::declarePrivateField):
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        (JSC::Scope::declarePrivateName): Deleted.
        * parser/ParserModes.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createDotAccess):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironment::declarePrivateMethod):
        * parser/VariableEnvironment.h:
        (JSC::VariableEnvironmentEntry::isPrivateField const):
        (JSC::VariableEnvironmentEntry::isPrivateMethod const):
        (JSC::VariableEnvironmentEntry::setIsPrivateField):
        (JSC::VariableEnvironmentEntry::setIsPrivateMethod):
        (JSC::PrivateNameEntry::isMethod const):
        (JSC::PrivateNameEntry::isPrivateMethodOrAcessor const):
        (JSC::VariableEnvironment::addPrivateName):
        (JSC::VariableEnvironment::declarePrivateField):
        (JSC::VariableEnvironment::declarePrivateMethod):
        (JSC::VariableEnvironment::privateNameEnvironment const):
        (JSC::VariableEnvironment::hasPrivateMethodOrAccessor const):
        (JSC::VariableEnvironment::addPrivateNamesFrom):
        (JSC::VariableEnvironmentEntry::isPrivateName const): Deleted.
        (JSC::VariableEnvironmentEntry::setIsPrivateName): Deleted.
        (JSC::VariableEnvironment::declarePrivateName): Deleted.
        * runtime/CachedTypes.cpp:
        (JSC::CachedCodeBlockRareData::encode):
        (JSC::CachedCodeBlockRareData::decode const):
        (JSC::CachedFunctionExecutableRareData::encode):
        (JSC::CachedFunctionExecutableRareData::decode const):
        (JSC::CachedFunctionExecutable::privateBrandRequirement const):
        (JSC::CachedCodeBlock::derivedContextType const):
        (JSC::CachedFunctionExecutable::encode):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        (JSC::CachedCodeBlock::needsClassFieldInitializer const): Deleted.
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::generateUnlinkedCodeBlock):
        (JSC::generateUnlinkedCodeBlockForDirectEval):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):
        * runtime/CodeCache.h:
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        (JSC::DirectEvalExecutable::DirectEvalExecutable):
        * runtime/DirectEvalExecutable.h:
        * runtime/EvalExecutable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        * runtime/EvalExecutable.h:
        (JSC::EvalExecutable::executableInfo const):
        (JSC::EvalExecutable::privateBrandRequirement const):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createInvalidPrivateNameError):
        * runtime/IndirectEvalExecutable.cpp:
        (JSC::IndirectEvalExecutable::IndirectEvalExecutable):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::checkPrivateBrand):
        (JSC::JSObject::setPrivateBrand):
        * runtime/JSScope.cpp:
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        * runtime/JSScope.h:
        * runtime/ModuleProgramExecutable.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:
        * runtime/ProgramExecutable.h:
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::BrandedStructure::BrandedStructure):
        (JSC::BrandedStructure::create):
        (JSC::BrandedStructure::checkBrand):
        (JSC::Structure::setBrandTransitionFromExistingStructureImpl):
        (JSC::Structure::setBrandTransitionFromExistingStructureConcurrently):
        (JSC::Structure::setBrandTransition):
        * runtime/Structure.h:
        (JSC::Structure::finishCreation):
        * runtime/StructureInlines.h:
        (JSC::Structure::create):
        (JSC::Structure::forEachPropertyConcurrently):
        * runtime/StructureTransitionTable.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::cloneScopePart):
        * runtime/SymbolTable.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2021-02-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make JSON.parse faster by using table for fast string parsing
        https://bugs.webkit.org/show_bug.cgi?id=221593

        Reviewed by Ryosuke Niwa and Geoffrey Garen.

        We use Latin1 table for quickly checking whether a character is safe for the fast path string parsing in JSON.
        This offers 1-3% improvement in Kraken json-parse-financial test.

        * parser/Lexer.cpp:
        (JSC::Lexer<T>::Lexer):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::Lexer::lex):
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser<CharType>::Lexer::lexString):
        * runtime/LiteralParser.h:

2021-02-08  Patrick Angle  <pangle@apple.com>

        Web Inspector: Add `CSS.setLayoutContextTypeChangedMode` for getting information about all layout contexts
        https://bugs.webkit.org/show_bug.cgi?id=221449

        Reviewed by Devin Rousso.

        Added `CSS.setLayoutContextTypeChangedMode` command and `CSS.LayoutContextTypeChangedMode` enum for controlling
        if the frontend should be informed of all layout context type changes, or if only currently instrumented nodes
        should be observed.

        * inspector/protocol/CSS.json:

2021-02-08  Alicia Boya García  <aboya@igalia.com>

        Add ConsoleMessage::toString()
        https://bugs.webkit.org/show_bug.cgi?id=221539

        Reviewed by Eric Carlson.

        Currently ConsoleMessage doesn't have a publicly API to retrieve the
        stored JSON values into a string for printing.

        The closest equivalent is message(), but it doesn't return any JSON
        objects attached. This makes it an ill fit when printing
        ConsoleMessage's to the system terminal, since these JSON values often
        contain information that is important for debugging, e.g.:

        SourceBufferPrivateGStreamer::removeCodedFrames(126493C320000001) removing sample (notice: no sample)
        SourceBufferPrivateGStreamer::removeCodedFrames(126493C320000001) the range in removeCodedFrames() includes already enqueued samples, reenqueueing from (notice: no time)

        This patch adds a new ConsoleMessage::toString() method that
        constructs a String containing these JSON values, and makes use of it
        when printing messages to the system terminal, giving more useful
        output, e.g:

        CONSOLE MEDIASOURCE DEBUG MediaSourcePrivateGStreamer::addSourceBuffer(D4447A9F1F483EEF) {"containerType":"video/webm","codecs":"codecs","profiles":"profiles"}
        CONSOLE MEDIA LOG HTMLMediaElement::mediaPlayerDurationChanged(D4447A9F1F483EEF) duration = {"invalid":true,"numerator":-1,"denominator":1,"flags":0}, current time = {"value":0,"numerator":0,"denominator":10000000,"flags":1}

        * inspector/ConsoleMessage.cpp:
        (Inspector::ConsoleMessage::toString const):
        * inspector/ConsoleMessage.h:

2021-02-08  Alicia Boya García  <aboya@igalia.com>

        ConsoleMessage: Don't encode string JSONLogValue's as JSON
        https://bugs.webkit.org/show_bug.cgi?id=221421

        Reviewed by Eric Carlson.

        JSONLogValue's have two tagged types: String and JSON. Despite this,
        the ConsoleMessage constructor was converting the string values to
        JSON while coalescing them.

        This also added quotes on the return value of message() for
        ConsoleMessage's created with this constructor, but not with others.

        This patch removes that behavior, keeping strings as strings and using
        wrapObject() instead of wrapJSONString() for them.

        * inspector/ConsoleMessage.cpp:
        (Inspector::ConsoleMessage::ConsoleMessage):
        (Inspector::ConsoleMessage::addToFrontend):

2021-02-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Replace toInteger with toIntegerOrInfinity
        https://bugs.webkit.org/show_bug.cgi?id=218642

        Reviewed by Alexey Shvayka.

        In ECMA262 spec, ToInteger abstract operation is replaced with ToIntegerOrInfinity.
        This patch renames toInteger to toIntegerOrInfinity in JSC.

        * builtins/ArrayPrototype.js:
        (fill):
        (includes):
        (copyWithin):
        (flat):
        (at):
        * builtins/FunctionPrototype.js:
        (bind):
        * builtins/GlobalOperations.js:
        (globalPrivate.toIntegerOrInfinity):
        (globalPrivate.toLength):
        (globalPrivate.toInteger): Deleted.
        * builtins/RegExpPrototype.js:
        (overriddenName.string_appeared_here.replace):
        * builtins/StringPrototype.js:
        (repeat):
        (at):
        * builtins/TypedArrayPrototype.js:
        (subarray):
        (at):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::weakMapEntries):
        (Inspector::JSInjectedScriptHost::weakSetEntries):
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * runtime/ArrayPrototype.cpp:
        (JSC::argumentClampedIndexFromStartOrEnd):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlSegments.cpp:
        (JSC::IntlSegments::containing):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toIntegerOrInfinity const):
        (JSC::JSValue::toLength const):
        (JSC::JSValue::toInteger const): Deleted.
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::argumentClampedIndexFromStartOrEnd):
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
        * runtime/NumberPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::extractToStringRadixArgument):
        * runtime/RegExpObjectInlines.h:
        (JSC::getRegExpObjectLastIndexAsUnsigned):
        * runtime/StringPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::stringIndexOfImpl):
        (JSC::stringIncludesImpl):

2021-02-06  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r264574): Unchecked JS exception in validateAndApplyPropertyDescriptor()
        https://bugs.webkit.org/show_bug.cgi?id=221494

        Reviewed by Yusuke Suzuki.

        This patch brings back exception check after sameValue(), which was accidentally
        removed in r264574. sameValue() may throw OOM when comparing rope strings.

        Even though this case was unreachable because of PropertyDescriptor::equalTo()
        fast path, we should maintain consistent exception checks.

        For the same reason, sameValue() in protoFuncFinalizationRegistryRegister() is
        replaced with pointer comparison, which is safe & unobservable because `target`
        is a known JSObject.

        * runtime/FinalizationRegistryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::validateAndApplyPropertyDescriptor):

2021-02-05  Patrick Angle  <pangle@apple.com>

        Web Inspector: Implement backend support for maintaining a list of Grid layout contexts
        https://bugs.webkit.org/show_bug.cgi?id=221228

        Reviewed by Devin Rousso.

        Added `CSS.LayoutContextType` property to `DOM.Node` and added `CSS.nodeLayoutContextTypeChanged` event.

        * inspector/protocol/CSS.json:
        - Added `CSS.LayoutContextType` type.
        - Added `DOM.nodeLayoutContextTypeChanged` event.
        * inspector/protocol/DOM.json:
        - Added `layoutContextType` property to `DOM.Node` type.

2021-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up change after r272428
        https://bugs.webkit.org/show_bug.cgi?id=221454

        isPropertyNameExcluded can invoke GC etc. Structure::forEachProperty can miss PropertyTable and Structure
        reference when it is highly optimized, so that it can crash if GC happens in the middle of Structure::forEachProperty.

        1. Insert ensureStillAliveHere in Structure::forEachProperty to ensure liveness of PropertyTable
        2. We should not perform side-effectful operation including GC in Structure::forEachProperty. So we moved isPropertyNameExcluded.

        * runtime/StructureInlines.h:
        (JSC::Structure::forEachProperty):

2021-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] globalFuncCopyDataProperties should not perform GC-sensitive operation in the middle of Structure::forEachProperty
        https://bugs.webkit.org/show_bug.cgi?id=221454

        Reviewed by Mark Lam.

        isPropertyNameExcluded can invoke GC etc. And running Structure::forEachProperty
        is fragile state against any side-effect including GC.
        We should not perform GC-sensitive operation during Structure::forEachProperty.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        Object.assign should throw for property creation on non-extensible `target`
        https://bugs.webkit.org/show_bug.cgi?id=220712

        Reviewed by Ross Kirsling.

        This performance-neutral change precludes Object.assign from taking the
        fast path if `target` is a non-extensible JSFinalObject, which ensures
        a TypeError is thrown for property creation via [[Set]].

        Aligns JSC with the spec [1], V8, and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-validateandapplypropertydescriptor (step 2.a)

        * runtime/ObjectConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSImmutableButterfly's toString cache should not happen for generic join
        https://bugs.webkit.org/show_bug.cgi?id=221444
        <rdar://problem/73972862>

        Reviewed by Mark Lam.

        We should not cache Array#toString results with JSImmutableButterfly if
        its join operation becomes generic join: including objects in array, since
        this can invoke object.toString(), and it isn't side-effect free.

        * runtime/ArrayPrototype.cpp:
        (JSC::fastJoin):
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Atomics.store in DFG / FTL should return ToNumber(input) value
        https://bugs.webkit.org/show_bug.cgi?id=221438
        <rdar://problem/73973264>

        Reviewed by Filip Pizlo.

        Atomics.store is different from the other ReadModifyWrite atomics. It returns the input value without truncating it into TypedArray's requirement.
        For example,

            var u8 = new Uint8Array(8);
            Atomics.store(u8, 0, 0xffff) === 0xffff // Not 0xff.

        However DFG and FTL implementations do not handle it correctly.
        This patch fixes AI, fixup, and code generations to handle this.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        (JSC::DFG::SpeculativeJIT::getIntTypedArrayStoreOperandForAtomics):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::setIntTypedArrayLoadResult):
        (JSC::FTL::DFG::LowerDFGToB3::toIntegerOrInfinity):

2021-02-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Object.entries in C++
        https://bugs.webkit.org/show_bug.cgi?id=221380

        Reviewed by Alexey Shvayka.

        This patch implements Object.entries in C++ because it is more efficient.
        It is not using dynamic feature (like, calling a callback). And in C++,
        we can avoid JSArray allocations for @Object.@getOwnPropertyNames.

        This patch also removes unnecessary JS private functions, @propertyIsEnumerable,
        and @getOwnPropertyNames.

        * builtins/BuiltinNames.h:
        * builtins/ObjectConstructor.js:
        (entries): Deleted.
        * bytecode/LinkTimeConstant.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-02-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Insert PhantomLocal just before SetLocal for |this| to ensure liveness
        https://bugs.webkit.org/show_bug.cgi?id=221353
        <rdar://problem/70373862>

        Reviewed by Saam Barati.

        Let's consider the following case before SSA conversion.

            BB#0:
                SetArgumentDefinitely(this)
                ...
            @a: SomethingFun()
                MoveHint(@a, this)
                SetLocal(@a, this)
                Jump #1

            BB#1:
                ...
                ExitOK (this point)
                ...
            @b: SomethingFun()
                MoveHint(@b, this)
                SetLocal(@b, this)
                ...

            BB#2: (Catch entry point)
                ...
            @c: SetArgumentDefinitely(this)
                ...
                Jump #1

        We have two entry points. And BB#0 sets @a to |this| while BB#2 does not update |this|, so it is using @c.
        We have several patterns we can store |this|: arrow functions' |this| loading, derived constructors' |this| update. So we can see
        SetLocal(@x, this) at arbitrary code points in CodeBlocks having them.

        The problem is that DFG strongly assumed that |this| is initialized in the root basic block only once. So usually, we do not insert Flush/PhantomLocal for |this|.
        But this is problematic when we can store |this| at arbitrary basic blocks since we do not properly insert Flush/PhantomLocal(this) in BB#1's just before Store.

        Not inserting that in the above case makes |this| dead in BB#1's head liveness. Then we do not properly insert Phi(BB#0, BB#2) for |this|.
        This is OK for non |this| locals since literally that local is not used at all in BB#1. But |this| is special since it is always live in bytecode.
        So, OSR availability will be broken in the above graph: at ExitOK place, |this| must be live in bytecode. But |this| is pointing ConflictingFlush since
        BB#0 says @a and BB#2 says @c while we do not have Phi.

        The problem is that we do not keep liveness of |this| properly in BB#1. When setting a new |this|, we insert PhantomLocal to keep liveness so that appropriate Phi
        will be inserted when two predecessors have different DFG nodes for |this|, and this graph can appear in arrow functions, derived constructors, and code with catch.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::setArgument):
        * dfg/DFGVariableAccessDataDump.cpp:
        (JSC::DFG::VariableAccessDataDump::dump const):

2021-02-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Atomics should support BigInt64Array / BigUint64Array
        https://bugs.webkit.org/show_bug.cgi?id=221245

        Reviewed by Keith Miller.

        This patch adds BigInt64Array / BigUint64Array support for Atomics.

        1. Atomics.store should be rewritten since it returns non-type-coerced result, so we cannot use atomicReadModifyWrite.
           The spec also describes Atomics.store without using AtomicReadModifyWrite[1].
        2. Extend Atomics.isLockFree to also accept a size of 8.
        3. Currently, DFG / FTL handle Atomics + BigInt64Array/BigUint64Array as Array::Generic.

        [1]: https://tc39.es/ecma262/#sec-atomics.store

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsIsLockFree):
        * runtime/AtomicsObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::atomicsWaitImpl):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * runtime/ToNativeFromValue.h:
        (JSC::toNativeFromValue):

2021-02-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [AppleWin 32bit][LLInt] LLIntData.h(104) : warning C4172: returning address of local variable or temporary: id
        https://bugs.webkit.org/show_bug.cgi?id=220714

        Reviewed by Mark Lam.

        This patch fixes LLInt build when ENABLE(COMPUTED_GOTO_OPCODES) is false.

        * llint/LLIntData.h:
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide16):
        (JSC::LLInt::getOpcodeWide32):
        (JSC::LLInt::getOpcodeAddress):
        (JSC::LLInt::getOpcodeWide16Address):
        (JSC::LLInt::getOpcodeWide32Address):
        (JSC::LLInt::getCodePtr):
        (JSC::LLInt::getWide16CodePtr):
        (JSC::LLInt::getWide32CodePtr):

2021-02-02  Ross Kirsling  <ross.kirsling@sony.com>

        Completion value of a finally block should not be ignored if completion is abrupt
        https://bugs.webkit.org/show_bug.cgi?id=221238

        Reviewed by Yusuke Suzuki.

        Per https://tc39.es/ecma262/#sec-try-statement-runtime-semantics-evaluation,
        the completion value of a finally block is ignored *just* when it is a normal completion,
        but we've been ignoring it in all cases.

        This patch ensures that when a finally block is exited with a break or continue statement,
        its completion value is used as the completion value for the entire TryStatement.

        (Note: This behavior will be important for the upcoming "do expressions" proposal,
        as it is effectively a reification of completion values.)

        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):
        1. Don't throw away the result of evaluating the finally block.
        2. Only use the try or catch block result if we make it all the way to the end of the finally block.

2021-02-02  Don Olmstead <don.olmstead@sony.com>

        REGRESSION(r269309): [Cocoa] RemoteInspectorCocoa files are being compiled twice
        https://bugs.webkit.org/show_bug.cgi?id=220951
        <rdar://problem/73848263>

        Reviewed by BJ Burg.

        Refactor our SourcesCocoa files in JavaScriptCore to avoid double-listing
        or double-building remote inspection-related files. Properly track
        inspector/remote/SourcesCocoa.txt as a build dependency.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/generate-unified-sources.sh:
        * SourcesCocoa.txt:

2021-02-02  Xan Lopez  <xan@igalia.com>

        [JSC] Small cleanup in StackVisitor::readNonInlinedFrame
        https://bugs.webkit.org/show_bug.cgi?id=221259

        Reviewed by Yusuke Suzuki.

        isAnyWasmCallee() will never be true if WebAssembly is disabled at
        compile time, so we can move a good chunk of code inside the
        USE(WEBASSEMBLY) check. Also move all constant initializations at
        the beginning of the method, and remove an unnecessary extra
        variable.

        * interpreter/StackVisitor.cpp:
        (JSC::StackVisitor::readNonInlinedFrame):

2021-02-02  BJ Burg  <bburg@apple.com>

        Web Inspector: implement the basics for showing/hiding grid overlays
        https://bugs.webkit.org/show_bug.cgi?id=221062

        Reviewed by Devin Rousso.

        Add new commands to show and hide CSS grid overlays:

            - DOM.showGridOverlay
            - DOM.hideGridOverlay

        * inspector/protocol/DOM.json:

2021-02-02  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late January 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=221044

        Unreviewed non-unified build fixes.

        * wasm/WasmStreamingCompiler.cpp: Add missing WasmWorklist.h header.
        * wasm/WasmStreamingCompiler.h: Add missing JSCJSValue.h header and forwars declarations
        for JSGlobalObject, JSObject, and VM.
        * wasm/WasmStreamingPlan.cpp: Add missing WasmLLIntPlan.h header.
        * wasm/js/WebAssemblyGlobalConstructor.cpp: Add missing JSWebAssemblyHelpers.h and
        JSWebAssemblyRuntimeError.h headers.

2021-02-01  Saam Barati  <sbarati@apple.com>

        Sign m_offset in AssemblerLabel
        https://bugs.webkit.org/show_bug.cgi?id=221237

        Reviewed by Mark Lam.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::labelForWatchpoint):
        (JSC::ARM64Assembler::label):
        (JSC::ARM64Assembler::getRelocatedAddress):
        (JSC::ARM64Assembler::getDifferenceBetweenLabels):
        (JSC::ARM64Assembler::getCallReturnOffset):
        (JSC::ARM64Assembler::linkJump):
        (JSC::ARM64Assembler::addressOf):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::labelForWatchpoint):
        (JSC::ARMv7Assembler::label):
        (JSC::ARMv7Assembler::getRelocatedAddress):
        (JSC::ARMv7Assembler::getDifferenceBetweenLabels):
        (JSC::ARMv7Assembler::getCallReturnOffset):
        (JSC::ARMv7Assembler::linkJump):
        (JSC::ARMv7Assembler::linkCall):
        (JSC::ARMv7Assembler::linkPointer):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Jump::link const):
        (JSC::AbstractMacroAssembler::Jump::linkTo const):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerLabel::AssemblerLabel):
        (JSC::AssemblerLabel::operator=):
        (JSC::AssemblerLabel::isSet const):
        (JSC::AssemblerLabel::labelAtOffset const):
        (JSC::AssemblerLabel::operator== const):
        (JSC::AssemblerLabel::offset const):
        (JSC::AssemblerLabel::setOffset):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::offsetOf):
        (JSC::LinkBuffer::applyOffset):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::labelForWatchpoint):
        (JSC::MIPSAssembler::label):
        (JSC::MIPSAssembler::getRelocatedAddress):
        (JSC::MIPSAssembler::getDifferenceBetweenLabels):
        (JSC::MIPSAssembler::getCallReturnOffset):
        (JSC::MIPSAssembler::linkJump):
        (JSC::MIPSAssembler::linkCall):
        (JSC::MIPSAssembler::linkPointer):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::labelForWatchpoint):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::linkJump):
        (JSC::X86Assembler::linkCall):
        (JSC::X86Assembler::linkPointer):
        (JSC::X86Assembler::getCallReturnOffset):
        (JSC::X86Assembler::getRelocatedAddress):
        (JSC::X86Assembler::getDifferenceBetweenLabels):

2021-02-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] TypedArray#fill should be implemented in C++
        https://bugs.webkit.org/show_bug.cgi?id=221182

        Reviewed by Ross Kirsling.

        Since TypedArray#fill does not invoke callbacks, implementing it in C++ is better.
        This removes several utility functions exposed in JS for TypedArray#fill implementation,
        and makes TypedArray#fill simple.

        * builtins/BuiltinNames.h:
        * builtins/TypedArrayPrototype.js:
        (globalPrivate.typedArrayClampArgumentToStartOrEnd): Deleted.
        (fill): Deleted.
        * bytecode/LinkTimeConstant.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::validateTypedArray):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncFill):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/JSTypedArrayViewPrototype.h:

2021-02-01  Saam Barati  <sbarati@apple.com>

        Lazily create m_windowCloseWatchpoints so we don't mistakenly think we have a frame when re-associating a document to a given cached frame
        https://bugs.webkit.org/show_bug.cgi?id=221098
        <rdar://72894454>

        Reviewed by Ryosuke Niwa and Mark Lam.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::commit):
        * bytecode/Watchpoint.h:
        (JSC::WatchpointSet::isStillValidOnJSThread const):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::setWatchpointSet):

2021-01-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement BigInt64Array and BigUint64Array
        https://bugs.webkit.org/show_bug.cgi?id=190800

        Reviewed by Ross Kirsling.

        This patch implements BigInt64Array and BigUint64Array.

            1. In this patch, we do not support BigInt64Array/BigUint64Array + Atomics yet.
            2. We make canGetIndexQuickly false for BigInt64Array and BigUint64Array. And we
               use generic path for getting values from BigInt64Array and BigUint64Array. We
               will optimize it in [1] and [2]. But possibly, this does not have super large
               impact on performance since getting value from BigInt64Array and BigUint64Array
               are already costly since we always need to allocate BigInt for results.
            3. DFG / FTL GetByVal etc. are using Array::Generic for BigInt64Array and BigUint64Array.
            4. But GetArrayLength, CheckArray, byteLength getter etc. are using Array::BigInt64Array / Array::BigUint64Array
               for optimization.
            5. Extend ArrayProfile's ArrayMode for BigInt64Array and BigUint64Array so that ArrayProfile
               can record BigInt64Array and BigUint64Array information.
            6. Implement DataView#{setBigInt64,setBigUint64,getBigInt64,getBigUint64}.
            7. Extend JSC APIs to support BigInt64Array and BigUint64Array.

        [1]: https://bugs.webkit.org/show_bug.cgi?id=221181
        [2]: https://bugs.webkit.org/show_bug.cgi?id=221183

        * API/JSTypedArray.cpp:
        (toJSTypedArrayType):
        (toTypedArrayType):
        (createTypedArray):
        * API/JSValueRef.h:
        * API/tests/TypedArrayCTest.cpp:
        (forEachTypedArrayType):
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/BuiltinNames.h:
        * builtins/TypedArrayPrototype.js:
        (fill):
        (map):
        (filter):
        * bytecode/ArrayProfile.cpp:
        (JSC::dumpArrayModes):
        * bytecode/ArrayProfile.h:
        * bytecode/ByValInfo.h:
        (JSC::jitArrayModeForClassInfo):
        (JSC::jitArrayModePermitsPut):
        (JSC::typedArrayTypeForJITArrayMode):
        * bytecode/LinkTimeConstant.h:
        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        (JSC::speculationToAbbreviatedString):
        (JSC::speculationFromTypedArrayType):
        (JSC::typedArrayTypeFromSpeculation):
        (JSC::speculationFromString):
        * bytecode/SpeculatedType.h:
        (JSC::isBigInt64ArraySpeculation):
        (JSC::isBigUint64ArraySpeculation):
        (JSC::isDirectArgumentsSpeculation):
        (JSC::isScopedArgumentsSpeculation):
        (JSC::isActionableIntMutableArraySpeculation): Deleted.
        (JSC::isActionableFloatMutableArraySpeculation): Deleted.
        (JSC::isActionableTypedMutableArraySpeculation): Deleted.
        (JSC::isActionableMutableArraySpeculation): Deleted.
        (JSC::isActionableArraySpeculation): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::fromObserved):
        (JSC::DFG::ArrayMode::refine const):
        (JSC::DFG::ArrayMode::alreadyChecked const):
        (JSC::DFG::arrayTypeToString):
        (JSC::DFG::toTypedArrayType):
        (JSC::DFG::toArrayType):
        (JSC::DFG::permitsBoundsCheckLowering):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::supportsSelfLength const):
        (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        (JSC::DFG::operationNewTypedArrayWithSizeForType):
        (JSC::DFG::operationNewTypedArrayWithOneArgumentForType):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::subtype):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByVal):
        * jit/Repatch.cpp:
        (JSC::tryCacheArrayGetByVal):
        * llint/LowLevelInterpreter.asm:
        * runtime/AtomicsObject.cpp:
        * runtime/AtomicsObject.h:
        * runtime/BigInt64Array.h: Copied from Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp.
        * runtime/BigUint64Array.h: Copied from Source/JavaScriptCore/runtime/JSTypedArrayConstructors.cpp.
        * runtime/JSArrayBufferView.cpp:
        (JSC::elementSize):
        (JSC::validateTypedArray):
        * runtime/JSArrayBufferView.h:
        * runtime/JSBigInt.h:
        * runtime/JSCell.h:
        * runtime/JSDataView.h:
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewConstructor.h:
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::setWithSpecificType):
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/JSTypedArrayConstructors.cpp:
        * runtime/JSTypedArrayConstructors.h:
        * runtime/JSTypedArrayPrototypes.cpp:
        * runtime/JSTypedArrayPrototypes.h:
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSTypedArrayViewPrototype.h:
        * runtime/JSTypedArrays.cpp:
        * runtime/JSTypedArrays.h:
        * runtime/ToNativeFromValue.h:
        (JSC::toNativeFromValue):
        (JSC::toNativeFromValueWithoutCoercion):
        * runtime/TypedArrayAdaptors.h:
        (JSC::IntegralTypedArrayAdaptor::toJSValue):
        (JSC::FloatTypedArrayAdaptor::toJSValue):
        (JSC::BigIntTypedArrayAdaptor::toJSValue):
        (JSC::BigIntTypedArrayAdaptor::toNativeFromInt32):
        (JSC::BigIntTypedArrayAdaptor::toNativeFromUint32):
        (JSC::BigIntTypedArrayAdaptor::toNativeFromDouble):
        (JSC::BigIntTypedArrayAdaptor::convertTo):
        (JSC::Uint8ClampedAdaptor::toJSValue):
        (JSC::IntegralTypedArrayAdaptor::toDouble): Deleted.
        (JSC::FloatTypedArrayAdaptor::toDouble): Deleted.
        (JSC::Uint8ClampedAdaptor::toDouble): Deleted.
        * runtime/TypedArrayType.cpp:
        (JSC::constructorClassInfoForType):
        (WTF::printInternal):
        * runtime/TypedArrayType.h:
        (JSC::isBigIntTypedView):
        (JSC::logElementSize):
        (JSC::isBigInt):
        (JSC::isSigned):
        (JSC::contentType):
        * runtime/TypedArrays.h:
        * runtime/VM.cpp:
        * runtime/VM.h:

2021-02-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add @ in Error.stack if URL exists
        https://bugs.webkit.org/show_bug.cgi?id=221184

        Reviewed by Keith Miller.

        Append '@' if URL exists even if function name does not exist to make the
        format simple for parsing in JS (splitting with '@' to extract URL and function name).

        * runtime/StackFrame.cpp:
        (JSC::StackFrame::toString const):

2021-01-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix after r272071
        https://bugs.webkit.org/show_bug.cgi?id=220914

        Since WebAssembly.Global can be "immutable", we cannot use Wasm::Global::set when setting an initial value.

        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Adjust property order of host JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=221168

        Reviewed by Darin Adler.

        We should first define "length" before "name".
        This will be included in upcoming test262 update[1].

        [1]: https://github.com/tc39/test262/pull/2921

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):

2021-01-29  Keith Miller  <keith_miller@apple.com>

        SourceParseMode should be a member of the JSC::Parser
        https://bugs.webkit.org/show_bug.cgi?id=221149

        Reviewed by Ross Kirsling.

        Right now we pass the SourceParseMode as a argument to many of the
        functions in the parser. This patch move it into a member on the
        class. This will make it available deeper in the parser, which is
        important for implementing top level await.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::Parser):
        (JSC::Parser<LexerType>::parseInner):
        (JSC::Parser<LexerType>::parseModuleSourceElements):
        (JSC::Parser<LexerType>::parseAsyncFunctionSourceElements):
        (JSC::Parser<LexerType>::parseAsyncGeneratorFunctionSourceElements):
        (JSC::Parser<LexerType>::parseFunctionBody):
        (JSC::Parser<LexerType>::parseFunctionParameters):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseAsyncFunctionDeclaration):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parsePropertyMethod):
        (JSC::Parser<LexerType>::parseGetterSetter):
        (JSC::Parser<LexerType>::parseFunctionExpression):
        (JSC::Parser<LexerType>::parseAsyncFunctionExpression):
        (JSC::Parser<LexerType>::parseArrowFunctionExpression):
        * parser/Parser.h:
        (JSC::Parser::sourceParseMode const):
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        (JSC::parseFunctionForFunctionConstructor):

2021-01-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, internal build fix after r272082
        https://bugs.webkit.org/show_bug.cgi?id=221147

        * runtime/Options.cpp:
        (JSC::canUseJITCage):

2021-01-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add com.apple.private.securejit entitlement for JITCage
        https://bugs.webkit.org/show_bug.cgi?id=221147

        Reviewed by Keith Miller.

        Add com.apple.private.securejit only for iOS, used for JITCage.

        * entitlements.plist:
        * runtime/Options.cpp:
        (JSC::canUseJITCage):

2021-01-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix WebAssembly.Global's error message and support "funcref"
        https://bugs.webkit.org/show_bug.cgi?id=221157

        Reviewed by Keith Miller.

        Since it accepts "anyfunc" and "externref", we should update the error message.
        And we should support "funcref" too.

        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-29  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Enable reference types by default
        https://bugs.webkit.org/show_bug.cgi?id=220890

        Reviewed by Yusuke Suzuki.

        Enable wasm reference types by default.

        * runtime/OptionsList.h:

2021-01-29  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [JSC] WebAssembly.Global should support Funcref and Externref
        https://bugs.webkit.org/show_bug.cgi?id=220914

        Reviewed by Yusuke Suzuki.

        Allow using reference types in ctor of WebAssembly.Global
        according to the spec
        https://webassembly.github.io/reference-types/js-api/index.html#dom-global-global.

        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-29  David Kilzer  <ddkilzer@apple.com>

        check-webkit-style: warn about WTF::BlockPtr use in JavaScriptCore until ARC is enabled
        <https://webkit.org/b/221108>
        <rdar://problem/73726640>

        Reviewed by Joseph Pecoraro.

        * API/JSVirtualMachine.mm:
        * inspector/remote/RemoteConnectionToTarget.h:
        - Remove or replace unused <wtf/BlockPtr.h> headers.

2021-01-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add JSPromise::rejectedPromise
        https://bugs.webkit.org/show_bug.cgi?id=221077

        Reviewed by Mark Lam.

        This patch adds JSPromise::rejectedPromise static function which can return newly created rejected promise.
        The benefit of this function is that it avoids calling JS functions internally. It is efficient, fast, plus,
        we can ensure that no JS related error happens (stack-overflow, terminated-execution errors).

        * builtins/PromiseOperations.js:
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::rejectedPromise):
        * runtime/JSPromise.h:
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-27  Yusuke Suzuki  <ysuzuki@apple.com>

        WebAssembly: add support for stream APIs
        https://bugs.webkit.org/show_bug.cgi?id=173105

        Reviewed by Keith Miller.

        This patch implements WebAssembly.{compileStreaming,instantiateStreaming}. JavaScriptCore offers Wasm::StreamingCompiler interface to WebCore,
        so that WebCore can feed FetchResponse and compile wasm code in a streaming fashion.

        Wasm::StreamingCompiler drives Wasm::LLIntPlan while it does not use Wasm::Worklist since currently Wasm::Worklist is not suitable abstraction for
        streaming compilation which generates compilation tasks incrementally. Instead, Wasm::StreamingCompiler generates Wasm::StreamingPlan and enqueues
        them to Wasm::Worklist, and each StreamingPlan compiles one function at a time. And we gather these compiled functions into the one LLIntPlan and
        finally Wasm::StreamingCompiler completes Wasm::LLIntPlan.

        We already have Wasm::StreamingParser, which is designed for streaming compilation. We can pass bytes to this parser, and this parser invokes a callback
        when a new wasm function is found. Then, Wasm::StreamingCompiler generates Wasm::StreamingPlan for that.

        We add WasmStreamingCompiler JS objects to JSC shell to test streaming compilation easily.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/WebAssembly.js:
        (compileStreaming):
        (instantiateStreaming):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::cancelPendingWork):
        * runtime/DeferredWorkTimer.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        * runtime/OptionsList.h:
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::BBQPlan):
        * wasm/WasmBBQPlan.h:
        * wasm/WasmCodeBlock.cpp:
        (JSC::Wasm::CodeBlock::CodeBlock):
        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::EntryPlan):
        * wasm/WasmEntryPlan.h:
        * wasm/WasmLLIntPlan.cpp:
        (JSC::Wasm::LLIntPlan::LLIntPlan):
        (JSC::Wasm::LLIntPlan::didCompleteCompilation):
        (JSC::Wasm::LLIntPlan::completeInStreaming):
        (JSC::Wasm::LLIntPlan::didCompileFunctionInStreaming):
        (JSC::Wasm::LLIntPlan::didFailInStreaming):
        * wasm/WasmLLIntPlan.h:
        * wasm/WasmModule.cpp:
        (JSC::Wasm::Module::validateSync):
        (JSC::Wasm::Module::validateAsync):
        * wasm/WasmStreamingCompiler.cpp: Added.
        (JSC::Wasm::StreamingCompiler::StreamingCompiler):
        (JSC::Wasm::StreamingCompiler::~StreamingCompiler):
        (JSC::Wasm::StreamingCompiler::create):
        (JSC::Wasm::StreamingCompiler::didReceiveFunctionData):
        (JSC::Wasm::StreamingCompiler::didCompileFunction):
        (JSC::Wasm::StreamingCompiler::didFinishParsing):
        (JSC::Wasm::StreamingCompiler::completeIfNecessary):
        (JSC::Wasm::StreamingCompiler::didComplete):
        (JSC::Wasm::StreamingCompiler::finalize):
        (JSC::Wasm::StreamingCompiler::fail):
        (JSC::Wasm::StreamingCompiler::cancel):
        * wasm/WasmStreamingCompiler.h: Added.
        * wasm/WasmStreamingParser.cpp:
        * wasm/WasmStreamingParser.h:
        * wasm/WasmStreamingPlan.cpp: Copied from Source/JavaScriptCore/builtins/WebAssembly.js.
        (JSC::Wasm::StreamingPlan::StreamingPlan):
        (JSC::Wasm::StreamingPlan::work):
        * wasm/WasmStreamingPlan.h: Copied from Source/JavaScriptCore/wasm/js/JSWebAssembly.h.
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSWebAssembly::finishCreation):
        (JSC::JSWebAssembly::instantiateForStreaming):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/JSWebAssembly.h:

2021-01-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Avoid using DirectCall when executable is wasm function
        https://bugs.webkit.org/show_bug.cgi?id=221055

        Reviewed by Keith Miller.

        This is a partial patch from https://bugs.webkit.org/show_bug.cgi?id=220339, which is reverted because of Facebook crash.
        For now, we just avoid using DirectCall to wasm functions so that normal Call will be used, and it is efficient. This
        patch avoids JetStream2 regression.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * jit/JITOperations.cpp:
        (JSC::virtualForWithFunction):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::create):

2021-01-27  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, rebaselining builtin generator test result files
        https://bugs.webkit.org/show_bug.cgi?id=221028

        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Combined.js-result:
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:

2021-01-27  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r271186.
        https://bugs.webkit.org/show_bug.cgi?id=221051

        Breaks Facebook on arm64e devices

        Reverted changeset:

        "[JSC] DFG/FTL DirectCall need to respect Wasm IC"
        https://bugs.webkit.org/show_bug.cgi?id=220339
        https://trac.webkit.org/changeset/271186

2021-01-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove InspectorInstrumentation object
        https://bugs.webkit.org/show_bug.cgi?id=221028

        Reviewed by Ryosuke Niwa.

        Remove InspectorInstrumentation since it is not used. We would like to clean up Promise's rejection path.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Combined.js:
        (rejectPromise):
        (fulfillPromise):
        * Scripts/tests/builtins/JavaScriptCore-Builtin.Promise-Separate.js:
        (rejectPromise):
        (fulfillPromise):
        * Scripts/tests/builtins/expected/JavaScriptCore-Builtin.Promise-Separate.js-result:
        * Sources.txt:
        * builtins/BuiltinNames.h:
        * builtins/InspectorInstrumentationObject.js: Removed.
        * builtins/PromiseOperations.js:
        (globalPrivate.rejectPromise):
        (globalPrivate.fulfillPromise):
        * bytecode/LinkTimeConstant.h:
        * runtime/InspectorInstrumentationObject.cpp: Removed.
        * runtime/InspectorInstrumentationObject.h: Removed.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2021-01-26  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Change default value for externref's tables from null to undefined
        https://bugs.webkit.org/show_bug.cgi?id=220918

        Reviewed by Yusuke Suzuki.

        Update reference types tests to satisfy the spec:
        Externref's tables default value should be undefined.

        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::defaultValueForTable):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-25  Simon Fraser  <simon.fraser@apple.com>

        Crash when remote inspecting in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=220956
        <rdar://73379637>

        Reviewed by Devin Rousso.

        Convert RemoteConnectionToTarget from using BlockPtr<> to Function<> because BlockPtr<> 
        was triggering crashes which seem to be related to mixing ARC and non-ARC code.

        * inspector/remote/RemoteConnectionToTarget.h:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:
        (Inspector::RemoteTargetHandleRunSourceGlobal):
        (Inspector::RemoteTargetQueueTaskOnGlobalQueue):
        (Inspector::RemoteTargetHandleRunSourceWithInfo):
        (Inspector::RemoteConnectionToTarget::dispatchAsyncOnTarget):
        (Inspector::RemoteConnectionToTarget::setup):
        (Inspector::RemoteConnectionToTarget::close):
        (Inspector::RemoteConnectionToTarget::sendMessageToTarget):
        (Inspector::RemoteConnectionToTarget::queueTaskOnPrivateRunLoop):
        (Inspector::RemoteConnectionToTarget::takeQueue):

2021-01-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r270874): Some React Native apps are reported broken on iOS
        https://bugs.webkit.org/show_bug.cgi?id=220809

        Reviewed by Saam Barati.

        r270874 fixed for/in shadowing issue by introducing an invariant: a property
        returned by getOwn*PropertyNames() in DontEnumPropertiesMode::Exclude should be
        reported as [[Enumerable]] by getOwnPropertySlot(). Otherwise, for/in skips the
        property, which causes RN apps to break.

        Since there is no way to enforce this invariant for opaque API objects like
        JSCallbackObject, this change skips [[Enumerable]] check for them by introducing
        GetOwnPropertySlotMayBeWrongAboutDontEnum out of line type info flag.

        Also, this patch reverts JSCallbackObject::getOwnPropertySlot() changes of r270874
        that are no longer necessary and observable (via Object.getOwnPropertyDescriptor).

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
        * API/tests/testapiScripts/testapi.js:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasEnumerableProperty const):
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::getOwnPropertySlotMayBeWrongAboutDontEnum const):

2021-01-25  Chris Dumez  <cdumez@apple.com>

        Update availability annotations to match the macOS 11.0 and iOS 14.0 GM SDKs
        https://bugs.webkit.org/show_bug.cgi?id=220874
        <rdar://73474368>

        Reviewed by Darin Adler.

        * API/JSContextPrivate.h:
        * API/JSContextRefPrivate.h:

2021-01-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DeferredWorkTimer should clear pending task after running
        https://bugs.webkit.org/show_bug.cgi?id=220888

        Reviewed by Mark Lam.

        Wasm code assumes that scheduleWorkSoon clears pending dependencies. But DeferredWorkTimer is not clearing it, and instead, FinalizationRegistry etc. is clearing
        it explicitly. This semantics is problematic. We are putting cancelPendingWork in JSPromise::resolve / JSPromise::reject. But they do not work since this is C++
        version of them, and JSPromise has JS version of them. And if JS version is called, cancelPendingWork is not called. And we do not want to complicate JSPromise's
        reject / resolve path since this is super hot, and we should keep them in JS.
        Instead, we should always clear pending task if it is called.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::doWork):
        * runtime/DeferredWorkTimer.h:
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::finalizeUnconditionally):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::resolve): Remove this work-around, and instead, we must call scheduleWorkSoon if addPendingWork is called.
        (JSC::JSPromise::reject): Ditto.
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSWebAssembly::webAssemblyModuleValidateAsync):
        (JSC::instantiate): Use instance for Ticket instead of promise to disambiguate the ticket scheduling from compileAndInstantiate's one easily.
        (JSC::compileAndInstantiate): There are path that we do not call scheduleWorkSoon while we call addPendingWork, this is wrong, and JSPromise's workaround is added to
        alleviate this situation. We should not do that: we must call scheduleWorkSoon at some point if addPendingWork is called.
        (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync):

2021-01-23  Xan Lopez  <xan@igalia.com>

        [JSC] Allow to build WebAssembly without B3
        https://bugs.webkit.org/show_bug.cgi?id=220365

        Reviewed by Yusuke Suzuki.

        Make all the B3 related code in WebAssembly a compile-time
        option. When disabled WebAssembly will only use its LLInt tier.

        * llint/LLIntOfflineAsmConfig.h: define WEBASSEMBLY_B3JIT for the
        offline assembler.
        * llint/WebAssembly.asm: guard B3 code inside WEBASSEMBLY_B3JTI ifdefs.
        * wasm/WasmAirIRGenerator.cpp: ditto.
        * wasm/WasmAirIRGenerator.h: ditto.
        * wasm/WasmB3IRGenerator.cpp: ditto.
        * wasm/WasmB3IRGenerator.h: ditto.
        * wasm/WasmBBQPlan.cpp: ditto.
        * wasm/WasmBBQPlan.h: ditto.
        * wasm/WasmCallee.h: ditto.
        * wasm/WasmCodeBlock.cpp:
        (JSC::Wasm::CodeBlock::CodeBlock): ditto.
        * wasm/WasmCodeBlock.h:
        (JSC::Wasm::CodeBlock::wasmEntrypointCalleeFromFunctionIndexSpace): ditto.
        * wasm/WasmLLIntGenerator.h: ditto.
        * wasm/WasmLLIntPlan.cpp: ditto.
        * wasm/WasmOMGForOSREntryPlan.cpp: ditto.
        * wasm/WasmOMGForOSREntryPlan.h: ditto.
        * wasm/WasmOMGPlan.cpp: ditto.
        * wasm/WasmOMGPlan.h: ditto.
        * wasm/WasmOSREntryData.h: ditto.
        * wasm/WasmOperations.cpp: ditto.
        * wasm/WasmOperations.h: ditto.
        * wasm/WasmPlan.cpp: ditto.
        * wasm/WasmPlan.h: ditto.
        * wasm/WasmSlowPaths.cpp: ditto.
        * wasm/WasmSlowPaths.h: ditto.
        * wasm/WasmThunks.cpp: ditto.
        * wasm/WasmThunks.h: ditto.
        * wasm/WasmTierUpCount.cpp: ditto.
        * wasm/WasmTierUpCount.h: ditto.
        * wasm/generateWasmOpsHeader.py: ditto.

2021-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Should SharedArrayBuffer/WebAssembly.Memory really throw?
        https://bugs.webkit.org/show_bug.cgi?id=220364

        Reviewed by Mark Lam.

        Not accessing "shared" field if Options::useSharedArrayBuffer() is false.

        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-22  Keith Miller  <keith_miller@apple.com>

        Obj-C API should do correct type checks when using a 32-bit address space
        https://bugs.webkit.org/show_bug.cgi?id=220880
        <rdar://72370334>

        Reviewed by Tadeu Zagallo.

        * API/JSValue.mm:
        (-[JSValue isNull]):
        (-[JSValue isBoolean]):
        (-[JSValue isNumber]):
        (-[JSValue isString]):

2021-01-22  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION (r271731): Unchecked JS exception under GlobalObject::moduleLoaderFetch
        https://bugs.webkit.org/show_bug.cgi?id=220868

        Reviewed by Mark Lam.

        Because TerminatedExecutionError needs to be uncaught, CatchScope's semantics does not work well.
        So, we extend ThrowScope to implement CatchScope's feature, and use ThrowScope etc.
        We also add JSPromise::rejectWithCaughtException since this pattern is common enough.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderFetch):
        * runtime/Completion.cpp:
        (JSC::rejectPromise):
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::rejectWithCaughtException):
        * runtime/JSInternalPromise.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::reject): Deleted.
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::rejectWithCaughtException):
        * runtime/JSPromise.h:
        * runtime/ThrowScope.h:
        (JSC::ThrowScope::clearException):
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::resolve):
        (JSC::JSWebAssembly::webAssemblyModuleValidateAsync):
        (JSC::instantiate):
        (JSC::compileAndInstantiate):
        (JSC::JSWebAssembly::webAssemblyModuleInstantinateAsync):
        (JSC::reject): Deleted.
        (JSC::webAssemblyModuleValidateAsyncInternal): Deleted.
        (JSC::webAssemblyModuleInstantinateAsyncInternal): Deleted.

2021-01-22  Mark Lam  <mark.lam@apple.com>

        Disable Options:useAtMethod because of compatibility issue.
        https://bugs.webkit.org/show_bug.cgi?id=220788
        rdar://72933608

        Reviewed by Saam Barati and Yusuke Suzuki.

        See https://github.com/tc39/proposal-relative-indexing-method/issues/41.

        * jsc.cpp:
        (CommandLine::parseArguments):
        - enable Options::useAtMethod by default for the jsc shell for testing.
        * runtime/OptionsList.h:

2021-01-21  Devin Rousso  <drousso@apple.com>

        [Apple Pay] use the first item in `shippingOptions` even when it's not `selected`
        https://bugs.webkit.org/show_bug.cgi?id=220810

        Reviewed by Andy Estes.

        * inspector/protocol/Console.json:
        * runtime/ConsoleTypes.h:
        * inspector/ConsoleMessage.cpp:
        (Inspector::messageSourceValue):
        * runtime/ConsoleClient.cpp:
        (JSC::appendMessagePrefix):
        Add a new `PaymentRequest` value to the `ChannelSource` enum.

2021-01-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSPromise should not propagate TerminatedExecutionError
        https://bugs.webkit.org/show_bug.cgi?id=220820
        <rdar://problem/72929399>

        Reviewed by Mark Lam.

        TerminatedExecutionError is uncatcheable exception to finish JS execution as soon as possible.
        We should not propagate TerminatedExecutionError in JSPromise's rejection.
        In this patch, we do not reject promise if exception is TerminatedExecutionError.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * API/JSContext.mm:
        (-[JSContext evaluateJSScript:]):
        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderFetch):
        (runWithOptions):
        * runtime/Completion.cpp:
        (JSC::rejectPromise):
        (JSC::loadAndEvaluateModule):
        (JSC::loadModule):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSModuleLoader.cpp:
        (JSC::reject):
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/JSWebAssembly.cpp:
        (JSC::reject):

2021-01-19  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix GCC warnings
        https://bugs.webkit.org/show_bug.cgi?id=220718

        * dfg/DFGOperations.cpp:
        (JSC::DFG::tierUpCommon):

2021-01-19  Lauro Moura  <lmoura@igalia.com>

        REGRESSION(r271580) [GTK] LTS/Debian build failure due to unsupported g-ir-scanner parameter
        https://bugs.webkit.org/show_bug.cgi?id=220730

        Reviewed by Philippe Normand.

        No new behavior. No new tests.

        * PlatformGTK.cmake: Expose --sources-top-dirs only if available.

2021-01-19  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, mid January 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=220725

        Unreviewed non-unified build fixes.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getNonReifiedStaticPropertyNames): Remove inline function from here,
        as it is used in JSPropertyNameEnumerator.cpp and the compiler needs to see the function
        body to be able to inline it, otherwise linking fails.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getNonReifiedStaticPropertyNames): Moved inline function here.
        * wasm/WasmInstance.cpp: Add missing JSWebAssemblyHelpers.h header.
        * wasm/js/WebAssemblyModuleRecord.cpp: Add missing ObjectConstructor.h header.

2021-01-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] FTL::prepareOSREntry can clear OSR entry CodeBlock if it is already invalidated
        https://bugs.webkit.org/show_bug.cgi?id=220718
        <rdar://problem/70527068>

        Reviewed by Mark Lam.

        FTL::prepareOSREntry can clear OSR entry CodeBlock if it is already invalidated. However, the caller is not assuming that,
        and it calls clearOSREntryBlockAndResetThresholds again. And clearOSREntryBlockAndResetThresholds's assertion hit.
        This patch correctly handles the invalidated case.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::tierUpCommon):

2021-01-18  Xan López  <xan@igalia.com>

        [JSC] Implement a B3::Compilation replacement for wasm-llint
        https://bugs.webkit.org/show_bug.cgi?id=220585

        Reviewed by Yusuke Suzuki.

        Move B3Compilation, B3OpaqueByproducts and B3OpaqueByproduct to
        jit/. They are used by non-B3 code and they are not really B3
        specific. Also rename B3CompilationPtrTag to JITCompilationPtrTag.

        * CMakeLists.txt: add new source files.
        * JavaScriptCore.xcodeproj/project.pbxproj: ditto.
        * Sources.txt: ditto.
        * b3/B3Compile.cpp:
        (JSC::B3::compile): use JITCompilationPtrTag.
        * b3/B3Compile.h: change includes.
        * b3/B3DataSection.h: ditto.
        * b3/B3Procedure.cpp: ditto.
        * b3/B3Procedure.h: ditto.
        * b3/air/testair.cpp: use JITCompilationPtrTag.
        * b3/testb3.h: change includes.
        (invoke):
        * b3/testb3_6.cpp:
        (testInterpreter): use JITCompilationPtrTag.
        (testEntrySwitchSimple): ditto.
        (testEntrySwitchNoEntrySwitch): ditto.
        (testEntrySwitchWithCommonPaths): ditto.
        (testEntrySwitchWithCommonPathsAndNonTrivialEntrypoint): ditto.
        (testEntrySwitchLoop): ditto.
        * ftl/FTLJITCode.h: use JSC::OpaqueByproducts.
        * ftl/FTLOutput.h: change includes.
        * jit/JITCompilation.cpp: Renamed from Source/JavaScriptCore/b3/B3Compilation.cpp.
        (JSC::Compilation::Compilation):
        * jit/JITCompilation.h: Renamed from Source/JavaScriptCore/b3/B3Compilation.h.
        (JSC::Compilation::code const):
        (JSC::Compilation::codeRef const):
        * jit/JITOpaqueByproduct.h: Renamed from Source/JavaScriptCore/b3/B3OpaqueByproduct.h.
        * jit/JITOpaqueByproducts.cpp: Renamed from Source/JavaScriptCore/b3/B3OpaqueByproducts.cpp.
        * jit/JITOpaqueByproducts.h: Renamed from Source/JavaScriptCore/b3/B3OpaqueByproducts.h.
        * runtime/JSCPtrTag.h: rename B3CompilationPtrTag to JITCompilationPtrTag.
        * wasm/WasmB3IRGenerator.h: use JSC::OpaqueByproducts.
        * wasm/WasmBBQPlan.cpp: use JSC::Compilation.
        (JSC::Wasm::BBQPlan::work):
        (JSC::Wasm::BBQPlan::didCompleteCompilation):
        * wasm/WasmBinding.h: change includes.
        * wasm/WasmCallee.h: ditto.
        * wasm/WasmFormat.h: use JSC::Compilation.
        * wasm/WasmLLIntPlan.cpp: ditto.
        (JSC::Wasm::LLIntPlan::didCompleteCompilation):
        * wasm/WasmLLIntPlan.h: use JITCompilationPtrTag.
        * wasm/WasmModule.h: ditto.
        * wasm/WasmOMGForOSREntryPlan.cpp: use JSC::Compilation.
        (JSC::Wasm::OMGForOSREntryPlan::work):
        * wasm/WasmOMGPlan.cpp: ditto.
        (JSC::Wasm::OMGPlan::work):
        * wasm/WasmParser.h: change includes.
        * wasm/js/WasmToJS.h: ditto.

2021-01-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] earlyReturnFromInfiniteLoopsLimit should check all caller functions when emitting
        https://bugs.webkit.org/show_bug.cgi?id=220700
        <rdar://problem/71229150>

        Reviewed by Mark Lam.

        earlyReturnFromInfiniteLoopsLimit does not return when the function is builtin. But this does not consider about the case that
        the caller is inlining and the caller is builtin. Since this returns from entire DFG / FTL functions, we should check any of
        callers are not builtin functions too.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):

2021-01-18  Mark Lam  <mark.lam@apple.com>

        [AppleWin 32bit] LLInt C Loop: LowLevelInterpreter.cpp(90,7): error C2653: 'WebConfig': is not a class or namespace name
        https://bugs.webkit.org/show_bug.cgi?id=220405

        Reviewed by Fujii Hironori.

        Add a missing #if ENABLE(UNIFIED_AND_FREEZABLE_CONFIG_RECORD).

        * llint/LowLevelInterpreter.cpp:

2021-01-18  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK] Multilib conflicts in gir files
        https://bugs.webkit.org/show_bug.cgi?id=220636

        Reviewed by Carlos Garcia Campos.

        * PlatformGTK.cmake:

2021-01-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] callerIsOMGCompiled should be robust
        https://bugs.webkit.org/show_bug.cgi?id=220697

        Reviewed by Mark Lam.

        This function did not work if this function is called from microtask / unhandled rejection since there is no caller frame.
        This patch makes this function more robust against such usage.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):

2021-01-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG/FTL Atomics should not accept Float32/Float64 typed arrays
        https://bugs.webkit.org/show_bug.cgi?id=220692
        <rdar://problem/73238369>

        Reviewed by Mark Lam.

        We accidentally accept Float32/Float64 typed arrays. We should accept only integer TypedArrays (Int8, Uint8, ... etc.)
        as specified in [1]. If the other types come, we just make it Array::Generic and call slow path which can handle them.

        [1]: https://tc39.es/ecma262/#sec-validateintegertypedarray

        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::isOneOfTypedArrayView const): Deleted.
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

2021-01-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] FTL OSR entry FlushFormat array is reversed
        https://bugs.webkit.org/show_bug.cgi?id=220695
        <rdar://problem/72930932>

        Reviewed by Mark Lam.

        After r268783, FlushFormat array is erroneously sorted in reversed order.
        This patch fixes that.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):

2021-01-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] GenericArguments<Type>::defineOwnProperty's assumption about error is not correct
        https://bugs.webkit.org/show_bug.cgi?id=220693
        <rdar://problem/72929171>

        Reviewed by Mark Lam.

        Any function taking JSGlobalObject* can cause out-of-memory error potentially. And we have a way to invoke it.
        But GenericArguments<Type>::defineOwnProperty didn't assume OutOfMemory error. This patch fixes it.

        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::defineOwnProperty):

2021-01-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add some more exception checks in globalFuncCopyDataProperties
        https://bugs.webkit.org/show_bug.cgi?id=220691

        Reviewed by Mark Lam.

        This patch add some missing exception checks in globalFuncCopyDataProperties to fix tests attached in this patch.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Add JSC API configuring GC signals in Linux
        https://bugs.webkit.org/show_bug.cgi?id=220641

        Reviewed by Mark Lam.

        Add JSConfigureSignalForGC function for Linux and FreeBSD (non Apple, non Windows platforms).

        * API/JSBase.cpp:
        (JSConfigureSignalForGC):
        * API/JSBasePrivate.h:

2021-01-15  Alexey Proskuryakov  <ap@apple.com>

        Build fixes with newer clang
        https://bugs.webkit.org/show_bug.cgi?id=220679

        Reviewed by Mark Lam.

        Class needs type casting to be used as map key in Objective-C. After https://reviews.llvm.org/D67983,
        Objective-C++ also requires this (see discussion there for why it's OK to just cast).

        * API/JSWrapperMap.mm: (-[JSWrapperMap classInfoForClass:]):

2021-01-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up DFGPreciseLocalClobberize to avoid duplicate code
        https://bugs.webkit.org/show_bug.cgi?id=220670

        Reviewed by Filip Pizlo.

        This patch cleans up DFGPreciseLocalClobberize by extracting code to lambda to remove duplicate code.

        * dfg/DFGPreciseLocalClobberize.h:
        (JSC::DFG::PreciseLocalClobberizeAdaptor::readTop):

2021-01-14  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Correctly handle escaped keyword identifiers
        https://bugs.webkit.org/show_bug.cgi?id=220634

        Reviewed by Yusuke Suzuki.

        When `let`, `await`, and `yield` are accepted as identifiers, they should be accepted even in escaped form.
        This patch ensures this behavior for variable, parameter, and label names.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::isArrowFunctionParameters):
        (JSC::Parser<LexerType>::parseStatementListItem):
        (JSC::Parser<LexerType>::parseVariableDeclarationList):
        (JSC::Parser<LexerType>::parseFormalParameters):
        (JSC::Parser<LexerType>::parseFunctionInfo):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        (JSC::Parser<LexerType>::parsePrimaryExpression):
        Make use of new parser functions.

        * parser/Parser.h:
        (JSC::isContextualKeyword): Renamed from isAnyContextualKeyword.
        (JSC::Parser::matchSpecIdentifier): Allow escaped contextual keywords.
        (JSC::Parser::matchIdentifierOrPossiblyEscapedContextualKeyword): Added.
        (JSC::Parser::isAllowedIdentifierLet): Renamed from isLETMaskedAsIDENT.
        (JSC::Parser::isPossiblyEscapedLet): Added.
        (JSC::Parser::isDisallowedIdentifierAwait): Added.
        (JSC::Parser::isAllowedIdentifierAwait): Added.
        (JSC::Parser::isPossiblyEscapedAwait): Added.
        (JSC::Parser::canUseIdentifierAwait): Added.
        (JSC::Parser::isDisallowedIdentifierYield): Added.
        (JSC::Parser::isAllowedIdentifierYield): Renamed from isYIELDMaskedAsIDENT.
        (JSC::Parser::isPossiblyEscapedYield): Added.
        (JSC::Parser::canUseIdentifierYield): Added.
        (JSC::Parser::matchAllowedEscapedContextualKeyword): Added.
        (JSC::Parser::disallowedIdentifierAwaitReason): Fix mistake (left over from previous patch).
        (JSC::isIdentifierOrAnyContextualKeyword): Deleted.
        (JSC::isSafeContextualKeyword): Deleted.
        (JSC::Parser::isDisallowedIdentifierLet): Deleted.

        * parser/ParserTokens.h:
        Remove obsolete notion of "safe contextual keyword".

2021-01-14  Xan Lopez  <xan@igalia.com>

        [JSC] Implement a B3::ValueRep replacement for wasm-llint
        https://bugs.webkit.org/show_bug.cgi?id=220412

        Reviewed by Yusuke Suzuki.

        The LLInt code in WebAssembly uses B3::ValueRep to store
        information about the calling convention for functions. We will
        use instead a new class with just enough functionality for those
        needs (basically, whether a value in a function call will be in a
        register or the stack) and convert to B3::ValueRep when
        transitioning into B3/Air. This is part of the work needed to
        allow WebAssembly to work without B3, and eventually in
        interpreted mode only.

        * Sources.txt: add new sources.
        * b3/B3ValueRep.h:
        (JSC::B3::ValueRep::ValueRep): include WasmValueLocation.h and add
        a method to convert B3::ValueRep to Wasm::ValueLocation.
        * JavaScriptCore.xcodeproj/project.pbxproj: add new sources.
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitCallPatchpoint): covert existing Wasm::ValueLocation into B3::ValueRep.
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::createCallPatchpoint): ditto.
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::CallInformation::computeResultsOffsetList): use Wasm::ValueLocation.
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION): ditto.
        * wasm/WasmValueLocation.cpp: new class, basically B3::ValueRep
        without all the stuff we don't need in WasmLLInt.
        (JSC::Wasm::ValueLocation::dump const):
        (WTF::printInternal):
        * wasm/WasmValueLocation.h: ditto.
        (JSC::Wasm::ValueLocation::ValueLocation):
        (JSC::Wasm::ValueLocation::reg):
        (JSC::Wasm::ValueLocation::stack):
        (JSC::Wasm::ValueLocation::stackArgument):
        (JSC::Wasm::ValueLocation::kind const):
        (JSC::Wasm::ValueLocation::isReg const):
        (JSC::Wasm::ValueLocation::reg const):
        (JSC::Wasm::ValueLocation::isGPR const):
        (JSC::Wasm::ValueLocation::isFPR const):
        (JSC::Wasm::ValueLocation::gpr const):
        (JSC::Wasm::ValueLocation::fpr const):
        (JSC::Wasm::ValueLocation::isStack const):
        (JSC::Wasm::ValueLocation::offsetFromFP const):
        (JSC::Wasm::ValueLocation::isStackArgument const):
        (JSC::Wasm::ValueLocation::offsetFromSP const):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::marshallJSResult): use Wasm::ValueLocation.

2021-01-14  Saam Barati  <sbarati@apple.com>

        SpeculativeJIT::compileGetEnumerableLength should not use GPRFlushedCallResult
        https://bugs.webkit.org/show_bug.cgi?id=220557

        Reviewed by Yusuke Suzuki.

        It wasn't used as the result from a call, so we're overly restricting the
        register we allocate for no good reason. 

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetEnumerableLength):

2021-01-14  Saam Barati  <sbarati@apple.com>

        Baseline JIT should emit mutatorFence after inline allocations
        https://bugs.webkit.org/show_bug.cgi?id=220572

        Reviewed by Yusuke Suzuki.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emit_op_create_this):

2021-01-13  Xan Lopez  <xan@igalia.com>

        [JSC] Remove the unused compilation byproducts from the wasm embedder entrypoint
        https://bugs.webkit.org/show_bug.cgi?id=220587

        Reviewed by Yusuke Suzuki.

        This is just passed around uninitialized, remove it.

        * wasm/WasmB3IRGenerator.h:
        * wasm/WasmBBQPlan.cpp:
        (JSC::Wasm::BBQPlan::didCompleteCompilation):

2021-01-12  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Class name 'await' is valid in sync context
        https://bugs.webkit.org/show_bug.cgi?id=220575

        Reviewed by Yusuke Suzuki.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        Check for valid 'await'.

        * parser/Parser.h:
        (JSC::Parser::isDisallowedIdentifierAwait):
        Fix mistake -- we care if the containing function is async, we don't care about being *at* function scope.

2021-01-12  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Class names must be lexed as strict mode code
        https://bugs.webkit.org/show_bug.cgi?id=220567

        Reviewed by Yusuke Suzuki.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        Don't lex next token until *after* we've set up the class scope.

2021-01-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Bypass OperationPtrTagging for JITCage verification for CallDOMGetter
        https://bugs.webkit.org/show_bug.cgi?id=220564

        Reviewed by Saam Barati.

        CustomAccessorPtrTag functions are not registered ones for JITCage since we are using C++ trampoline to invoke them.
        However, we do not want to use this trampoline in x64 due to performance issue. So we would like to call these
        functions directly from JIT while they are not registered (And this is OK in JITCage since they are called from trampoline).
        In this patch we bypass OperationPtrTagging by using WTF::tagNativeCodePtrImpl directly for non JITCage case.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::appendOperationCall):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOMGetter):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::appendOperationCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
        (JSC::FTL::DFG::LowerDFGToB3::vmCall):
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::operation):
        * tools/JSDollarVM.cpp:

2021-01-12  Caio Lima  <ticaiolima@gmail.com>

        [ESNext] super accesses broken on arrow functions defined as class field
        https://bugs.webkit.org/show_bug.cgi?id=220558

        Reviewed by Darin Adler.

        We need to properly set `isClassContext` for class fields
        initialization.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):

2021-01-12  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes mid January 2021 edition
        https://bugs.webkit.org/show_bug.cgi?id=220560

        Unreviewed non-unified build fixes.

        * API/JSLockRef.cpp:
        * runtime/JSCJSValue.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:

2021-01-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: allow breakpoint actions to be evaluated as a user gesture
        https://bugs.webkit.org/show_bug.cgi?id=200275

        Reviewed by Brian Burg.

        * inspector/protocol/Debugger.json:
        * debugger/Breakpoint.h:
        Add an optional `emulateUserGesture` property to `Debugger.BreakpointAction`.

        * debugger/Debugger.h:
        (JSC::Debugger::Client::debuggerScopeExtensionObject): Renamed from `scopeExtensionObject`.
        (JSC::Debugger::Client::debuggerWillEvaluate): Added.
        (JSC::Debugger::Client::debuggerDidEvaluate): Added.
        * debugger/Debugger.cpp:
        (JSC::Debugger::evaluateBreakpointCondition):
        (JSC::Debugger::evaluateBreakpointActions):
        Consult the `Debugger::Client` before and after evaluating each `Breakpoint::Action`.
        Currently this is used by `WebCore::PageDebuggerAgent` to push onto or pop from a stack of
        `WebCore::UserGestureEmulationScope`, each corresponding to a `Breakpoint::Action` that
        has been set with `emulateUserGesture`.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::parseBreakpointOptions):
        (Inspector::InspectorDebuggerAgent::debuggerScopeExtensionObject): Renamed from `scopeExtensionObject`.

2021-01-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JITCage's Gate mechanism is used in ARM64E even if JITCage is disable
        https://bugs.webkit.org/show_bug.cgi?id=220500

        Reviewed by Mark Lam.

        We should ensure that Gate mechanism just works even if ENABLE(JIT_CAGE) is OFF in ARM64E since
        in LLInt we are always using Gate even if ENABLE(JIT_CAGE) is OFF. It makes LLInt code
        significantly simpler: we do not want to have multiple implementations for ARM64E for ENABLE(JIT_CAGE) ON/OFF
        in LLInt if it is not necessary in terms of performance. And it didn't cause performance regression.
        So for simplicity, we are always using Gate in LLInt.

        However, when disabling ENABLE(JIT_CAGE), we accidentally disabled Gate mechanism too in LLInt.
        It makes ARM64E broken if ENABLE(JIT_CAGE) is OFF. This patch makes Gate work even if ENABLE(JIT_CAGE) is OFF,
        and this is the expected design.

        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * llint/LLIntThunks.cpp:
        * llint/LLIntThunks.h:

2021-01-08  Alexey Shvayka  <shvaikalesh@gmail.com>

        Implement @copyDataProperties in C++ to optimize object rest / spread
        https://bugs.webkit.org/show_bug.cgi?id=193618

        Reviewed by Yusuke Suzuki.

        Since @copyDataProperties is inherently polymorphic, implementing it in JS is not beneficial.
        This patch:

        1. Merges almost identical @copyDataProperties variants and moves them to C++, avoiding
           allocations of JSArray instances and Identifier wrappers.
        2. Skips non-observable [[Get]] calls, leveraging `slot.isTaintedByOpaqueObject()`.
        3. Performs [[DefineOwnProperty]] via putDirectMayBeIndex(), since the spec guarantees
           property creation to be successful [1]: `target` is an newly created object that is
           not yet accessible to userland code. It's impossible for `target` to be non-extensible
           nor have a non-configurable property.
        4. Introduces a fast path similar to Object.assign, but:
           a) with no checks on `target`, because it's guaranteed to be an extensible JSFinalObject;
           b) with less checks on `source`, since we are performing putDirect() and don't care about
              read-only properties nor __proto__.

        Altogether, these changes result in 3.1x speed-up for object rest / spread.
        Also, this patch removes unnecessary `target` return and @isObject check.

        [1]: https://tc39.es/ecma262/#sec-copydataproperties (step 6.c.ii.2, note the "!" prefix)

        * builtins/BuiltinNames.h:
        * builtins/GlobalOperations.js:
        (globalPrivate.speciesConstructor):
        (globalPrivate.copyDataProperties): Deleted.
        (globalPrivate.copyDataPropertiesNoExclusions): Deleted.
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/LinkTimeConstant.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue const):
        (JSC::ObjectSpreadExpressionNode::emitBytecode):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_defineEnumerableWritableConfigurableDataProperty): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::canPerformFastPropertyEnumerationForCopyDataProperties):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGlobalObjectFunctions.h:

2021-01-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Disable JITCage compile time in old iOS
        https://bugs.webkit.org/show_bug.cgi?id=220477

        Reviewed by Darin Adler.

        * runtime/Gate.h: This is required in LLInt ARM64E.
        * runtime/Options.cpp:

2021-01-08  Alexey Proskuryakov  <ap@apple.com>

        JavaScriptCore API headers contain project style includes
        https://bugs.webkit.org/show_bug.cgi?id=220449
        rdar://problem/71493605

        Reviewed by Yusuke Suzuki.

        * API/JSStringRefCF.h:
        * API/JavaScriptCore.h:

2021-01-08  Alexey Shvayka  <shvaikalesh@gmail.com>

        for/in over a Proxy should not call [[GetOwnProperty]] trap twice per property
        https://bugs.webkit.org/show_bug.cgi?id=189034

        Reviewed by Yusuke Suzuki.

        Although the spec [1] doesn't normatively require calling [[GetOwnProperty]]
        only once per property, this is what V8 and SpiderMonkey do.

        Since [[Enumerable]] property attribute is checked by has_enumerable_property
        bytecode op, this patch avoids another observable [[GetOwnProperty]] call
        by using DontEnumPropertiesMode::Include exclusively for Proxy objects.

        A side effect of this change: if a property becomes [[Enumerable]] after
        [[OwnPropertyKeys]] trap was called, it will be enumerated, which matches
        the spec [2] and developer expectations.

        This patch advances provided microbenchmark by 100%.

        [1]: https://tc39.es/ecma262/#sec-enumerate-object-properties
        [2]: https://tc39.es/ecma262/#sec-%foriniteratorprototype%.next (step 7.b.iii)

        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::getEnumerablePropertyNames):

2021-01-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, add missing scope.release() in JSModuleNamespaceObject
        https://bugs.webkit.org/show_bug.cgi?id=220465

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertyNames):

2021-01-08  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add optional default value parameter for Table.constructor, Table.grow and Table.set
        https://bugs.webkit.org/show_bug.cgi?id=220323

        Reviewed by Yusuke Suzuki.

        Introduce the new optional parameter "defaultValue" for Table.grow(numOfElementsToAdd, [defaultValue]).
        It is used to initialize newly added table elements.
        Introduce the new optional parameter "defaultValue" for Table({initial: N, element:type}, [defaultValue]).
        After Table is created we append initial times defaultValue to table if it is present.
        Also add type check for funcref's table for Table.grow, Table ctor and Table.set.
        Spec: https://webassembly.github.io/reference-types/js-api/index.html#tables.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::grow):
        * wasm/WasmTable.h:
        (JSC::Wasm::Table::isFuncrefTable const):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::grow):
        * wasm/js/JSWebAssemblyTable.h:
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2021-01-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] AtomicsIsLockFree's AI result is wrong
        https://bugs.webkit.org/show_bug.cgi?id=220452
        <rdar://problem/71228690>

        Reviewed by Mark Lam.

        The result type should be SpecBoolean. This leads to FTL unreachable in the test code.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2021-01-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG/FTL Atomics should assume non-typed-array input with storage-edge
        https://bugs.webkit.org/show_bug.cgi?id=220451
        <rdar://problem/71237065>

        Reviewed by Mark Lam.

        Atomics implementation assumed that it only gets TypedArray via checkArray filter if storage-edge exists. But this is wrong.
        String and the other cases can put storage-edge while it is not TypedArray. We should check whether this is one of TypedArray,
        and if it is not, we should make it generic one instead of using fast TypedArray path.

        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::isOneOfTypedArrayView const):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

2021-01-07  Mark Lam  <mark.lam@apple.com>

        Work around Clang bug in __builtin_return_address().
        https://bugs.webkit.org/show_bug.cgi?id=220432
        rdar://71648468

        Reviewed by Yusuke Suzuki.

        Clang's __builtin_return_address() currently sometimes returns a PAC signed pointer
        and sometimes not.  This patch works around that by always ensuring that the pointer
        is not signed.

        Also changed the ReturnAddressPtr to store a signed pointer.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::ReturnAddressPtr::ReturnAddressPtr):
        (JSC::ReturnAddressPtr::untaggedValue const):
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        * interpreter/AbstractPC.h:
        (JSC::AbstractPC::AbstractPC):
        * interpreter/CallFrame.h:
        * jit/JIT.cpp:
        (JSC::ctiPatchCallByReturnAddress):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileHasIndexedProperty):
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        (JSC::unprofiledMul): Deleted.
        (JSC::profiledMul): Deleted.
        (JSC::unprofiledSub): Deleted.
        (JSC::profiledSub): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        * runtime/JSCPtrTag.h:

2021-01-07  Alexey Shvayka  <shvaikalesh@gmail.com>

        [JSC] Simplify get*PropertyNames() methods and EnumerationMode
        https://bugs.webkit.org/show_bug.cgi?id=212954

        Reviewed by Yusuke Suzuki.

        Before this change, [[OwnPropertyKeys]] overrides were sometimes implemented
        inconsistently, via different get*PropertyNames() methods that duplicated logic
        (e.g. ErrorInstance, RegExpObject, and StringObject).

        This patch:

        1. Introduces a clear convention to implement [[OwnPropertyKeys]] overrides:
           if it's defined by the spec, getOwnPropertyNames() method is used; otherwise,
           non-materialized properties are enumerated / reified in getOwnSpecialPropertyNames().
           While no class should define both methods, we don't assert this to support inheritance.

           Removes getOwnNonIndexPropertyNames() from the method table and converts it to instance
           method; its overrides were renamed to getOwnSpecialPropertyNames() and exempted from
           calling the no-op base method.

           This approach was chosen, instead of getOwnNonIndexPropertyNames() override, because
           for/in enumeration must be sure there are no enumerable properties between
           getEnumerableLength() and the first structure property.

           Also, removes getStructurePropertyNames() from the method table as it's unreasonable
           to override it.

        2. Extracts JSObject::getOwnIndexPropertyNames() instance method to enforce
           correct enumeration order in getOwnPropertyNames() overrides: special indices =>
           butterfly storage => special properties => non-reified static => structure properties.

           Loose mode `arguments` were fixed to enumerate indices from butterfly storage before
           special properties [1], aligning JSC with V8 and SpiderMonkey.

        3. Reworks for/in enumeration so the special properties always come before structure ones,
           aligning enumeration order of String objects [2] and typed arrays [3] that have expando
           properties with the spec, V8, and SpiderMonkey.

           Removes getPropertyNames() and getGenericPropertyNames() from the method table, along
           with their overrides, because ES7 disabled customization of for/in enumeration [4].
           Instead, JSObject::getPropertyNames() instance method and getEnumerablePropertyNames()
           are introduced, featuring a loop instead of recursion.

           Also, this enabled dropping hard-to-follow JSObjectPropertiesMode bit and simplifying
           EnumerationMode to an enum.

        for/in and Object.keys microbenchmarks are neutral. This change does not affect
        JSPropertyNameEnumerator caching, nor fast paths of its bytecodes.

        [1]: https://tc39.es/ecma262/#sec-createmappedargumentsobject (steps 15-16 and 20-21)
        [2]: https://tc39.es/ecma262/#sec-string-exotic-objects-ownpropertykeys
        [3]: https://tc39.es/ecma262/#sec-integer-indexed-exotic-objects-ownpropertykeys
        [4]: https://github.com/tc39/ecma262/pull/367

        * API/JSAPIValueWrapper.h:
        Remove OverridesAnyFormOfGetPropertyNames structure flag as it should never be queried
        from JSCell instances.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnSpecialPropertyNames):
        (JSC::JSCallbackObject<Parent>::getOwnNonIndexPropertyNames): Deleted.
        * API/JSObjectRef.cpp:
        (JSObjectCopyPropertyNames):
        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):
        * bytecode/ObjectAllocationProfileInlines.h:
        (JSC::ObjectAllocationProfileBase<Derived>::possibleDefaultPropertyCount):
        Use DontEnumPropertyMode::Include as the intent is to count all properties, even
        private symbols. EnumerationMode() defaults did exclude non-enumerable properties.

        * debugger/DebuggerScope.cpp:
        (JSC::DebuggerScope::getOwnPropertyNames):
        * debugger/DebuggerScope.h:
        * runtime/ClassInfo.h:
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::getOwnSpecialPropertyNames):
        Don't materialize DontEnum properties unless it's DontEnumPropertiesMode::Include,
        advancing provided microbenchmark by ~23%.

        (JSC::ClonedArguments::getOwnPropertyNames): Deleted.
        * runtime/ClonedArguments.h:
        * runtime/EnumerationMode.h:
        Explicitly specify enum type to reduce its size.

        (JSC::EnumerationMode::EnumerationMode): Deleted.
        (JSC::EnumerationMode::includeDontEnumProperties): Deleted.
        (JSC::EnumerationMode::includeJSObjectProperties): Deleted.
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::getOwnSpecialPropertyNames):
        Don't materialize DontEnum properties unless it's DontEnumPropertiesMode::Include,
        advancing provided microbenchmark by a factor of 5.

        (JSC::ErrorInstance::getOwnNonIndexPropertyNames): Deleted.
        (JSC::ErrorInstance::getStructurePropertyNames): Deleted.
        * runtime/ErrorInstance.h:
        * runtime/GenericArguments.h:
        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::getOwnPropertyNames):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnSpecialPropertyNames):
        (JSC::JSArray::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertyNames):
        (JSC::JSCell::getOwnSpecialPropertyNames):
        (JSC::JSCell::getOwnNonIndexPropertyNames): Deleted.
        (JSC::JSCell::getPropertyNames): Deleted.
        (JSC::JSCell::getStructurePropertyNames): Deleted.
        (JSC::JSCell::getGenericPropertyNames): Deleted.
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnSpecialPropertyNames):
        (JSC::JSFunction::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertyNames):
        * runtime/JSGlobalObject.h:
        Remove OverridesAnyFormOfGetPropertyNames structure flag as it's inherited from
        JSSymbolTableObject, and JSGlobalObject itself doesn't override getOwn*PropertyNames().

        * runtime/JSLexicalEnvironment.cpp:
        (JSC::JSLexicalEnvironment::getOwnSpecialPropertyNames):
        (JSC::JSLexicalEnvironment::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSModuleEnvironment.cpp:
        (JSC::JSModuleEnvironment::getOwnSpecialPropertyNames):
        (JSC::JSModuleEnvironment::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertyNames):
        Call getOwnNonIndexPropertyNames() directly, guarded by includeSymbolProperties() check,
        since module namespace objects can't have string properties besides m_names.
        (See https://tc39.es/ecma262/#sec-module-namespace-exotic-objects-defineownproperty-p-desc)

        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::getNonReifiedStaticPropertyNames):
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::getOwnPropertyNames):
        (JSC::JSObject::getOwnSpecialPropertyNames):
        (JSC::JSObject::getOwnIndexedPropertyNames):
        (JSC::JSObject::getOwnNonIndexPropertyNames):
        (JSC::getClassPropertyNames): Deleted.
        (JSC::JSObject::getStructurePropertyNames): Deleted.
        (JSC::JSObject::getGenericPropertyNames): Deleted.
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnSpecialPropertyNames):
        * runtime/JSPropertyNameEnumerator.cpp:
        (JSC::getEnumerablePropertyNames):
        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):
        * runtime/JSProxy.cpp:
        (JSC::JSProxy::getOwnPropertyNames):
        (JSC::JSProxy::getPropertyNames): Deleted.
        (JSC::JSProxy::getStructurePropertyNames): Deleted.
        (JSC::JSProxy::getGenericPropertyNames): Deleted.
        * runtime/JSProxy.h:
        * runtime/JSSymbolTableObject.cpp:
        (JSC::JSSymbolTableObject::getOwnSpecialPropertyNames):
        (JSC::JSSymbolTableObject::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSSymbolTableObject.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesGetOwnPropertyNames const):
        (JSC::TypeInfo::overridesGetOwnSpecialPropertyNames const):
        (JSC::TypeInfo::overridesAnyFormOfGetOwnPropertyNames const):
        (JSC::TypeInfo::overridesGetPropertyNames const): Deleted.
        (JSC::TypeInfo::overridesAnyFormOfGetPropertyNames const): Deleted.
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyDescriptors):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::defineProperties):
        (JSC::setIntegrityLevel):
        (JSC::testIntegrityLevel):
        (JSC::ownPropertyKeys):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performGetOwnPropertyNames):
        (JSC::ProxyObject::getOwnPropertyNames):
        (JSC::ProxyObject::getPropertyNames): Deleted.
        (JSC::ProxyObject::getOwnNonIndexPropertyNames): Deleted.
        (JSC::ProxyObject::getStructurePropertyNames): Deleted.
        (JSC::ProxyObject::getGenericPropertyNames): Deleted.
        * runtime/ProxyObject.h:
        Remove IsQuickPropertyAccessAllowedForEnumeration flag from ProxyObject's structure
        since canAccessPropertiesQuicklyForEnumeration() now checks for method overrides.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnSpecialPropertyNames):
        (JSC::RegExpObject::getOwnNonIndexPropertyNames): Deleted.
        (JSC::RegExpObject::getPropertyNames): Deleted.
        (JSC::RegExpObject::getGenericPropertyNames): Deleted.
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):
        (JSC::StringObject::getOwnNonIndexPropertyNames): Deleted.
        * runtime/StringObject.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):
        Strengthen overridesGetOwn*PropertyNames and overridesGetPrototype asserts into
        equivalence tests.

        (JSC::Structure::getPropertyNamesFromStructure):
        (JSC::Structure::canAccessPropertiesQuicklyForEnumeration const):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::canCacheOwnPropertyNames const):
        * tools/JSDollarVM.cpp:
        Remove OverridesAnyFormOfGetPropertyNames structure flag as it's inherited from
        JSArray, and RuntimeArray itself doesn't override getOwn*PropertyNames().

2021-01-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] New expression and value function call should reserve function register if arguments include assignments
        https://bugs.webkit.org/show_bug.cgi?id=220429
        <rdar://problem/70598359>

        Reviewed by Alexey Shvayka.

        If the following code is executed, we need to reserve |x| before evaluating arguments since arguments can override
        local |x| variable before calling it.

            new x(x = 1)

        We found there are two places we are not doing this.

            1. new expression
            2. function value call (it is checking `isLocation()`, but we can still use local variables for function if we use comma expression)

        We introduced hasAssignment flag to ArgumentsNode, and reserve a function in a new temporary register if arguments include assignments.
        We also need to increment assignmentCount in destructuring assignment.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::NewExprNode::emitBytecode):
        (JSC::FunctionCallValueNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createArguments):
        * parser/NodeConstructors.h:
        (JSC::ArgumentsNode::ArgumentsNode):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseDestructuringPattern):
        (JSC::Parser<LexerType>::parseArguments):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createArguments):

2021-01-07  Mark Lam  <mark.lam@apple.com>

        The scratch register should be different from the target register when calling validateUntaggedPtr.
        https://bugs.webkit.org/show_bug.cgi?id=220397
        rdar://72771069

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::validateUntaggedPtr):
        - Added an ASSERT to enforce this invariant.
        * jit/ThunkGenerators.cpp:
        (JSC::emitPointerValidation):
        - emitPointerValidation() was reusing the target register as the scratch register.
          This is a hold over from the previous way of doing the validation (which had a
          bug).  With the validation bug fixed, this register reuse is no longer allowed.

2021-01-07  Mark Lam  <mark.lam@apple.com>

        Remove some aliases of obsolete JSC options.
        https://bugs.webkit.org/show_bug.cgi?id=220402

        Reviewed by Yusuke Suzuki.

        * runtime/OptionsList.h:

2021-01-06  Mark Lam  <mark.lam@apple.com>

        Fix a dataMemoryTempRegister use violation in FTLLowerDFGToB3's compileLoopHint().
        https://bugs.webkit.org/show_bug.cgi?id=220399

        Reviewed by Yusuke Suzuki.

        This was tripping an assertion failure on the invalid use of the dataMemoryTempRegister
        during a Debug build JSC stress test run with DoesGC validation enabled.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):

2021-01-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DateTimeFormat#formatRange should generate the same output to DateTimeFormat#format if startDate and endDate are "practically-equal"
        https://bugs.webkit.org/show_bug.cgi?id=220395

        Reviewed by Ross Kirsling.

        Intl.DateTimeFormat.formatRange(startDate, endDate) also needs to generate the same formatted string to the Intl.DateTimeFormat.format
        if startDate and endDate are *practically-equal* (spec term). However, due to CLDR, just using udtitvfmt_format generates different
        formatted string to udat_format's result even though startDate and endDate are the same.

            new Intl.DateTimeFormat("en", { dateStyle: "long", timeStyle: "short" }).format(new Date())
            // "December 12, 2019 at 11:48 AM"
            new Intl.DateTimeFormat("en", { dateStyle: "long", timeStyle: "short" }).formatRange(new Date(), new Date())
            // "December 12, 2019, 11:48 AM"

        In Intl.DateTimeFormat#formatRangeToParts, we deploys *practically-equal* checking to avoid this issue. The same thing should be done in
        Intl.DateTimeFormat#formatRange too.

        In this patch, we stop using udtitvfmt_format if ICU version is 64 or later to perform *practically-equal* checking.

        [1]: https://github.com/tc39/proposal-intl-DateTimeFormat-formatRange/issues/19

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::formattedValueFromDateRange):
        (JSC::dateFieldsPracticallyEqual):
        (JSC::IntlDateTimeFormat::formatRange):
        (JSC::IntlDateTimeFormat::formatRangeToParts):
        (JSC::definitelyAfterGregorianCalendarChangeDate): Deleted.

2021-01-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Replace JSBigInt::toUint64 with JSBigInt::toBigUInt64
        https://bugs.webkit.org/show_bug.cgi?id=220378

        Reviewed by Darin Adler.

        This patch replaces JSBigInt::toUint64 with JSBigInt::toBigUInt64.
        Rough purposes of these functions are the same, and  JSBigInt::toBigUInt64
        has the semantics defined in the ECMA262 spec. While the behavior is
        slightly different[1], this difference does not matter for the clients of
        JSBigInt::toUint64.

        [1]: JSBigInt::toUint64 fails conversion if JSBigInt is out of range of uint64_t,
             while JSBigInt::toBigUInt64 always generates uint64_t by computing mod UINT64_MAX.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::toUint64Heap): Deleted.
        * runtime/JSBigInt.h:

2021-01-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG/FTL DirectCall need to respect Wasm IC
        https://bugs.webkit.org/show_bug.cgi?id=220339

        Reviewed by Saam Barati.

        We found that Wasm IC for fast calls are not used in several places.

            1. LLInt calls
            2. DFG/FTL DirectCall
            3. Virtual calls

        We noticed this because of r271112. r271112 made wasm function loading from exports constant-folded in DFG/FTL.
        And it emits DirectCall instead of Call in DFG/FTL. Then, we missed Wasm IC and get large performance regression
        in JetStream2 richard-wasm.

        In this patch, we use Wasm IC as much as possible. The key thing of this wasm IC is that it relies on callee.
        So, if the place is just checking Executable, then we should not go to that IC. Fortunately, the above three checks
        callee before using code pointer obtained for Wasm IC.

            1. LLInt call fast path first checks callee.
            2. DFG/FTL DirectCall requires callee is constant for wasm functions.
            3. Virtual calls are not storing generated codePtr.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.cpp:
        (JSC::virtualForWithFunction):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):

2021-01-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [WASM] [BigInt] Add I64 to BigInt conversion
        https://bugs.webkit.org/show_bug.cgi?id=213528

        Reviewed by Michael Saboff.

        This patch implements i64 to BigInt / BigInt to i64 support in WebAssembly to expose i64 features to JS.

            1. Arguments of exposed wasm functions can have i64.
            2. Returned values of exposed wasm functions can have i64.
            3. WebAssembly.Global can expose i64 value to JS.

        Currently, we do not support fast JS->Wasm IC for wasm functions including i64 arguments. But this should be supported later
        in https://bugs.webkit.org/show_bug.cgi?id=220053.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        * runtime/BigIntConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::toBigInt): Deleted.
        * runtime/BigIntConstructor.h:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::toBigUInt64Heap):
        * runtime/JSBigInt.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toBigInt const):
        (JSC::JSValue::toBigInt64 const):
        (JSC::JSValue::toBigUInt64 const):
        * runtime/JSCJSValue.h:
        * wasm/WasmExceptionType.h:
        * wasm/WasmGlobal.cpp:
        (JSC::Wasm::Global::get const):
        (JSC::Wasm::Global::set):
        * wasm/WasmGlobal.h:
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::marshallJSResult):
        (JSC::Wasm::createJSToWasmWrapper):
        (JSC::Wasm::boxWasmResult): Deleted.
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        (JSC::Wasm::handleBadI64Use): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2021-01-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        We should have a DFG intrinsic for the construct case of the Object constructor
        https://bugs.webkit.org/show_bug.cgi?id=155591

        Reviewed by Yusuke Suzuki.

        Given that a) ObjectConstructor behaves identically for [[Call]] and [[Construct]] with itself
        as NewTarget [1] and b) handleConstantInternalFunction() returns early if NewTarget is altered,
        this patch simply removes CodeForCall guard.

        While `new Object()` is already optimized via BytecodeGenerator::emitExpectedFunctionSnippet(),
        this change is a 4x speedup for rather rare usages like `new window.Object()`.

        [1]: https://tc39.es/ecma262/#sec-object-value (step 1)

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):

2021-01-05  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Added few unreached-invalid tests
        https://bugs.webkit.org/show_bug.cgi?id=220311

        Reviewed by Yusuke Suzuki.

        Add semantic checks for parsing unreachable for the following intructions:
        local.get/set.tee, global.get/set, br/br_if and call.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseIndexForLocal):
        (JSC::Wasm::FunctionParser<Context>::parseIndexForGlobal):
        (JSC::Wasm::FunctionParser<Context>::parseFunctionIndex):
        (JSC::Wasm::FunctionParser<Context>::parseBranchTarget):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):

2020-12-16  Tadeu Zagallo  <tzagallo@apple.com>

        propertyNameEnumerator must check it can still take the fast path after getGenericPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=219957
        <rdar://71156284>

        Reviewed by Yusuke Suzuki.

        We need to check if we still `canAccessPropertiesQuicklyForEnumeration` on
        `structureAfterGettingPropertyNames`, since we might call out out to a proxy's
        `getPrototypeOf` callback through `getGenericPropertyNames`.

        * runtime/JSPropertyNameEnumerator.h:
        (JSC::propertyNameEnumerator):

2020-11-17  Tadeu Zagallo  <tzagallo@apple.com>

        Validate every instruction in AssemblerBuffer
        https://bugs.webkit.org/show_bug.cgi?id=218104
        <rdar://problem/69433094>

        Reviewed by Saam Barati.

        * assembler/AssemblerBuffer.cpp:
        (JSC::threadSpecificAssemblerHashes):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::releaseAssemblerData):
        (JSC::AssemblerBuffer::releaseAssemblerHashes):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        (JSC::AssemblerBuffer::grow):
        (JSC::AssemblerBuffer::outOfLineGrow):
        (JSC::ARM64EHash::update): Deleted.
        (JSC::ARM64EHash::finalHash const): Deleted.
        (): Deleted.
        (JSC::AssemblerBuffer::hash const): Deleted.
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * assembler/LinkBuffer.h:

2021-01-04  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Fix data section parsing and add more tests from ref-types
        https://bugs.webkit.org/show_bug.cgi?id=220235

        Reviewed by Yusuke Suzuki.

        We should read leb128 unsigned integer instead of just one byte for
        Data entry flag.

        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseData):

2021-01-04  Jeff Miller  <jeffm@apple.com>

        Update user-visible copyright strings to include 2021
        https://bugs.webkit.org/show_bug.cgi?id=219901

        Reviewed by Anders Carlsson.

        * Info.plist:

2021-01-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove unnecessary mov bytecodes when performing simple object pattern destructuring to variables
        https://bugs.webkit.org/show_bug.cgi?id=220219

        Reviewed by Alexey Shvayka.

        Currently, we are first puts object pattern's expression into temporary variable, and then, we store it into local variable register.

        The following code

            ({ data } = object);

        emits this kind of bytecode.

            get_by_id          dst:loc10, base:loc9, property:0
            mov                dst:loc6, src:loc10

        However, this should be

            get_by_id          dst:loc6, base:loc9, property:0

        We are emitting many unnecessary movs since this destructuring pattern is common. Increasing amount of mov (1) discourages inlining unnecessarily and (2) simply makes
        bytecode memory large. Since this is very common pattern, we should carefully optimize it to remove such unnecessary movs.

        This patch looks into pattern when performing object pattern destructuring. And avoid emitting mov when it is possible. There are some cases we cannot remove movs, so
        this patch's writableDirectBindingIfPossible looks into whether this is possible (& profitable).

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue const):
        (JSC::BindingNode::writableDirectBindingIfPossible const):
        (JSC::BindingNode::finishDirectBindingAssignment const):
        (JSC::AssignmentElementNode::writableDirectBindingIfPossible const):
        (JSC::AssignmentElementNode::finishDirectBindingAssignment const):
        * parser/Nodes.h:
        (JSC::DestructuringPatternNode::writableDirectBindingIfPossible const):
        (JSC::DestructuringPatternNode::finishDirectBindingAssignment const):

2021-01-02  Alexey Shvayka  <shvaikalesh@gmail.com>

        Improve error message for uninitialized |this| in derived constructor
        https://bugs.webkit.org/show_bug.cgi?id=220221

        Reviewed by Yusuke Suzuki.

        Since class constructors perform `return this;` by default, and derived
        constructors require `super()` to be called before |this| access, regular
        TDZ error message is quite confusing, given the following code:

            `new (class extends Object { constructor() { } });`

        Considering that currently op_check_tdz is called on thisRegister() only
        in derived constructors, this patch modifies its slow path to throw a
        helpful error message that covers |this| access and non-object returns.

        V8 and SpiderMonkey have similar error messages, mentioning `super()`.

        slow_path_throw_tdz_error is merged into slow_path_check_tdz, which is
        invoked from baseline JIT, so we can reliably acquire the bytecode and
        avoid code duplication.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/CommonSlowPaths.h:

2021-01-02  Alexey Shvayka  <shvaikalesh@gmail.com>

        Don't throw if `function.caller` is a non-strict / generator / async function
        https://bugs.webkit.org/show_bug.cgi?id=220216

        Reviewed by Yusuke Suzuki.

        The spec forbids [1] ES6+ and strict mode functions from having their own "caller"
        property. r230662 went even further, throwing TypeError if `function.caller` attempts
        to return non-strict / generator / async function, which doesn't contradict ECMA-262,
        but diverges from V8 and SpiderMonkey (they just return the caller).

        Since throwing TypeError causes quite a lot test262 failures and is a bit dangerous
        (legacy library which uses `function.caller` is called from ES6 code), this patch
        replaces it with `null` return.

        Given that r230662 appears to be web-compatible, this change preserves its intent
        to limit `function.caller` API as much as possible by returning `null` for all ES6+
        functions, including methods, accessors, and arrow functions. 

        [1]: https://tc39.es/ecma262/#sec-forbidden-extensions (paragraphs 1-2)

        * runtime/JSFunction.cpp:
        (JSC::JSC_DEFINE_CUSTOM_GETTER):

2020-12-31  Alexey Shvayka  <shvaikalesh@gmail.com>

        JSFunction::deleteProperty() fails to delete a non-existent "prototype" property
        https://bugs.webkit.org/show_bug.cgi?id=220211

        Reviewed by Yusuke Suzuki.

        This patch replaces arrow function check with hasPrototypeProperty() since there
        are more functions without a "prototype" (accessors, methods, async functions),
        aligning JSC with the spec, V8, and SpiderMonkey.

        hasPrototypeProperty() is already used by JSFunction::getOwnPropertySlot().

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::deleteProperty):

2020-12-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] WebAssembly Table/Memory/Global should allow inheritance
        https://bugs.webkit.org/show_bug.cgi?id=220207

        Reviewed by Alexey Shvayka.

        WebAssembly.{Table,Memory,Global} should accept inheritance by JS class syntax.
        We need to create structure from new.target value.

        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2020-12-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix iteration count check
        https://bugs.webkit.org/show_bug.cgi?id=220206

        We should have iterationCount variable to track iteration count since it can be larger than MarkedArgumentBuffer's size.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):

2020-12-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Wasm multivalue should iterate iterable result from JS function first before converting values
        https://bugs.webkit.org/show_bug.cgi?id=220206

        Reviewed by Alexey Shvayka.

        When converting JS results to Wasm multivalue (result from JS when executing Wasm->JS calls), we should first iterate all results from iterable.
        And then, we should convert each element into Wasm value. Currently, we are converting while iterating, this is not aligned to the spec.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):

2020-12-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Update WebAssembly instance's exports object
        https://bugs.webkit.org/show_bug.cgi?id=220189

        Reviewed by Alexey Shvayka.

        This patch aligns the WebAssembly Instance's exports object to the updated spec.

        1. exports object is a plain object which [[Prototype]] is null[1]. We were using module namespace object. Also, the object should be frozen.
        2. exported functions' name should be index, according to the spec[2].

        [1]: https://webassembly.github.io/spec/js-api/index.html#create-an-exports-object
        [2]: https://webassembly.github.io/spec/js-api/index.html#exported-function-exotic-objects

        * wasm/js/JSWebAssembly.cpp:
        (JSC::resolve):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::finishCreation):
        (JSC::JSWebAssemblyInstance::visitChildren):
        (JSC::JSWebAssemblyInstance::finalizeCreation):
        (JSC::JSWebAssemblyInstance::tryCreate):
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::visitChildren):
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyModuleRecord.h:

2020-12-27  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Fix table.init and table.grow to satisfy the spec
        https://bugs.webkit.org/show_bug.cgi?id=220181

        Reviewed by Yusuke Suzuki.

        Fix and refactor a little bit table.init and 
        table.grow.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):

2020-12-27  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Adjust table.fill to satisfy the spec
        https://bugs.webkit.org/show_bug.cgi?id=220161

        Reviewed by Yusuke Suzuki.

        Fixed table.fill for the case when count is 0 and offset is equal to
        table size.

        * wasm/WasmOperations.cpp:
        (JSC::Wasm::setWasmTableElement):
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):

2020-12-27  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add declared function indexes set to check from what functions we can create refs
        https://bugs.webkit.org/show_bug.cgi?id=220009

        Reviewed by Yusuke Suzuki.

        By ref-types spec we can create references only from declared functions.
        Declared function is a function that was mentioned:
        as export,
        as part of ref.func init expression for a global,
        in the element section.
        In this patch declared function indexes set introduced to check this
        requirement.
        https://webassembly.github.io/reference-types/core/valid/instructions.html#reference-instructions.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmModuleInformation.h:
        (JSC::Wasm::ModuleInformation::isDeclaredFunction const):
        (JSC::Wasm::ModuleInformation::addDeclaredFunction):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseGlobal):
        (JSC::Wasm::SectionParser::parseExport):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfExpressions):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfIndexes):

2020-12-25  Mark Lam  <mark.lam@apple.com>

        VMInspector::dumpRegisters() should not dump beyond the start of the next frame.
        https://bugs.webkit.org/show_bug.cgi?id=220136
        rdar://64404201

        Reviewed by Yusuke Suzuki.

        VMInspector::dumpRegisters() was dumping stack slots up for up to
        codeBlock->numCalleeLocals() slots for any given CallFrame.  This is incorrect.
        codeBlock->numCalleeLocals() indicates the maximum number of stack slots that the
        codeBlock may use.  However, the executing codeBlock may not necessary use up that
        number of slots before calling another function.

        In the attached test case, the global program has 98 callee locals.  However, it
        was only using a very small number of stack slots to call $vm.dumpRegisters().
        On an ASAN build, iterating thru 98 stack slots of the global program (to dump
        their contents) ended up reading beyond the top of the stack, and this made ASAN
        very unhappy.  The fix is simply to ensure that VMInspector::dumpRegisters() never
        dumps past the start of the next CallFrame.

        * tools/VMInspector.cpp:
        (JSC::VMInspector::dumpRegisters):

2020-12-21  Jessica Tallon  <jtallon@igalia.com>

        [JSC] Add minimum parameter to the WASM JS-API for Memory & Table.
        https://bugs.webkit.org/show_bug.cgi?id=219600

        Reviewed by Yusuke Suzuki.

        This patch adds a "minimum" perameter to the constructor of both WebAssembly.Memory and
        WebAssembly.Table. This represents the same value as the "initial" perameter. The new
        perameter name is outlined here [1]. It is part of the JS type reflection proposal.

        [1]: https://github.com/WebAssembly/js-types/blob/master/proposals/js-types/Overview.md#naming-of-size-limits

        * JSTests/wasm/js-api/table.js:
        * JSTests/wasm/js-api/test_memory_constructor.js:
        * Source/JavaScriptCore/wasm/js/WebAssemblyMemoryConstructor.cpp:
        * Source/JavaScriptCore/wasm/js/WebAssemblyTableConstructor.cpp:

2020-12-21  Keith Miller  <keith_miller@apple.com>

        DFG should make sure replacement watchpoint is fired before folding to PutByOffset
        https://bugs.webkit.org/show_bug.cgi?id=220031
        <rdar://72045350>

        Reviewed by Saam Barati.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::presenceConditionIfConsistent):
        (JSC::DFG::ByteCodeParser::checkPresence):
        (JSC::DFG::ByteCodeParser::checkPresenceForReplace):
        (JSC::DFG::ByteCodeParser::load):
        (JSC::DFG::ByteCodeParser::store):
        (JSC::DFG::ByteCodeParser::presenceLike): Deleted.
        (JSC::DFG::ByteCodeParser::checkPresenceLike): Deleted.
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::tryFoldAsPutByOffset):
        * runtime/Structure.cpp:
        (JSC::Structure::dump const):

2020-12-18  Mark Lam  <mark.lam@apple.com>

        Build fix after r270988.
        https://bugs.webkit.org/show_bug.cgi?id=220021
        <rdar://problem/72474809>

        Not reviewed.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-12-18  Saam Barati  <sbarati@apple.com>

        CachedRefPtr should adoptRef before calling ref to appease RefCounted's debug assertions
        https://bugs.webkit.org/show_bug.cgi?id=219953
        <rdar://problem/72391255>

        Reviewed by Tadeu Zagallo.

        * runtime/CachedTypes.cpp:
        (JSC::CachedRefPtr::decode const):

2020-12-18  Mark Lam  <mark.lam@apple.com>

        Fix MacroAssemblerARM64E::validateUntaggedPtr() to account for TBI.
        https://bugs.webkit.org/show_bug.cgi?id=220021
        <rdar://problem/72474809>

        Reviewed by Saam Barati.

        * assembler/AbstractMacroAssembler.h:
        * assembler/DisallowMacroScratchRegisterUsage.h:
        - templatized the DisallowMacroScratchRegisterUsage class so that we can #include
          it in MacroAssembler implementations.
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::validateUntaggedPtr):

2020-12-17  Mark Lam  <mark.lam@apple.com>

        Add tagging to JIT probe's return address.
        https://bugs.webkit.org/show_bug.cgi?id=220008
        rdar://71279530

        Reviewed by Keith Miller and Robin Morisset.

        * assembler/MacroAssemblerARM64.cpp:
        * assembler/testmasm.cpp:
        (JSC::testProbeModifiesProgramCounter):
        * runtime/JSCPtrTag.h:

2020-12-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [CSSJIT] Do not use trampoline if JITCage is disabled
        https://bugs.webkit.org/show_bug.cgi?id=220004

        Reviewed by Tadeu Zagallo.

        * llint/LLIntData.cpp:
        * llint/LowLevelInterpreter.asm:

2020-12-18  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Reuse instance initElementSegment to reduce duplication
        https://bugs.webkit.org/show_bug.cgi?id=220007

        Reviewed by Yusuke Suzuki.

        Simple refactroing. We need only one place to initialize elements
        segments.

        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2020-12-17  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for memory.copy, memory.init and data.drop
        https://bugs.webkit.org/show_bug.cgi?id=219943

        Reviewed by Yusuke Suzuki.

        Add support for memory.copy [dstAddress, srcAddress, length] -> []
        that copies one  memory segment to another memory segment.
        The memory.copy calls C memcpy function to utilize all possible optimization for copy.
        This instruction speedup copying data segments in wasm because without it we need to use a lot
        load/store instructions with loops in wasm.

        Add support for memory.init data_segment_index [dstAddress, srcAddress, length] -> []
        that copies data from a passive data segment into a memory segment.
        This instruction is the same as memory.copy but for read-only data segments.
        It also utilize C memcpy under the hood.

        Add support for data.drop data_segment_index [] -> []
        that resize given data segment to zero.
        Data.drop makes redundant data segment and prevents usage of it in the next.
        BTW, it is just a hint for the host runtime so we don't have to change data segment.

        Add support for Data count section.
        This section just stores the number of data segments.
        We need this to validate memory.init instruction's data index because
        Code section comes before Data section.

        These instructions are needed to support reference types proposal and bulk proposal.

        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addMemoryCopy):
        (JSC::Wasm::AirIRGenerator::addMemoryInit):
        (JSC::Wasm::AirIRGenerator::addDataDrop):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addMemoryInit):
        (JSC::Wasm::B3IRGenerator::addMemoryCopy):
        (JSC::Wasm::B3IRGenerator::addDataDrop):
        * wasm/WasmFormat.cpp:
        (JSC::Wasm::Segment::create):
        * wasm/WasmFormat.h:
        (JSC::Wasm::Segment::isActive const):
        (JSC::Wasm::Segment::isPassive const):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseDataSegmentIndex):
        (JSC::Wasm::FunctionParser<Context>::parseMemoryCopyImmediates):
        (JSC::Wasm::FunctionParser<Context>::parseMemoryInitImmediates):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::Instance):
        (JSC::Wasm::Instance::memoryInit):
        (JSC::Wasm::Instance::dataDrop):
        * wasm/WasmInstance.h:
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addMemoryInit):
        (JSC::Wasm::LLIntGenerator::addDataDrop):
        (JSC::Wasm::LLIntGenerator::addMemoryCopy):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::copy):
        (JSC::Wasm::Memory::init):
        * wasm/WasmMemory.h:
        * wasm/WasmModuleInformation.h:
        (JSC::Wasm::ModuleInformation::dataSegmentsCount const):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::parseI32InitExpr):
        (JSC::Wasm::SectionParser::parseI32InitExprForElementSection):
        (JSC::Wasm::SectionParser::parseI32InitExprForDataSection):
        (JSC::Wasm::SectionParser::parseDataSegmentCoreSpec):
        (JSC::Wasm::SectionParser::parseDataSegmentReferenceTypesSpec):
        (JSC::Wasm::SectionParser::parseGlobalType):
        (JSC::Wasm::SectionParser::parseData):
        (JSC::Wasm::SectionParser::parseDataCount):
        * wasm/WasmSectionParser.h:
        * wasm/WasmSections.h:
        (JSC::Wasm::validateOrder):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/wasm.json:

2020-12-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Not using JITCage trampoline for non JITCage JSC
        https://bugs.webkit.org/show_bug.cgi?id=219974

        Reviewed by Tadeu Zagallo.

        We avoid using JITCage trampoline in YarrJIT if JSC is not using JITCage.

        * llint/LowLevelInterpreter.asm:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::execute):

2020-12-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Accept arbitrary module namespace identifier names
        https://bugs.webkit.org/show_bug.cgi?id=217576
        <rdar://problem/70416104>

        Reviewed by Darin Adler.

        This patch implements arbitrary module namespace identifier names[1].
        After this, we can export and import arbitrary module export names which are not valid as a variable identifier.
        For example,

            import { "delete" as deletedValue } from "./ok.js";

            ...

            export {
                deletedValue as "delete"
            };

        [1]: https://github.com/tc39/ecma262/pull/2154

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseImportClauseItem):
        (JSC::Parser<LexerType>::parseImportDeclaration):
        (JSC::Parser<LexerType>::parseExportSpecifier):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        * parser/Parser.h:

2020-12-16  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix stale assertions
        https://bugs.webkit.org/show_bug.cgi?id=219847

        After r270764, HostFunctionPtrTag and CustomAccessorPtrTag are categorized as Native ones.
        However, in non-JIT-caged environment, still they are used as JIT ones. Then, we are getting
        stale assertions. Several other tags are showing similar things for non JIT environments etc.
        Add `Options::useJITCage()` check since this caller/callee type is only valid in JIT Cage environment.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::call):
        (JSC::MacroAssemblerARM64E::farJump):

2020-12-15  Saam Barati  <sbarati@apple.com>

        destinationFor should check for FTLJIT, not DFGJIT twice
        https://bugs.webkit.org/show_bug.cgi?id=219929

        Reviewed by Mark Lam.

        The code was checking for DFGJIT twice instead of checking for FTLJIT.
        This doesn't fix any actual bugs, since nobody passes in FTLJIT to this
        function. But if we ever do in the future, it would have revealed this bug.

        * bytecode/BytecodeOperandsForCheckpoint.h:
        (JSC::destinationFor):

2020-12-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        Non-enumerable property fails to shadow inherited enumerable property from for-in
        https://bugs.webkit.org/show_bug.cgi?id=38970

        Reviewed by Keith Miller.

        While for/in was initially specified with notion of "shadowing", it wasn't clarified
        until ES5 that [[Enumerable]] attributes are ignored when determining if a property
        has already been processed. Recently, for/in spec was expanded [1] to pin down common
        case enumeration as it's currently implemented by V8 and SpiderMonkey.

        Since keeping track of DontEnum properties is a massive slowdown for uncached runs
        (with any data structure used), this patch simply adds [[Enumerable]] check to
        has_{indexed,structure,generic}_property bytecode ops and does renaming chores.

        Common code is now shared between HasIndexedProperty (emitted for `0 in arr`) and
        HasEnumerableIndexedProperty DFG nodes via passing different slow path ops rather
        than having OpInfo with PropertySlot::InternalMethodType, which is a nice refactor.

        While this change aligns common case for/in enumeration with the spec and other
        engines, it also introduces a few observable discrepancies from V8 and SpiderMonkey,
        which are permitted by the spec [2]:
        a) properties that have been redefined as DontEnum within loop body are skipped,
           which matches the spec [3] and seems like expected behavior;
        b) "shadowing" is broken if a DontEnum property of already visited object is
           added / deleted / redefined within loop body, which (pretty much) never happens.

        This patch introduces a new invariant: all properties getOwn*PropertyNames() returns
        in DontEnumPropertiesMode::Exclude should be reported as [[Enumerable]] by
        getOwnPropertySlot(). JSCallbackObject and RuntimeArray are fixed to follow it.

        for/in and Object.keys microbenchmarks are neutral. This change does not affect
        JSPropertyNameEnumerator caching, nor fast paths of its bytecodes.

        [1]: https://github.com/tc39/ecma262/pull/1791
        [2]: https://tc39.es/ecma262/#sec-enumerate-object-properties (last paragraph)
        [3]: https://tc39.es/ecma262/#sec-%foriniteratorprototype%.next (step 7.b.iii)

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
        * API/tests/testapi.c:
        * API/tests/testapiScripts/testapi.js:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitHasEnumerableIndexedProperty):
        (JSC::BytecodeGenerator::emitHasEnumerableStructureProperty):
        (JSC::BytecodeGenerator::emitHasEnumerableProperty):
        (JSC::BytecodeGenerator::emitHasGenericProperty): Deleted.
        (JSC::BytecodeGenerator::emitHasIndexedProperty): Deleted.
        (JSC::BytecodeGenerator::emitHasStructureProperty): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasArrayMode):
        (JSC::DFG::Node::hasInternalMethodType const): Deleted.
        (JSC::DFG::Node::internalMethodType const): Deleted.
        (JSC::DFG::Node::setInternalMethodType): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::JSC_DEFINE_JIT_OPERATION):
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSSALoweringPhase.cpp:
        (JSC::DFG::SSALoweringPhase::handleNode):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileHasEnumerableProperty):
        (JSC::DFG::SpeculativeJIT::compileHasEnumerableStructureProperty):
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        (JSC::DFG::SpeculativeJIT::compileHasGenericProperty): Deleted.
        (JSC::DFG::SpeculativeJIT::compileHasStructureProperty): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasEnumerableProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasEnumerableStructureProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasGenericProperty): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::compileHasStructureProperty): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_has_enumerable_structure_property):
        (JSC::JIT::emit_op_has_enumerable_indexed_property):
        (JSC::JIT::emitSlow_op_has_enumerable_indexed_property):
        (JSC::JIT::emit_op_has_structure_property): Deleted.
        (JSC::JIT::emit_op_has_indexed_property): Deleted.
        (JSC::JIT::emitSlow_op_has_indexed_property): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_has_enumerable_structure_property):
        (JSC::JIT::emit_op_has_enumerable_indexed_property):
        (JSC::JIT::emitSlow_op_has_enumerable_indexed_property):
        (JSC::JIT::emit_op_has_structure_property): Deleted.
        (JSC::JIT::emit_op_has_indexed_property): Deleted.
        (JSC::JIT::emitSlow_op_has_indexed_property): Deleted.
        * jit/JITOperations.cpp:
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        * runtime/CommonSlowPaths.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasProperty const):
        (JSC::JSObject::hasEnumerableProperty const):
        (JSC::JSObject::hasPropertyGeneric const): Deleted.
        * runtime/JSObject.h:

2020-12-15  Saam Barati  <sbarati@apple.com>

        Switch to using a linked list for the TDZ environment instead of a Vector
        https://bugs.webkit.org/show_bug.cgi?id=219909
        <rdar://71441753>

        Reviewed by Tadeu Zagallo.

        Before, we'd represent the TDZ stack in terms of a Vector. While the entries
        in the Vector were reference counted, the spine of the Vector itself would
        match the length of the TDZ scope stack. It turns out this spine itself can
        use non-trivial amounts of memory. We are seeing about a 0.5% regression from
        this inside RAMification. This change makes it so that we now use a tree-like
        data structure for scope stack entries. The data structure is a tree with only
        parent pointers. Any field that used to be a vector of entries is now a
        pointer to a node in this tree. So any pointer into this tree will have a
        linked-list window into the tree, where the linked-list represents the same
        data as the previous vector-as-stack data structure.
        
        Initial testing shows this might be up to a 0.5% progression on RAMification.

        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::createExecutable):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::needsTDZCheck):
        (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
        (JSC::BytecodeGenerator::pushTDZVariables):
        (JSC::BytecodeGenerator::getVariablesUnderTDZ):
        (JSC::BytecodeGenerator::preserveTDZStack):
        (JSC::BytecodeGenerator::restoreTDZStack):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::generate):
        * parser/VariableEnvironment.h:
        (JSC::TDZEnvironmentLink::TDZEnvironmentLink):
        (JSC::TDZEnvironmentLink::create):
        (JSC::TDZEnvironmentLink::contains const):
        (JSC::TDZEnvironmentLink::parent):
        * runtime/CachedTypes.cpp:
        (JSC::CachedTDZEnvironmentLink::encode):
        (JSC::CachedTDZEnvironmentLink::decode const):
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::CodeCache::getUnlinkedGlobalFunctionExecutable):

2020-12-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r270860.
        https://bugs.webkit.org/show_bug.cgi?id=219918

        We workaround it differently, so this revert is not necessary

        Reverted changeset:

        "Unreviewed, reverting r269320, r269341, r269502, and
        r269576."
        https://bugs.webkit.org/show_bug.cgi?id=219915
        https://trac.webkit.org/changeset/270860

2020-12-15  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r269320, r269341, r269502, and r269576.
        https://bugs.webkit.org/show_bug.cgi?id=219915

        ICU C++ internal API causes trouble

        Reverted changesets:

        "REGRESSION (r254038): Simple.com money transfer UI is very
        laggy (multiple seconds per keypress)"
        https://bugs.webkit.org/show_bug.cgi?id=218348
        https://trac.webkit.org/changeset/269320

        "[JSC] Obtain default timezone ID from cached icu::TimeZone"
        https://bugs.webkit.org/show_bug.cgi?id=218531
        https://trac.webkit.org/changeset/269341

        "toLocaleDateString() resolves incorrect date for some old
        dates"
        https://bugs.webkit.org/show_bug.cgi?id=161623
        https://trac.webkit.org/changeset/269502

        "[JSC] Add TimeZone range cache over ICU TimeZone API"
        https://bugs.webkit.org/show_bug.cgi?id=218681
        https://trac.webkit.org/changeset/269576

2020-12-15  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for memory.fill
        https://bugs.webkit.org/show_bug.cgi?id=219848

        Reviewed by Yusuke Suzuki.

        Add support for memory.fill from ref-types spec.
        memory.fill sets all bytes in a memory region to a given byte:
        https://webassembly.github.io/reference-types/core/syntax/instructions.html#memory-instructions.

        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addMemoryFill):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addMemoryFill):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseMemoryFillImmediate):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addMemoryFill):
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::Memory::fill):
        (JSC::Wasm::Memory::doMemoryFill):
        * wasm/WasmMemory.h:
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/wasm.json:

2020-12-15  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for type annotated select
        https://bugs.webkit.org/show_bug.cgi?id=219595

        Reviewed by Yusuke Suzuki.

        Add support for typed select instruction from ref-types proposal:
        select t : [t t i32] -> [t].
        The annotated select instruction takes a value type immediate to deduce result type of select expression.
        This version of select will help us with subtyping in the future where we want to avoid computing lubs.
        For more information see:
        https://github.com/WebAssembly/reference-types/issues/125,
        https://webassembly.github.io/reference-types/core/binary/instructions.html#parametric-instructions.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseAnnotatedSelectImmediates):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/wasm.json:

2020-12-14  Tadeu Zagallo  <tzagallo@apple.com>

        Move some of the work from JSLock to VMEntryScope
        https://bugs.webkit.org/show_bug.cgi?id=219830

        Reviewed by Mark Lam.

        We move several things from JSLock to VMEntryScope that could only be observed after we entered the VM:
        - WasmThreads: only used when tiering up wasm, so VMEntryScope would have executed
        - registerThreadForMachExceptionHandling: The mach exception handlers are used for:
            - sigill crash analyzer: only relevant after we enter the vm
            - wasm fault signal handler: same, we must be executing wasm and therefore VMEntryScope will have executed.
            - VMTraps: only handles faults in JIT code
        - firePrimitiveGigacageEnabledIfNecessary: Only watched by the JITs

        This gives is a ~10% improvement on APIBench (score change from ~36.3 to ~39.9), but as it turns out the most expensive
        call is adding the current thread to the heap as this requires acquiring two locks. We can't  move this to VMEntryScope
        since it's possible to use the API and GC without ever entering the VM, which would result in the current thread's stack
        not being scanned. Instead, we just remember the last thread that acquired the lock and skip the call if we're seeing the
        same thread again. This greatly amortizes the cost and gives us another ~10%:

        CURRENT_API:        Baseline   Change
        ----------------------------------------
        RichardsMostlyC:      62ms      32ms
        RichardsMostlyObjC:  303ms     264ms
        RichardsMostlySwift: 296ms     261ms
        RichardsSomeC:        76ms      49ms
        RichardsSomeObjC:    156ms     150ms
        RichardsSomeSwift:   200ms     197ms

        UPCOMING_API:       Baseline   Change
        ----------------------------------------
        RichardsMostlyC:      19ms      19ms
        RichardsMostlyObjC:  282ms     260ms
        RichardsMostlySwift: 282ms     264ms
        RichardsSomeC:        79ms      46ms
        RichardsSomeObjC:    156ms     149ms
        RichardsSomeSwift:   195ms     195ms
        ----------------------------------------
        Score:             36.2211   43.3368

        * runtime/JSLock.cpp:
        (JSC::JSLock::didAcquireLock):
        (JSC::JSLock::willReleaseLock):
        * runtime/JSLock.h:
        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::VMEntryScope):
        (JSC::VMEntryScope::~VMEntryScope):

2020-12-14  Robin Morisset  <rmorisset@apple.com>

        Minor cleanup of BigInts
        https://bugs.webkit.org/show_bug.cgi?id=219253

        Reviewed by Yusuke Suzuki.

        * runtime/JSBigInt.cpp:
        (JSC::rightShiftByAbsolute):

2020-12-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Introduce vmEntryCustomAccessor and vmEntryHostFunction for JITCage
        https://bugs.webkit.org/show_bug.cgi?id=219847

        Reviewed by Mark Lam.

        Instead of registering all host-functions and custom accessors with OperationPtrTag or HostFunctionPtrTag,
        this patch introduces a trampoline which invokes them with special ptr-tag to reduce memory usage of JITOperationList.

        When invoking custom accessor, we pass that pointer as a forth argument, and call vmEntryCustomAccessor.
        And vmEntryCustomAccessor jumps to the passed argument with special ptr tag. And we register vmEntryCustomAccessor as an operation.
        For host-functions, we pass that pointer as a third argument.

        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        (JSC::JITOperationList::populatePointersInJavaScriptCore):
        (JSC::JITOperationList::populatePointersInJavaScriptCoreForLLInt):
        (JSC::JITOperationList::populatePointersInEmbedder):
        * assembler/JITOperationList.h:
        (JSC::JITOperationList::assertIsHostFunction): Deleted.
        * b3/testb3_1.cpp:
        (main):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/GetByIdVariant.cpp:
        (JSC::GetByIdVariant::GetByIdVariant):
        * bytecode/GetByIdVariant.h:
        (JSC::GetByIdVariant::customAccessorGetter const):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeForStubInfoWithoutExitSiteFeedback):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        * bytecode/GetterSetterAccessCase.h:
        * dfg/DFGNode.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCallDOMGetter):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
        * jit/JITOperations.h:
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutByID):
        * jit/ThunkGenerators.cpp:
        (JSC::nativeForGenerator):
        * jsc.cpp:
        (jscmain):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        * llint/LLIntThunks.cpp:
        * llint/LLIntThunks.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/Gate.h:
        * runtime/JSCPtrTag.h:
        (JSC::tagJSCCodePtrImpl):
        (JSC::untagJSCCodePtrImpl):
        * runtime/NativeFunction.h:
        * runtime/PropertySlot.h:
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::customSetter const):
        * runtime/VM.cpp:
        (JSC::VM::getHostFunction):

2020-12-14  Youenn Fablet  <youenn@apple.com>

        Pass an isolated copy of Settings to workers and worklets.
        https://bugs.webkit.org/show_bug.cgi?id=219688

        Reviewed by Sam Weinig.

        * runtime/RuntimeFlags.h:
        (JSC::RuntimeFlags::isolatedCopy const):

2020-12-13  Samuel Thibault  <samuel.thibault@ens-lyon.org>

        [JSC] Set s_maxPathLength fallback when OS does not have a PATH_MAX limitation
        https://bugs.webkit.org/show_bug.cgi?id=219571

        Reviewed by Yusuke Suzuki.

        * runtime/ConfigFile.h:
        (ConfigFile::s_maxPathLength): Fallback to 4095 when PATH_MAX is not defined.

2020-12-11  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION (r270665): testapi failing on JSC bots
        https://bugs.webkit.org/show_bug.cgi?id=219787

        Reviewed by Saam Barati.

        * API/JSValueRef.cpp:
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsSymbol):

2020-12-11  Caio Lima  <ticaiolima@gmail.com>

        [JIT] Require value registers explicitly on emitValueProfilingSite
        https://bugs.webkit.org/show_bug.cgi?id=219550

        Reviewed by Yusuke Suzuki.

        This patch is removing the default value for `emitValueProfilingSite`
        to avoid bugs like r270423 and r270431.

        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::emit_op_iterator_open):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::emit_op_iterator_open):
        * jit/JITInlines.h:
        (JSC::JIT::appendCallWithExceptionCheckSetJSValueResultWithProfile):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_get_direct_pname):
        (JSC::JIT::emit_op_get_argument):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_to_number):
        (JSC::JIT::emit_op_to_numeric):
        (JSC::JIT::emit_op_to_object):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_get_direct_pname):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emit_op_try_get_by_id):
        (JSC::JIT::emit_op_get_by_id_direct):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_get_by_id_with_this):
        (JSC::JIT::emit_op_get_from_scope):
        (JSC::JIT::emit_op_get_from_arguments):
        (JSC::JIT::emit_op_get_internal_field):

2020-12-11  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION (r270665): testapi failing on CLoop bot
        https://bugs.webkit.org/show_bug.cgi?id=219787

        Reviewed by Mark Lam.

        The API has to special case the empty JSValue as null.

        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsNull):

2020-12-11  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Determine correct visibility for linked frameworks
        https://bugs.webkit.org/show_bug.cgi?id=210366

        Reviewed by Michael Catanzaro.

        Set JavaScriptCore_FRAMEWORKS to determine correct linkage for the library. Remove
        explicit setting of STATICALLY_LINKED_WITH_${framework} and $<TARGET_OBJECTS:${framework}>
        by ports.

        Move the add_subdirectory of shell to the end of the CMakeLists.txt so its after the
        WEBKIT_FRAMEWORK call. This ensures that the frameworks linked into JavaScriptCore are
        known when creating the executables in that directory.

        * CMakeLists.txt:
        * PlatformGTK.cmake:
        * PlatformJSCOnly.cmake:
        * PlatformMac.cmake:
        * PlatformPlayStation.cmake:
        * shell/CMakeLists.txt:

2020-12-11  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add table.init
        https://bugs.webkit.org/show_bug.cgi?id=219297

        Reviewed by Yusuke Suzuki.

        Add support for table.init, elem.drop and new element section
        from reference-type proposal: 
        https://webassembly.github.io/reference-types/core/syntax/instructions.html#table-instructions,
        https://webassembly.github.io/reference-types/core/syntax/modules.html#element-segments.
        All in one patch because all this stuff are very coupled and ref-types
        spec tests require each other to run the its tests, so not to write
        hand-crafted tests this is in one PR.

        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addTableInit):
        (JSC::Wasm::AirIRGenerator::addElemDrop):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addTableInit):
        (JSC::Wasm::B3IRGenerator::addElemDrop):
        * wasm/WasmFormat.h:
        (JSC::Wasm::Element::Element):
        (JSC::Wasm::Element::length const):
        (JSC::Wasm::Element::isPassive const):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::Instance):
        (JSC::Wasm::Instance::elemDrop):
        (JSC::Wasm::Instance::elem const):
        (JSC::Wasm::Instance::initElementSegment):
        (JSC::Wasm::Instance::tableInit):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::isImportFunction const):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addTableInit):
        (JSC::Wasm::LLIntGenerator::addElemDrop):
        * wasm/WasmModuleInformation.h:
        (JSC::Wasm::ModuleInformation::elementCount const):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfExpressions):
        (JSC::Wasm::SectionParser::parseElementSegmentVectorOfIndexes):
        (JSC::Wasm::SectionParser::parseFuncIndexFromRefExpForElementSection): Deleted.
        (JSC::Wasm::SectionParser::parseFuncIndexForElementSection): Deleted.
        * wasm/WasmSectionParser.h:
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/wasm.json:

2020-12-11  Mark Lam  <mark.lam@apple.com>

        Add extra validation after untagging code pointers.
        https://bugs.webkit.org/show_bug.cgi?id=219765
        rdar://72069920

        Reviewed by Robin Morisset.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::untagReturnAddress):
        (JSC::AbstractMacroAssembler::validateUntaggedPtr):
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagReturnAddress):
        (JSC::MacroAssemblerARM64E::validateUntaggedPtr):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::reifyInlinedCallFrames):
        * ftl/FTLThunks.cpp:
        (JSC::FTL::genericGenerationThunkGenerator):
        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::prepareForTailCallSlow):
        * jit/CallFrameShuffler.cpp:
        (JSC::CallFrameShuffler::prepareForTailCall):
        * jit/ThunkGenerators.cpp:
        (JSC::emitPointerValidation):
        (JSC::arityFixupGenerator):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::createTailCallGate):
        (JSC::LLInt::untagGateThunk):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2020-12-10  Tadeu Zagallo  <tzagallo@apple.com>

        Removing unnecessary locking from JSValue API functions
        https://bugs.webkit.org/show_bug.cgi?id=219723

        Reviewed by Filip Pizlo.

        Remove the unnecessary locking from the JSValueIs* and JSValueMake* API functions
        that only work on primitives. Also remove the unnecessary method dispatching and
        call from the -[JSValue is*] methods.

        This improves the APIBench score by another ~8% since these are such common operations.
        Here are the results: (Baseline includes https://bugs.webkit.org/show_bug.cgi?id=219663)

        CURRENT_API:        Baseline   Change
        ----------------------------------------
        RichardsMostlyC:      74ms      60ms
        RichardsMostlyObjC:  304ms     300ms
        RichardsMostlySwift: 305ms     293ms
        RichardsSomeC:        97ms      77ms
        RichardsSomeObjC:    158ms     159ms
        RichardsSomeSwift:   202ms     198ms

        UPCOMING_API:       Baseline   Change
        ----------------------------------------
        RichardsMostlyC:      23ms      19ms
        RichardsMostlyObjC:  282ms     282ms
        RichardsMostlySwift: 280ms     282ms
        RichardsSomeC:        95ms      76ms
        RichardsSomeObjC:    157ms     156ms
        RichardsSomeSwift:   202ms     197ms
        ----------------------------------------
        Score:             33.6404   36.4006

        * API/APICast.h:
        (toRef):
        * API/JSValue.mm:
        (-[JSValue isUndefined]):
        (-[JSValue isNull]):
        (-[JSValue isBoolean]):
        (-[JSValue isNumber]):
        (-[JSValue isString]):
        (-[JSValue isObject]):
        (-[JSValue isSymbol]):
        * API/JSValueRef.cpp:
        (JSValueGetType):
        (JSValueIsUndefined):
        (JSValueIsNull):
        (JSValueIsBoolean):
        (JSValueIsNumber):
        (JSValueIsString):
        (JSValueIsObject):
        (JSValueIsSymbol):
        (JSValueMakeUndefined):
        (JSValueMakeNull):
        (JSValueMakeBoolean):
        (JSValueMakeNumber):

2020-12-10  Alexey Shvayka  <shvaikalesh@gmail.com>

        Align [[DefineOwnProperty]] method of mapped arguments object with the spec
        https://bugs.webkit.org/show_bug.cgi?id=219750

        Reviewed by Yusuke Suzuki.

        This patch reimplements [[DefineOwnProperty]] method to resemble the spec [1] as
        closely as possible, aligning JSC with V8 and SpiderMonkey on remaining test262 cases.

        Unlike the spec [2], JSC doesn't materialize mapped indices with initial values,
        so putDirectIndex() is performed on the first call to handle incomplete descriptors.

        Even though there is a possibility to avoid JSObject storage puts for a handful of
        super rare descriptors, it's not worth the increased complexity.

        [1]: https://tc39.es/ecma262/#sec-arguments-exotic-objects-defineownproperty-p-desc
        [2]: https://tc39.es/ecma262/#sec-createmappedargumentsobject (step 15.b)

        * runtime/GenericArgumentsInlines.h:
        (JSC::GenericArguments<Type>::defineOwnProperty):

2020-12-10  Tadeu Zagallo  <tzagallo@apple.com>

        Add a JSC API to allow acquiring the JSLock
        https://bugs.webkit.org/show_bug.cgi?id=219663

        Reviewed by Filip Pizlo.

        Introduce two new functions to the C API: JSLock and JSUnlock. These
        functions allow users to take control of the JSContext's lock, which
        can greatly reduce the overhead of bridging between JS and native.

        * API/JSLockRef.cpp: Added.
        (JSLock):
        (JSUnlock):
        * API/JSLockRefPrivate.h: Added.
        * API/JSValueRef.cpp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:

2020-12-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Determine when to use $<TARGET_OBJECTS> for executables
        https://bugs.webkit.org/show_bug.cgi?id=219648

        Reviewed by Michael Catanzaro.

        Use ${taget_name}_FRAMEWORKS to specify WebKit frameworks when linking executables.

        * CMakeLists.txt:
        * shell/CMakeLists.txt:

2020-12-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use WEBKIT_EXECUTABLE macro for LLInt executables
        https://bugs.webkit.org/show_bug.cgi?id=219746

        Reviewed by Michael Catanzaro.

        The LLInt executables were the only ones within Source that were being created
        without the WEBKIT_EXECUTABLE macros.

        * CMakeLists.txt:

2020-12-10  Patrick Angle  <pangle@apple.com>

        Web Inspector: Show current properties for font in new Elements sidebar Font panel
        https://bugs.webkit.org/show_bug.cgi?id=218964

        Reviewed by Devin Rousso.

        Adds objects and method for getting font data for a node to the `CSS` domain. A `CSS.Font` is meant to represent
        a `WebCore::Font` and contain information about the underlying font as the system sees it. The source for this
        information can be a system font or a web font. Each `CSS.Font` in turn can have some number of
        `CSS.FontVariationAxis` for its available open-type variation axes. Fonts that don't support these features will
        have an empty set of axes.

        * inspector/protocol/CSS.json:
        - Added objects and method for getting font data for a node.

2020-12-10  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Use TARGET_PROPERTY to set includes for executables
        https://bugs.webkit.org/show_bug.cgi?id=219743

        Reviewed by Michael Catanzaro.

        Use $<TARGET_PROPERTY:JavaScriptCore,INCLUDE_DIRECTORIES> for all executables being
        built alongside JavaScriptCore. This simplifies the includes for those targets.

        Additionally relocate the setting of include directories for LLInt executables
        so they're next to the rest of their definitions.

        * CMakeLists.txt:
        * shell/CMakeLists.txt:

2020-12-09  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        Fix redundant assert
        https://bugs.webkit.org/show_bug.cgi?id=219725

        Reviewed by Ross Kirsling.

        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferSlice):

2020-12-08  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed debug test fix following r270552.

        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructCustomArrayBufferIfNeeded):
        (JSC::constructGenericTypedArrayViewWithArguments):
        Add missing exception check (and rearrange slightly).

2020-12-08  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed non-unified build fix following r270552.

        * runtime/JSArrayBufferPrototypeInlines.h:

2020-12-08  Ross Kirsling  <ross.kirsling@sony.com>

        Align %TypedArray% constructor behavior with spec
        https://bugs.webkit.org/show_bug.cgi?id=219527

        Reviewed by Yusuke Suzuki.

        These should be the last JSC-side corrections for typed array behavior:
        namely, fixes for the constructor itself.

        Broadly speaking, there are three fixes here:
        1. ArrayBuffer argument (https://tc39.es/ecma262/#sec-initializetypedarrayfromarraybuffer):
           We need to throw if the input buffer gets detached.

        2. Array-like argument (https://tc39.es/ecma262/#sec-initializetypedarrayfromarraylike):
           length needs toLength, not toUInt32.

        3. Typed array argument (https://tc39.es/ecma262/#sec-initializetypedarrayfromtypedarray):
           We need to support the case where the input typed array uses a custom ArrayBuffer.
           This case is *extremely* strange -- we still create the same type of typed array with a normal ArrayBuffer,
           but we override the prototype of that ArrayBuffer to inputTypedArray.buffer.constructor[@@species].prototype.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSArrayBufferConstructor.cpp:
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferSpeciesConstructorSlow): Added.
        (JSC::speciesWatchpointIsValid): Moved.
        * runtime/JSArrayBufferPrototype.h:
        * runtime/JSArrayBufferPrototypeInlines.h: Added.
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructCustomArrayBufferIfNeeded): Added.
        (JSC::constructGenericTypedArrayViewWithArguments):
        * runtime/JSGlobalObject.h:

2020-12-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable "at" methods
        https://bugs.webkit.org/show_bug.cgi?id=219631

        Reviewed by Ross Kirsling.

        This patch enables "at" methods in Array, String, and %TypedArray% by flipping runtime flag.

        * runtime/OptionsList.h:

2020-12-08  Caio Lima  <ticaiolima@gmail.com>

        [ESNext] op_put_private_name is wrong
        https://bugs.webkit.org/show_bug.cgi?id=219616

        Reviewed by Tadeu Zagallo.

        Since `m_property` is a JSCell pointer, we need to use both `loadp`
        and `bpneq` on `op_put_private_name`.

        * llint/LowLevelInterpreter64.asm:

2020-12-07  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for table.copy
        https://bugs.webkit.org/show_bug.cgi?id=219427

        Reviewed by Yusuke Suzuki.

        Add support for table.copy from reference types proposal:
        https://webassembly.github.io/reference-types/core/syntax/instructions.html#table-instructions.
        The table.copy instruction accepts three stack arguments (destination
        offset, source offset, length) and two immediates for table indexes
        and copies items from one wasm table to another.


        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addTableFill):
        (JSC::Wasm::AirIRGenerator::addTableCopy):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addTableFill):
        (JSC::Wasm::B3IRGenerator::addTableCopy):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::tableCopy):
        * wasm/WasmInstance.h:
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::addTableCopy):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::isSumOverflow):
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseElement):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::copy):
        (JSC::Wasm::FuncRefTable::copyFunction):
        * wasm/WasmTable.h:
        * wasm/wasm.json:

2020-12-07  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Remove WEBKIT_WRAP_SOURCELIST
        https://bugs.webkit.org/show_bug.cgi?id=196916

        Reviewed by Michael Catanzaro.

        * CMakeLists.txt:

2020-12-06  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] get / set for object literal and class should not be escaped
        https://bugs.webkit.org/show_bug.cgi?id=219576

        Reviewed by Alexey Shvayka.

        "get" and "set" for getter and setter should not be escaped one.
        Terminal symbols of the lexical grammars are shown in fixed width font [1],
        and are to appear in a script exactly as written.

        [1]: https://tc39.es/ecma262/#sec-method-definitions

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):

2020-12-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Accept escaped keywords for class and object property names
        https://bugs.webkit.org/show_bug.cgi?id=219575

        Reviewed by Alexey Shvayka.

        In this patch, we accept escaped keywords for class, object, and object pattern property names.

            var object = {
                bre\u0061k: 42
            };

        When escaped keyword appears, we produce ESCAPED_KEYWORD with CanBeErrorTokenFlag. Now CanBeErrorTokenFlag
        represents "when this token appears in an error condition, possibly this is error token and special message will appear",
        instead of saying this token is definitely an error. So we can just use ESCAPED_KEYWORD token to handle this case.

        * parser/Lexer.cpp:
        (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseDestructuringPattern):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::printUnexpectedTokenText):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        * parser/ParserTokens.h:

2020-12-04  Adam Roben  <aroben@apple.com>

        More FALLBACK_PLATFORM adoption
        https://bugs.webkit.org/show_bug.cgi?id=219545

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig:
        WK_EMPTY_$(THIS_IS_NOT_EMPTY) evaluates to the empty string, not to
        NO.

2020-12-04  Caio Lima  <ticaiolima@gmail.com>

        [JIT] Value profile stores wrong value in BaselineJIT for some operations
        https://bugs.webkit.org/show_bug.cgi?id=219535

        Reviewed by Mark Lam.

        This patch is a follow up from r270423 to fix 32-bits baseline JIT
        code from `op_iterator_next`. It's also fixing wrong profile value for
        `op_get_prototype_of`.

        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_iterator_next):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_prototype_of):

2020-12-03  Saam Barati  <sbarati@apple.com>

        "done" checkpoint of iterator_next stores the wrong register in the value profile in baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=219501

        Reviewed by Keith Miller.

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_iterator_next):
        * jit/JITInlines.h:
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitValueProfilingSiteIfProfiledOpcode):

2020-12-03  Adam Roben  <aroben@apple.com>

        Adopt FALLBACK_PLATFORM
        https://bugs.webkit.org/show_bug.cgi?id=219504

        Reviewed by Tim Horton.

        * Configurations/SDKVariant.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/check-xcfilelists.sh:
        Use FALLBACK_PLATFORM it if it's defined, otherwise use PLATFORM_NAME
        as before.

2020-12-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] not using std::make_pair for workaround of (possibly) ASan bug
        https://bugs.webkit.org/show_bug.cgi?id=219502
        <rdar://71642789>

        Reviewed by Robin Morisset.

        We are getting ASan crash in LayoutTests/fast/canvas/webgl/array-unit-tests.html after r269574.
        However, this is inside std::make_pair, and it looks like a bug in ASan.
        To workaround this for now, we avoid using std::make_pair and instead just using C++ uniform initialization.

        * runtime/JSArrayBufferPrototype.cpp:

2020-12-03  Saam Barati  <sbarati@apple.com>

        JIT::emit_op_iterator_next fast path passes in the wrong identifier to the "done" JITGetByIdGenerator
        https://bugs.webkit.org/show_bug.cgi?id=219499

        Reviewed by Keith Miller.

        The reason nothing was failing here is that the slow path which calls into C
        code to do repatching of the IC was using the right "done" identifier. The
        fast path only checks if the identifier is "length", so the code sidestepped
        itself being wrong in any way. However, it's good form to use the correct
        identifier.

        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_iterator_next):

2020-12-03  Lauro Moura  <lmoura@igalia.com>

        [WTF] Avoid JSONValue::create with raw string falling to bool overload
        https://bugs.webkit.org/show_bug.cgi?id=219483

        Reviewed by Adrian Perez de Castro.

        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeAsyncCall): Convert to WTF::String when creating the value.

2020-12-02  Michael Catanzaro  <mcatanzaro@gnome.org>

        aarch64 llint does not build with JIT disabled
        https://bugs.webkit.org/show_bug.cgi?id=219288
        <rdar://problem/71855960>

        Reviewed by Darin Adler.

        * assembler/ARM64Assembler.h: Rename USE(JUMP_ISLANDS) to ENABLE(JUMP_ISLANDS).
        (JSC::ARM64Assembler::replaceWithJump):
        (JSC::ARM64Assembler::linkJumpOrCall):
        * assembler/AbstractMacroAssembler.h: Rename USE(JUMP_ISLANDS) to ENABLE(JUMP_ISLANDS).
        (JSC::AbstractMacroAssembler::prepareForAtomicRepatchNearCallConcurrently):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode): Guard JIT-specific code with ENABLE(JIT).
        * jit/ExecutableAllocator.cpp: Rename USE(JUMP_ISLANDS) to ENABLE(JUMP_ISLANDS).
        (JSC::initializeJITPageReservation):
        * jit/ExecutableAllocator.h: Rename USE(JUMP_ISLANDS) to ENABLE(JUMP_ISLANDS).

2020-12-02  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%#slice shouldn't care about source buffer detachment if there's nothing to copy
        https://bugs.webkit.org/show_bug.cgi?id=219451

        Reviewed by Yusuke Suzuki.

        From https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice:
          13. Let A be ? TypedArraySpeciesCreate(O, « 𝔽(count) »).
          14. If count > 0, then
            a. If IsDetachedBuffer(O.[[ViewedArrayBuffer]]) is true, throw a TypeError exception.
            ...
          15. Return A.

        We had step 14.a raised above 14; this patch fixes the ordering.

        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSlice):

2020-12-02  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Add support for active mods in element section
        https://bugs.webkit.org/show_bug.cgi?id=219192

        Reviewed by Yusuke Suzuki.
        
        Adjust wasm parser to parse new form of element section.
        https://webassembly.github.io/reference-types/core/binary/modules.html#element-section.

        * wasm/WasmEntryPlan.cpp:
        (JSC::Wasm::EntryPlan::prepare):
        * wasm/WasmFormat.h:
        (JSC::Wasm::Element::Element):
        (JSC::Wasm::Element::active const):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseElement):
        (JSC::Wasm::SectionParser::validateElementTableIdx):
        (JSC::Wasm::SectionParser::parseI32InitExpr):
        (JSC::Wasm::SectionParser::parseElemKind):
        (JSC::Wasm::SectionParser::parseIndexCountForElemSection):
        (JSC::Wasm::SectionParser::parseFuncIdxFromRefExpForElemSection):
        (JSC::Wasm::SectionParser::parseFuncIdxForElemSection):
        * wasm/WasmSectionParser.h:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2020-12-01  Sergey Rubanov  <chi187@gmail.com>

        Fix Aarch64 build failure
        https://bugs.webkit.org/show_bug.cgi?id=219395

        Reviewed by Yusuke Suzuki.

        * offlineasm/arm64.rb:

2020-12-01  Keith Rollin  <krollin@apple.com>

        Consolidate header postprocessing scripts
        https://bugs.webkit.org/show_bug.cgi?id=219388
        <rdar://problem/71840357>

        Reviewed by David Kilzer.

        Our build system contains the following scripts to perform some
        postprocessing of headers that we export to the SDK:

            JavaScriptCore/postprocess-headers.sh
            WebKit/mac/postprocess-framework-headers.sh
            WebKitLegacy/mac/postprocess-headers.sh

        The preceding scripts are used when using the non-XCBuild -- or
        "legacy" -- Xcode build system. They are invoked in a custom Run
        Script build phase after the headers have been exported with the
        standard Xcode facility for creating frameworks.

        Alternatively, we also have the following postprocessing scripts:

            WebKit/Scripts/postprocess-header-rule
            JavaScriptCore/Scripts/postprocess-header-rule
            WebKitLegacy/scripts/postprocess-header-rule

        These scripts are used when using the XCBuild build system. They are
        invoked *during* the header export process to copy and postprocess the
        headers in one blow. They are part of a Custom Build Rule for
        exporting files ending in ".h".

        The reason why we have two sets of scripts is because of the different
        capabilities of the two Xcode build systems. The legacy system does
        not support a custom "export header" step that would allow us to copy
        and postprocess each header in a single step. Therefore, when using
        the legacy build system, we export in one build step and postprocess
        in a subsequent build step. And XCBuild doesn't like the approach
        taken by the old build system where files are exported first and then
        munged in a separate step, since that confuses its notion of the state
        of the build ("Hey! That file I exported in the previous build? I see
        now that it's been changed, so I'm going to export it again. And
        change its modification date. And then rebuild everything downstream
        that uses it."). Therefore, XCBuild added a facility for copying and
        postprocessing in one step.

        The scripts supporting each of these approaches are very similar to
        each other, such that there is a lot of code duplication between them.
        At the same time, by having two sets of scripts that are very similar
        to each other, we run the risk of "drift", where files in one set may
        get updated while their counterparts in the other set are not.

        Address this duplication by making the scripts in the "legacy" set be
        mere stubs that invoke the scripts in the new "XCBuild" set. In doing
        this, we also fix a case of drift: the legacy-based scripts made use
        of a timestamp file to determine if headers needed to be reprocessed
        and exported, while the XCBuild-based scripts used a "process the
        files and export them if any actual changes now exist between this new
        version and any previously-exported version" approach.

        Along the way, fix a bug in WebKitLegacy's postprocess-header-rule
        that resulted in WebKitAvailability.h not being processed. The
        practical effect of this bug is that the file ended up with both macOS
        and iOS code, along with the #if that controlled which chunk of code
        was compiled, instead of just the chunk of code specific to the
        targeted SDK. Normally, the unused chunk of code would get removed
        through the invocation of `unifdef`. But, because of the bug, the
        results of running `unifdef` were being discarded.

        * postprocess-headers.sh:

2020-12-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove unused getPrimitiveNumber() methods
        https://bugs.webkit.org/show_bug.cgi?id=219370

        Reviewed by Mark Lam.

        These methods were originated in KJS, have weird signature / return value,
        are currently unused, and were displaced by toNumber() / toPrimitive().

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::getPrimitiveNumber const): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::getPrimitiveNumber): Deleted.
        * runtime/JSCell.cpp:
        (JSC::JSCell::getPrimitiveNumber const): Deleted.
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPrimitiveNumber const): Deleted.
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getPrimitiveNumber const): Deleted.
        * runtime/JSString.h:
        (JSC::JSString::toBoolean const):
        * runtime/Symbol.cpp:
        (JSC::Symbol::getPrimitiveNumber const): Deleted.
        * runtime/Symbol.h:

2020-12-01  Lauro Moura  <lmoura@igalia.com>

        [JSC] Make Bytecodes generator command also depend on wasm.json
        https://bugs.webkit.org/show_bug.cgi?id=219383

        Reviewed by Adrian Perez de Castro.

        r270265 added some new operations to wasm.json but its change did not
        trigger the bytecodes generator command, causing the build to fail in
        some platforms (in fact, it was caught by GTK and WPE EWS bots).

        * CMakeLists.txt: Add wasm.json as dependency to the bytecodes.h generator
        command.

2020-11-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Making module entry promise-like by setting "then"
        https://bugs.webkit.org/show_bug.cgi?id=216695

        Reviewed by Saam Barati.

        Setting then: @undefined to make entry promise-like.
        We also optimize @InternalPromise.internalAll a bit.

        * builtins/InternalPromiseConstructor.js:
        (internalAll.newResolveElement):
        (internalAll):
        * builtins/ModuleLoader.js:
        (globalPrivate.newRegistryEntry):
        (requestImportModule):
        (async requestImportModule): Deleted.
        * builtins/PromiseOperations.js:
        (globalPrivate.fulfillPromiseWithFirstResolvingFunctionCallCheck):

2020-11-30  Sergey Rubanov  <chi187@gmail.com>

        Add support for the Wasm i64 sign-extension-ops proposal
        https://bugs.webkit.org/show_bug.cgi?id=218990

        Reviewed by Yusuke Suzuki.

        * llint/WebAssembly.asm:
        * offlineasm/arm64.rb:
        * offlineasm/cloop.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Extend8S>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Extend16S>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I64Extend32S>):
        * wasm/wasm.json:

2020-11-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r270214
        https://bugs.webkit.org/show_bug.cgi?id=219281

        ARM64 does not support unary Not32 / Not64.

        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitAtomicBinaryRMWOp):

2020-11-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use ARM atomic ops in wasm
        https://bugs.webkit.org/show_bug.cgi?id=219281

        Reviewed by Filip Pizlo.

        This patch uses ARM LSE Atomic instructions in wasm atomic operations. This includes support in MacroAssembler, offlineasm, Air and B3,
        so that FTL atomic operations automatically leverage ARM LSE atomic instructions too. Later we can extend DFG JIT to use it too.

        One interesting thing is that this includes a fix for cmpxchg wasm operation implementations. Unfortunately, current wasm cmpxchg ops
        are not the same to ARM cas / X86 cmpxchg. For example, i64.atomic.rmw8.cmpxchg_u takes i64 expected value. And the spec requires that
        we should perform `i64-expected-value <cmp> loaded-zero-extended-1byte-value`. For example, if the expected value is `0xffffffff_ffffff00`,
        and the value stored in the memory is `0x00`, then the wasm op needs to fail since `0x00` is not `0xffffffff_ffffff00`. But x86 and ARM
        cmpxchg / cas ops behave differently since it truncates expected value to 1byte when performing 1byte cmpxchg. So we need to have a check
        which performs the value is within 1byte range in this operation.

        * assembler/ARM64EAssembler.h:
        (JSC::ARM64EAssembler::exoticAtomicLoadStore):
        (JSC::ARM64EAssembler::exoticAtomicCAS):
        (JSC::ARM64EAssembler::ldaddal):
        (JSC::ARM64EAssembler::ldeoral):
        (JSC::ARM64EAssembler::ldclral):
        (JSC::ARM64EAssembler::ldsetal):
        (JSC::ARM64EAssembler::swpal):
        (JSC::ARM64EAssembler::casal):
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::atomicXchgAdd8):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd16):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd32):
        (JSC::MacroAssemblerARM64E::atomicXchgAdd64):
        (JSC::MacroAssemblerARM64E::atomicXchgXor8):
        (JSC::MacroAssemblerARM64E::atomicXchgXor16):
        (JSC::MacroAssemblerARM64E::atomicXchgXor32):
        (JSC::MacroAssemblerARM64E::atomicXchgXor64):
        (JSC::MacroAssemblerARM64E::atomicXchgOr8):
        (JSC::MacroAssemblerARM64E::atomicXchgOr16):
        (JSC::MacroAssemblerARM64E::atomicXchgOr32):
        (JSC::MacroAssemblerARM64E::atomicXchgOr64):
        (JSC::MacroAssemblerARM64E::atomicXchgClear8):
        (JSC::MacroAssemblerARM64E::atomicXchgClear16):
        (JSC::MacroAssemblerARM64E::atomicXchgClear32):
        (JSC::MacroAssemblerARM64E::atomicXchgClear64):
        (JSC::MacroAssemblerARM64E::atomicXchg8):
        (JSC::MacroAssemblerARM64E::atomicXchg16):
        (JSC::MacroAssemblerARM64E::atomicXchg32):
        (JSC::MacroAssemblerARM64E::atomicXchg64):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS8):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS16):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS32):
        (JSC::MacroAssemblerARM64E::atomicStrongCAS64):
        * b3/B3LowerMacros.cpp:
        * b3/B3LowerToAir.cpp:
        * b3/air/AirOpcode.opcodes:
        * b3/air/opcode_generator.rb:
        * disassembler/ARM64/A64DOpcode.cpp:
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::format):
        (JSC::ARM64Disassembler::A64DOpcodeSwapAtomic::format):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::format):
        * disassembler/ARM64/A64DOpcode.h:
        (JSC::ARM64Disassembler::A64DOpcode::appendInstructionName):
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::opName):
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::rs):
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::opc):
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::ar):
        (JSC::ARM64Disassembler::A64DOpcodeLoadAtomic::opNumber):
        (JSC::ARM64Disassembler::A64DOpcodeSwapAtomic::opName):
        (JSC::ARM64Disassembler::A64DOpcodeSwapAtomic::rs):
        (JSC::ARM64Disassembler::A64DOpcodeSwapAtomic::ar):
        (JSC::ARM64Disassembler::A64DOpcodeSwapAtomic::opNumber):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::opName):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::rs):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::o1):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::l):
        (JSC::ARM64Disassembler::A64DOpcodeCAS::opNumber):
        * llint/WebAssembly.asm:
        * offlineasm/arm64.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::AirIRGenerator::appendGeneralAtomic):
        (JSC::Wasm::AirIRGenerator::appendStrongCAS):
        (JSC::Wasm::AirIRGenerator::emitAtomicLoadOp):
        (JSC::Wasm::AirIRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::AirIRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::AirIRGenerator::emitAtomicCompareExchange):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitAtomicCompareExchange):

2020-11-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add wasm atomics instructions
        https://bugs.webkit.org/show_bug.cgi?id=218954

        Reviewed by Filip Pizlo.

        This patch implements wasm threading's atomic operations[1] in X86_64 and ARM64. Currently, all ARM64 atomic operations are implemented by using LL/SC.
        Later, we will use ARM64 CAS operations if possible, at least in ARM64E.

        To test it easily, we also extend jsc shell's worker to support transferring shared WebAssembly.Memory so that we can use wasm atomic operations in several
        workers in jsc shell.

        [1]: https://github.com/WebAssembly/threads

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::atomicXchg8):
        (JSC::MacroAssemblerX86Common::atomicXchg16):
        (JSC::MacroAssemblerX86Common::atomicXchg32):
        * b3/B3Kind.h:
        (JSC::B3::Kind::hasTraps const):
        * b3/B3LowerToAir.cpp:
        * b3/B3Width.h:
        (JSC::B3::bytesForWidth):
        * b3/testb3_8.cpp:
        (testAtomicXchg):
        * bytecode/BytecodeList.rb:
        * interpreter/Register.h:
        (JSC::Register::unboxedInt64 const):
        (JSC::Register::asanUnsafeUnboxedInt64 const):
        * jsc.cpp:
        (Message::releaseContents):
        (Message::Message):
        (JSC_DEFINE_HOST_FUNCTION):
        * llint/WebAssembly.asm:
        * offlineasm/arm64.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:
        * runtime/OptionsList.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::appendEffectful):
        (JSC::Wasm::accessWidth):
        (JSC::Wasm::sizeOfAtomicOpMemoryAccess):
        (JSC::Wasm::AirIRGenerator::fixupPointerPlusOffsetForAtomicOps):
        (JSC::Wasm::AirIRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::AirIRGenerator::appendGeneralAtomic):
        (JSC::Wasm::AirIRGenerator::appendStrongCAS):
        (JSC::Wasm::AirIRGenerator::emitAtomicLoadOp):
        (JSC::Wasm::AirIRGenerator::atomicLoad):
        (JSC::Wasm::AirIRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::AirIRGenerator::atomicStore):
        (JSC::Wasm::AirIRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::AirIRGenerator::atomicBinaryRMW):
        (JSC::Wasm::AirIRGenerator::emitAtomicCompareExchange):
        (JSC::Wasm::AirIRGenerator::atomicCompareExchange):
        (JSC::Wasm::AirIRGenerator::atomicWait):
        (JSC::Wasm::AirIRGenerator::atomicNotify):
        (JSC::Wasm::AirIRGenerator::atomicFence):
        (JSC::Wasm::AirIRGenerator::addCall):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::B3IRGenerator::memoryKind):
        (JSC::Wasm::accessWidth):
        (JSC::Wasm::sizeOfAtomicOpMemoryAccess):
        (JSC::Wasm::B3IRGenerator::sanitizeAtomicResult):
        (JSC::Wasm::B3IRGenerator::fixupPointerPlusOffsetForAtomicOps):
        (JSC::Wasm::B3IRGenerator::emitAtomicLoadOp):
        (JSC::Wasm::B3IRGenerator::atomicLoad):
        (JSC::Wasm::B3IRGenerator::emitAtomicStoreOp):
        (JSC::Wasm::B3IRGenerator::atomicStore):
        (JSC::Wasm::B3IRGenerator::emitAtomicBinaryRMWOp):
        (JSC::Wasm::B3IRGenerator::atomicBinaryRMW):
        (JSC::Wasm::B3IRGenerator::emitAtomicCompareExchange):
        (JSC::Wasm::B3IRGenerator::atomicCompareExchange):
        (JSC::Wasm::B3IRGenerator::atomicWait):
        (JSC::Wasm::B3IRGenerator::atomicNotify):
        (JSC::Wasm::B3IRGenerator::atomicFence):
        (JSC::Wasm::B3IRGenerator::addCall):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::atomicLoad):
        (JSC::Wasm::FunctionParser<Context>::atomicStore):
        (JSC::Wasm::FunctionParser<Context>::atomicBinaryRMW):
        (JSC::Wasm::FunctionParser<Context>::atomicCompareExchange):
        (JSC::Wasm::FunctionParser<Context>::atomicWait):
        (JSC::Wasm::FunctionParser<Context>::atomicNotify):
        (JSC::Wasm::FunctionParser<Context>::atomicFence):
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::atomicLoad):
        (JSC::Wasm::LLIntGenerator::atomicStore):
        (JSC::Wasm::LLIntGenerator::atomicBinaryRMW):
        (JSC::Wasm::LLIntGenerator::atomicCompareExchange):
        (JSC::Wasm::LLIntGenerator::atomicWait):
        (JSC::Wasm::LLIntGenerator::atomicNotify):
        (JSC::Wasm::LLIntGenerator::atomicFence):
        * wasm/WasmMemory.h:
        * wasm/WasmMemoryInformation.cpp:
        (JSC::Wasm::MemoryInformation::MemoryInformation):
        * wasm/WasmMemoryInformation.h:
        (JSC::Wasm::MemoryInformation::isShared const):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::wait):
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        * wasm/WasmOperations.h:
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseResizableLimits):
        (JSC::Wasm::SectionParser::parseTableHelper):
        (JSC::Wasm::SectionParser::parseMemoryHelper):
        * wasm/WasmSectionParser.h:
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::WASM_SLOW_PATH_DECL):
        * wasm/WasmSlowPaths.h:
        * wasm/generateWasm.py:
        (isAtomic):
        (isAtomicLoad):
        (isAtomicStore):
        (isAtomicBinaryRMW):
        (memoryLog2Alignment):
        * wasm/generateWasmOpsHeader.py:
        (atomicMemoryLoadMacroizer):
        (atomicMemoryLoadMacroizer.modifier):
        (atomicMemoryStoreMacroizer):
        (atomicMemoryStoreMacroizer.modifier):
        (atomicBinaryRMWMacroizer):
        (atomicBinaryRMWMacroizer.modifier):
        (memoryLog2AlignmentGenerator):
        (atomicMemoryLog2AlignmentGenerator):
        (ExtAtomicOpType):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::tryCreate):
        * wasm/wasm.json:

2020-11-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable private instance and static fields
        https://bugs.webkit.org/show_bug.cgi?id=219179

        Reviewed by Mark Lam.

        Enable private instance and static fields. We are not supporting private methods and static private methods yet.

        * runtime/OptionsList.h:

2020-11-19  Saam Barati  <sbarati@apple.com>

        Use os_thread_self_restrict_rwx_is_supported instead of pthread_jit_write_protect_supported_np on Apple Internal SDK builds
        https://bugs.webkit.org/show_bug.cgi?id=219099
        <rdar://problem/71547048>

        Reviewed by Mark Lam.

        * assembler/FastJITPermissions.h:
        (useFastJITPermissions):
        (threadSelfRestrictRWXToRW):
        (threadSelfRestrictRWXToRX):

2020-11-19  Xan López  <xan@igalia.com>

        [JSC] Add support for static private class fields
        https://bugs.webkit.org/show_bug.cgi?id=214297

        Reviewed by Yusuke Suzuki.

        Static private fields come trivially now that both private and
        static (public) fields are implemented.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass): accept static private fields if the runtime option allows it.
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions): usePrivateStaticClassFields depends on usePrivateClassFields.
        * runtime/OptionsList.h: add runtime option to enable static private fields.
        * tools/JSDollarVM.cpp: add a method to check for private symbols in the stress tests.
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):

2020-11-19  Adrian Perez de Castro  <aperez@igalia.com>

        [JSC] Build failed due to unknown values in LLIntDesiredOffsets.h
        https://bugs.webkit.org/show_bug.cgi?id=219158

        Reviewed by Don Olmstead.

        CMake uses the contents of the variables OFFLINE_ASM and GENERATOR as part of the
        dependencies that cause LLIntDesiredOffsets.h to be regenerated, so add to them
        those files missing from the lists.

        * CMakeLists.txt: Update OFFLINE_ASM and GENERATOR lists.

2020-11-18  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Remove subtyping rule for externref and funcref
        https://bugs.webkit.org/show_bug.cgi?id=218885

        Reviewed by Yusuke Suzuki.

        Make funcref is not a subtype of externref.
        The spec: https://webassembly.github.io/reference-types/core/
        The PR for removing subtype from the spec:
        https://github.com/WebAssembly/reference-types/pull/87.

        * wasm/WasmFormat.h:
        (JSC::Wasm::isSubtype):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2020-11-18  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Reinstate String#at
        https://bugs.webkit.org/show_bug.cgi?id=219124

        Reviewed by Yusuke Suzuki.

        At this week's TC39 meeting, consensus was achieved on renaming item() *and* keeping it for strings too.
        Accordingly, this patch reinstates String.prototype.at behind the existing useAtMethod runtime option.

        * builtins/StringPrototype.js:
        (at):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::finishCreation):

2020-11-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Improve Wasm binary test coverage
        https://bugs.webkit.org/show_bug.cgi?id=204843

        Reviewed by Darin Adler.

        This patch fixes some of bugs in wasm parser so that we validate malformed wasm modules more strictly.

        1. current_memory / grow_memory should have uint8 flag, not varuint32 flag.
        2. global section should have uint8 mutability information, not varuint32.
        3. memory section should have varuint32 memory count.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        (JSC::Wasm::FunctionParser<Context>::parseUnreachableExpression):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseResizableLimits):
        (JSC::Wasm::SectionParser::parseMemory):
        (JSC::Wasm::SectionParser::parseGlobalType):
        * wasm/wasm.json:

2020-11-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, relanding r269940
        https://bugs.webkit.org/show_bug.cgi?id=219076

        ARM64E clang optimizer is broken and optimizing forever if Wasm::MemoryHandle::memory() is inlined.
        Putting NEVER_INLINE onto this function for now (unfortunate).

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntPCRanges.h:
        (JSC::LLInt::isWasmLLIntPC):
        * llint/LowLevelInterpreter.asm:
        * llint/WebAssembly.asm:
        * runtime/JSArrayBuffer.h:
        (JSC::JSArrayBuffer::toWrappedAllowShared):
        * runtime/JSArrayBufferView.h:
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::toWrappedAllowShared):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::toWrappedAllowShared):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        (JSC::Options::initialize):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCurrentMemory):
        (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::AirIRGenerator::addCall):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCurrentMemory):
        (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):
        (JSC::Wasm::enableFastMemory):
        (JSC::Wasm::prepareFastMemory):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::cachedMemory const):
        (JSC::Wasm::Instance::cachedBoundsCheckingSize const):
        (JSC::Wasm::Instance::updateCachedMemory):
        (JSC::Wasm::Instance::offsetOfCachedBoundsCheckingSize):
        (JSC::Wasm::Instance::cachedMemorySize const): Deleted.
        (JSC::Wasm::Instance::offsetOfCachedMemorySize): Deleted.
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::MemoryHandle::MemoryHandle):
        (JSC::Wasm::MemoryHandle::~MemoryHandle):
        (JSC::Wasm::MemoryHandle::memory const):
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::create):
        (JSC::Wasm::Memory::tryCreate):
        (JSC::Wasm::Memory::addressIsInGrowableOrFastMemory):
        (JSC::Wasm::Memory::growShared):
        (JSC::Wasm::Memory::grow):
        (JSC::Wasm::Memory::dump const):
        (JSC::Wasm::Memory::~Memory): Deleted.
        (JSC::Wasm::Memory::addressIsInActiveFastMemory): Deleted.
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::addressIsInGrowableOrFastMemory):
        (JSC::Wasm::Memory::operator bool const): Deleted.
        (JSC::Wasm::Memory::memory const): Deleted.
        (JSC::Wasm::Memory::size const): Deleted.
        (JSC::Wasm::Memory::sizeInPages const): Deleted.
        (JSC::Wasm::Memory::initial const): Deleted.
        (JSC::Wasm::Memory::maximum const): Deleted.
        (JSC::Wasm::Memory::mode const): Deleted.
        (JSC::Wasm::Memory::check): Deleted.
        (JSC::Wasm::Memory::offsetOfMemory): Deleted.
        (JSC::Wasm::Memory::offsetOfSize): Deleted.
        (JSC::Wasm::Memory::addressIsInActiveFastMemory): Deleted.
        * wasm/WasmMemoryInformation.cpp:
        (JSC::Wasm::PinnedRegisterInfo::get):
        (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
        * wasm/WasmMemoryInformation.h:
        (JSC::Wasm::PinnedRegisterInfo::toSave const):
        * wasm/WasmMemoryMode.cpp:
        (JSC::Wasm::makeString):
        * wasm/WasmMemoryMode.h:
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::tryCreate):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::buffer):
        (JSC::JSWebAssemblyMemory::growSuccessCallback):
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2020-11-18  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r269940.
        https://bugs.webkit.org/show_bug.cgi?id=219076

        caused seemingly-infinite build time regression

        Reverted changeset:

        "[JSC] Implement WebAssembly.Memory with shared"
        https://bugs.webkit.org/show_bug.cgi?id=218693
        https://trac.webkit.org/changeset/269940

2020-11-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement WebAssembly.Memory with shared
        https://bugs.webkit.org/show_bug.cgi?id=218693

        Reviewed by Saam Barati.

        This patch implements shared WebAssembly.Memory. This can be shared between workers like SharedArrayBuffer.
        The most interesting thing of shared WebAssembly.Memory is that it is growable. The memory can be grown in
        one thread, and immediately, it should be accessible in the other threads.

        To achieve that, shared WebAssembly.Memory leverages signaling even if bounds-checking is mainly used.
        If the fast memory is enabled, we just use it so that mprotect can make memory grown easily. But if fast memory
        is disabled, we allocates requested VA region and perform bounds-checking with this VA. Since WebAssembly.Memory
        always requires "maximum" size of memory, we can first allocate VA and map active part of memory first. And
        when growing, we perform mprotect to the rest of the memory. Since this VA is not 4GB, we still need to perform
        bounds-checking, but we perform bounds-checking with VA size instead of active memory size. As a result, even if
        shared WebAssembly.Memory is grown, we do not need to update (1) pointer and (2) bounds-checking size.
        The shared bounds-checking WebAssembly.Memory is something like below.

        <================================================ maximum ============================><------------ other memory, protected by bounds-checking --...
        <======= active ==========><===================== not active yet =====================>
        ^                               [ if we access this, fault handler will detect it]    ^
        pointer                                                                               bounds checking size

        These "growable bound-checking memory" is now managed by wasm memory-manager. And fault handler is used even if fast memory is disabled.
        And fault handler also accepts signals from Wasm LLInt code since both bounds-checkings + signalings are required to confine memory access even in
        Wasm LLInt. This patch also renamed memory-size and size-register to bounds-checking-size and bounds-checking-size-register since this is no longer
        a size of memory.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * llint/LLIntPCRanges.h:
        (JSC::LLInt::isWasmLLIntPC):
        * llint/LowLevelInterpreter.asm:
        * llint/WebAssembly.asm:
        * runtime/JSArrayBuffer.h:
        (JSC::JSArrayBuffer::toWrappedAllowShared):
        * runtime/JSArrayBufferView.h:
        * runtime/JSArrayBufferViewInlines.h:
        (JSC::JSArrayBufferView::toWrappedAllowShared):
        * runtime/JSGenericTypedArrayView.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::toWrappedAllowShared):
        * runtime/Options.cpp:
        (JSC::overrideDefaults):
        (JSC::Options::initialize):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCurrentMemory):
        (JSC::Wasm::AirIRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::AirIRGenerator::addCall):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCurrentMemory):
        (JSC::Wasm::B3IRGenerator::emitCheckAndPreparePointer):
        (JSC::Wasm::B3IRGenerator::addCall):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):
        (JSC::Wasm::enableFastMemory):
        (JSC::Wasm::prepareFastMemory):
        * wasm/WasmInstance.h:
        (JSC::Wasm::Instance::cachedMemory const):
        (JSC::Wasm::Instance::cachedBoundsCheckingSize const):
        (JSC::Wasm::Instance::updateCachedMemory):
        (JSC::Wasm::Instance::offsetOfCachedBoundsCheckingSize):
        (JSC::Wasm::Instance::cachedMemorySize const): Deleted.
        (JSC::Wasm::Instance::offsetOfCachedMemorySize): Deleted.
        * wasm/WasmMemory.cpp:
        (JSC::Wasm::MemoryHandle::MemoryHandle):
        (JSC::Wasm::MemoryHandle::~MemoryHandle):
        (JSC::Wasm::Memory::Memory):
        (JSC::Wasm::Memory::create):
        (JSC::Wasm::Memory::tryCreate):
        (JSC::Wasm::Memory::addressIsInGrowableOrFastMemory):
        (JSC::Wasm::Memory::growShared):
        (JSC::Wasm::Memory::grow):
        (JSC::Wasm::Memory::dump const):
        (JSC::Wasm::Memory::~Memory): Deleted.
        (JSC::Wasm::Memory::addressIsInActiveFastMemory): Deleted.
        * wasm/WasmMemory.h:
        (JSC::Wasm::Memory::addressIsInGrowableOrFastMemory):
        (JSC::Wasm::Memory::operator bool const): Deleted.
        (JSC::Wasm::Memory::memory const): Deleted.
        (JSC::Wasm::Memory::size const): Deleted.
        (JSC::Wasm::Memory::sizeInPages const): Deleted.
        (JSC::Wasm::Memory::initial const): Deleted.
        (JSC::Wasm::Memory::maximum const): Deleted.
        (JSC::Wasm::Memory::mode const): Deleted.
        (JSC::Wasm::Memory::check): Deleted.
        (JSC::Wasm::Memory::offsetOfMemory): Deleted.
        (JSC::Wasm::Memory::offsetOfSize): Deleted.
        (JSC::Wasm::Memory::addressIsInActiveFastMemory): Deleted.
        * wasm/WasmMemoryInformation.cpp:
        (JSC::Wasm::PinnedRegisterInfo::get):
        (JSC::Wasm::PinnedRegisterInfo::PinnedRegisterInfo):
        * wasm/WasmMemoryInformation.h:
        (JSC::Wasm::PinnedRegisterInfo::toSave const):
        * wasm/WasmMemoryMode.cpp:
        (JSC::Wasm::makeString):
        * wasm/WasmMemoryMode.h:
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/JSWebAssemblyInstance.cpp:
        (JSC::JSWebAssemblyInstance::tryCreate):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::buffer):
        (JSC::JSWebAssemblyMemory::growSuccessCallback):
        * wasm/js/JSWebAssemblyMemory.h:
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):

2020-11-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable static public class fields
        https://bugs.webkit.org/show_bug.cgi?id=219058

        Reviewed by Saam Barati.

        Let's flip the runtime flag (usePublicStaticClassFields). And we drop usePublicClassFields flag since it is already shipped.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionCallValueNode::emitBytecode):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        * runtime/OptionsList.h:

2020-11-17  Michael Catanzaro  <mcatanzaro@gnome.org>

        [CMake] generate_offset_extractor.rb missing build dependency for llint/WebAssembly.asm
        https://bugs.webkit.org/show_bug.cgi?id=219043

        Reviewed by Don Olmstead.

        generate_offset_extractor.rb is missing a build dependency for llint/WebAssembly.asm. If
        WebAssembly.asm is modified, generate_offset_extracter.rb needs to be run again.

        * CMakeLists.txt:

2020-11-17  Saam Barati  <sbarati@apple.com>

        Add more info to the RELEASE_ASSERT inside Parser::parseInner
        https://bugs.webkit.org/show_bug.cgi?id=219054
        <rdar://problem/71506453>

        Reviewed by Mark Lam.

        We have some crashes here, and it'll be helpful for the crashlogs to have
        more info in the register state.

        * parser/Lexer.h:
        (JSC::Lexer::codeLength):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):

2020-11-17  Sergey Rubanov  <chi187@gmail.com>

        Add support for the Wasm i32 sign-extension-ops proposal
        https://bugs.webkit.org/show_bug.cgi?id=210302

        Reviewed by Yusuke Suzuki.

        * llint/LowLevelInterpreter.asm:
        * llint/WebAssembly.asm:
        * offlineasm/arm64.rb:
        * offlineasm/cloop.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Extend8S>):
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32Extend16S>):
        * wasm/wasm.json:

2020-11-17  Xan López  <xan@igalia.com>

        [JSC] Add support for static public class fields
        https://bugs.webkit.org/show_bug.cgi?id=194095

        Reviewed by Yusuke Suzuki.

        Add support for static public class fields. We can reuse most of
        the existing machinery available for instance fields. Like
        instance fields, static fields are initialized with a synthetic
        function. This is done to allow us to trivially follow the scoping
        rules in the spec. As it happens with instance fields this could
        be inlined in a future patch.

        A lot of small changes in many files are just a matter of doing
        s/instance/class/ for variables related to class fields, which
        before were assuming there are only instance fields implemented.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock): do s/instanceField/classField/.
        * bytecode/UnlinkedFunctionExecutable.h: ditto.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewClassFieldInitializerFunction): ditto.
        * bytecompiler/BytecodeGenerator.h: ditto, plus add a parameter
        for static field locations in emitDefineClassElements.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode): save static fields
        locations when going through the property list.
        (JSC::PropertyListNode::emitSaveComputedFieldName): consider
        static fields here too.
        (JSC::ClassExprNode::emitBytecode): call the initializer for
        static fields as the very last action of the class creation.
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createDefineField): field nodes can be static
        too now.
        * parser/NodeConstructors.h:
        (JSC::DefineFieldNode::DefineFieldNode): ditto.
        * parser/Nodes.h: ditto.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner): s/instanceField/classField/
        (JSC::Parser<LexerType>::parseClass): consider static fields.
        (JSC::Parser<LexerType>::parseInstanceFieldInitializerSourceElements):
        s/instanceField/classField/, and consider static fields.
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse): s/instanceField/classField/
        (JSC::parse): ditto.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::setFunctionName): s/instanceField/classField/
        * runtime/OptionsList.h: add option to enable/disable static public fields.

2020-11-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Wasm should get byte length from source typed array
        https://bugs.webkit.org/show_bug.cgi?id=218955

        Reviewed by Sam Weinig.

        WebAssembly's module source should be read with byteLength instead of length of typed-array.

        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::byteLength const):
        (JSC::JSArrayBufferView::slowDownAndWasteMemory):
        * runtime/JSArrayBufferView.h:
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::getWasmBufferFromValue):

2020-11-14  Don Olmstead  <don.olmstead@sony.com>

        [clang-tidy] Run modernize-use-override through JSC
        https://bugs.webkit.org/show_bug.cgi?id=218916

        Reviewed by Yusuke Suzuki.

        * inspector/agents/InspectorAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/agents/InspectorTargetAgent.h:
        * inspector/agents/JSGlobalObjectAuditAgent.h:
        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        * inspector/remote/socket/RemoteInspectorServer.h:
        * runtime/JSGlobalObjectDebuggable.h:

2020-11-13  Xan López  <xan@igalia.com>

        [JSC] Use symbols as identifiers for class fields computed names storage
        https://bugs.webkit.org/show_bug.cgi?id=216172

        Reviewed by Yusuke Suzuki.

        Use private symbols for the property keys of the class fields with
        computed names. This is cleaner than using raw numeric identifiers and
        will be less cumbersome when we add static fields. It also prevents
        potential collisions if other features want to store data in the class
        scope.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitSaveComputedFieldName): adapt a comment.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass): use private identifiers for computed fields property keys.
        (JSC::Parser<LexerType>::parseInstanceFieldInitializerSourceElements): ditto.
        * parser/ParserArena.cpp:
        (JSC::IdentifierArena::makePrivateIdentifier): method to create a private identifier.
        * parser/ParserArena.h:
        * runtime/CachedTypes.cpp:
        (JSC::CachedUniquedStringImplBase::encode): consider registered symbols, they are used by the parser now.
        (JSC::CachedUniquedStringImplBase::decode const): ditto.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::privateSymbolRegistry): create a private symbol registry too.

2020-11-13  Sergey Rubanov  <chi187@gmail.com>

        WebAssembly: opcodes for table.grow and table.size are mixed up
        https://bugs.webkit.org/show_bug.cgi?id=218644

        Reviewed by Yusuke Suzuki.

        * wasm/wasm.json:

2020-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: ensure that `JSON::ArrayOf<T>` doesn't allow `addItem` to be called with a type other than `T`
        https://bugs.webkit.org/show_bug.cgi?id=218686

        Reviewed by Brian Burg.

        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_enum_mapping):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        Use `ASCIILiteral`, `makeString`, and `_s` instead of inlined `char*` to ensure that the
        `String` function overload is used.

        * inspector/scripts/tests/expected/command-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/expected/domain-debuggableTypes.json-result:
        * inspector/scripts/tests/expected/domain-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/domain-targetTypes.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/event-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/expected/type-with-open-parameters.json-result:

2020-11-12  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Support imm for ref.null
        https://bugs.webkit.org/show_bug.cgi?id=218744

        Reviewed by Yusuke Suzuki.
        
        Updated ref.null according to the ref-types spec:
        https://github.com/WebAssembly/reference-types/.

        * wasm/WasmFormat.h:
        (JSC::Wasm::isRefType):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmParser.h:
        (JSC::Wasm::Parser<SuccessType>::parseRefType):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseInitExpr):
        * wasm/wasm.json:

2020-11-11  John Wilander  <wilander@apple.com>

        PCM: Change from ad-click-attribution to private-click-measurement (in all forms, including .well-known URL)
        https://bugs.webkit.org/show_bug.cgi?id=218730
        <rdar://problem/71094296>

        Reviewed by Alex Christensen.

        Change to the official name of the proposed standard Private Click Measurement
        https://github.com/privacycg/private-click-measurement.

        This includes a change of the reporting URL from 
        "/.well-known/ad-click-attribution/" to
        "/.well-known/private-click-measurement/".

        * inspector/ConsoleMessage.cpp:
        (Inspector::messageSourceValue):
        * inspector/protocol/Console.json:
        * inspector/protocol/Page.json:
        * runtime/ConsoleClient.cpp:
        (JSC::appendMessagePrefix):
        * runtime/ConsoleTypes.h:

2020-11-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Intl.DateTimeFormat.formatRangeToParts
        https://bugs.webkit.org/show_bug.cgi?id=213822
        <rdar://problem/69328711>

        Reviewed by Ross Kirsling.

        This patch implements Intl.DateTimeFormat.formatRangeToParts. It is already stage-4 (included in the spec).
        The inputs are date interval, and this function generates array of parts of formatted string of date interval.
        Currently, required ICU APIs are draft status. So, for now, we track ABI changes, and use APIs with careful version checks.

        However, currently, OpenSource macOS WebKit is built with specific ICU header (ICU 62 headers). So for now, we disable it
        in OpenSource macOS WebKit build. But we enable it for Apple Internal SDK WebKit build. We can enable it if we include
        multiple ICU header sets and select appropriate one against the linked ICU version. In the other platforms, they are using
        corresponding ICU headers so that we can just enable it.

        There are two interesting implementation topics.

        1. From ICU 67, the signature of udtitvfmt_formatToResult is changed. We need to switch the implementation with fine grained ICU version checks.
        2. udtitvfmt_formatToResult does not have an ability to configure gregorian calendar change date: before that date, the calendar is julian.
           In ECMAScript spec, we need to ignore this gregorian calendar change date, and we should handle all gregorian calendar dates as is even if
           the dates are older than gregorian calendar change date. However, since udtitvfmt_formatToResult does not offer the above ability,
           ICU automatically switches the calendar between gregorian and julian. To fix this issue, ICU 67 introduced udtitvfmt_formatCalendarToResult,
           which can take an explicit calendar for each input date so that we configure gregorian calendar change date. But this only exists after ICU 67.
           In the implementations using ICU 64-66, we just use udtitvfmt_formatToResult.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::UDateIntervalFormatDeleter::operator()):
        (JSC::IntlDateTimeFormat::formatToParts const):
        (JSC::definitelyAfterGregorianCalendarChangeDate):
        (JSC::formattedValueFromDateRange):
        (JSC::IntlDateTimeFormat::formatRange):
        (JSC::IntlDateTimeFormat::formatRangeToParts):
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototype::create):
        (JSC::IntlDateTimeFormatPrototype::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlDateTimeFormatPrototype.h:
        * runtime/OptionsList.h:

2020-11-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] wasm fault trampoline should be C code since it is tagged as CFunctionPtr
        https://bugs.webkit.org/show_bug.cgi?id=218781

        Reviewed by Keith Miller and Mark Lam.

        When returning from signal handler, handler requires that instruction pointer is CFunctionPtrTag-ed.
        So we should set C trampoline instead of JIT trampoline here.
        This patch implements trampoline in LLInt Wasm code so that we can use CFunctionPtrTag.

        * bytecode/BytecodeList.rb:
        * llint/WebAssembly.asm:
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::trapHandler):

2020-11-10  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r269660.
        https://bugs.webkit.org/show_bug.cgi?id=218786

        Crashing in EWS iOS simulator bots

        Reverted changeset:

        "PCM: Change from ad-click-attribution to private-click-
        measurement (in all forms, including .well-known URL)"
        https://bugs.webkit.org/show_bug.cgi?id=218730
        https://trac.webkit.org/changeset/269660

2020-11-10  Ross Kirsling  <ross.kirsling@sony.com>

        Align %TypedArray% behavior with recent spec adjustments
        https://bugs.webkit.org/show_bug.cgi?id=218776

        Reviewed by Yusuke Suzuki.

        The recent spec changes for typed arrays with detached buffers had certain ripple effects,
        namely the following two PRs which will be presented in next week's TC39 meeting.
        Since no controversy is expected, this patch addresses them now, though test262 adjustments are forthcoming.

        1. https://github.com/tc39/ecma262/pull/2210
           It is correct that `ta[i] = n` doesn't throw when `ta` has a detached buffer or `i` is otherwise OOB,
           but by not throwing, Reflect.set(ta, i, n) is obliged to return true.

        2. https://github.com/tc39/ecma262/pull/2221
           Until now, %TypedArray%.prototype.{includes, indexOf, join, lastIndexOf} lacked a rigorous specification;
           in particular, each has a parameter that may detach the buffer upon valueOf or toString, and the expected
           behavior was not made clear. It seems most sensible to do what the corresponding Array methods do upon
           `array.length = 0`: make use of the cached length but don't access indices, such that indexOf/lastIndexOf
           return -1 while includes/join act as if the elements were all `undefined`.

        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::put):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::putByIndex):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncIncludes):
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):

2020-11-10  John Wilander  <wilander@apple.com>

        PCM: Change from ad-click-attribution to private-click-measurement (in all forms, including .well-known URL)
        https://bugs.webkit.org/show_bug.cgi?id=218730
        <rdar://problem/71094296>

        Reviewed by Devin Rousso.

        Change to the official name of the proposed standard Private Click Measurement
        https://github.com/privacycg/private-click-measurement.

        This includes a change of the reporting URL from 
        "/.well-known/ad-click-attribution/" to
        "/.well-known/private-click-measurement/".

        * inspector/ConsoleMessage.cpp:
        (Inspector::messageSourceValue):
        * inspector/protocol/Console.json:
        * inspector/protocol/Page.json:
        * runtime/ConsoleClient.cpp:
        (JSC::appendMessagePrefix):
        * runtime/ConsoleTypes.h:

2020-11-09  Keith Miller  <keith_miller@apple.com>

        Add total counts to sampling profiler dump
        https://bugs.webkit.org/show_bug.cgi?id=218666

        Reviewed by Yusuke Suzuki.

        This is nice for computing the approximate percentage of total time in a function.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::reportTopFunctions):
        (JSC::SamplingProfiler::reportTopBytecodes):

2020-11-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add TimeZone range cache over ICU TimeZone API
        https://bugs.webkit.org/show_bug.cgi?id=218681

        Reviewed by Ross Kirsling.

        icu::TimeZone is more accurate and faster than localtime_r. But still, it is slower than returning cached data!
        We saw 10% regression in JetStream2/date-format-xparb-SP with icu::TimeZone switching.
        In this patch, we put one-depth timezone cache back over icu::TimeZone API, and recover the performance.
        In addition, new version of timezone cache includes "start" side extension (while old one only extends "end" of the range).
        The test covers all cases in the added cache.

        * runtime/JSDateMath.cpp:
        (JSC::DateCache::calculateLocalTimeOffset):
        (JSC::DateCache::localTimeOffset):
        (JSC::DateCache::gregorianDateTimeToMS):
        (JSC::DateCache::msToGregorianDateTime):
        (JSC::DateCache::parseDate):
        (JSC::DateCache::reset):
        (JSC::localTimeOffset): Deleted.
        * runtime/JSDateMath.h:
        (JSC::DateCache::timeZoneCache):
        * runtime/VM.h:
        (JSC::LocalTimeOffsetCache::LocalTimeOffsetCache): Deleted.
        (JSC::LocalTimeOffsetCache::reset): Deleted.

2020-11-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Support @@species in ArrayBuffer / SharedArrayBuffer slice
        https://bugs.webkit.org/show_bug.cgi?id=218697

        Reviewed by Ross Kirsling.

        This patch adds support for @@species in ArrayBuffer/SharedArrayBuffer.prototype.slice.
        We leverage the mechanism similar to Array's @@species handling: adding fast path with watchpoint.
        When we found that some of critical properties (e.g. %Prototype%.constructor, %Constructor%[@@species])
        are modified, watchpoint is fired and we go to the slow path. Until that, we use fast path that is
        basically the same to the code before this patch.

        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::slice const):
        (JSC::ArrayBuffer::sliceWithClampedIndex const):
        (JSC::ArrayBuffer::sliceImpl const): Deleted.
        * runtime/ArrayBuffer.h:
        * runtime/ArrayBufferSharingMode.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::speciesWatchpointIsValid):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::speciesWatchpointIsValid):
        (JSC::arrayBufferSlice):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::tryInstallSpeciesWatchpoint):
        (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
        (JSC::JSGlobalObject::tryInstallArrayBufferSpeciesWatchpoint):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arrayBufferSpeciesWatchpointSet):
        (JSC::JSGlobalObject::arrayBufferPrototype const):
        (JSC::JSGlobalObject::arrayBufferStructure const):
        (JSC::JSGlobalObject::arrayBufferConstructor const):

2020-11-06  Dmitry Bezhetskov  <dbezhetskov@igalia.com>

        [WASM-References] Rename anyref to externref
        https://bugs.webkit.org/show_bug.cgi?id=218331

        Reviewed by Keith Miller.

        * bytecode/BytecodeDumper.cpp:
        (JSC::Wasm::BytecodeDumper::formatConstant const):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::gExternref):
        (JSC::Wasm::AirIRGenerator::tmpForType):
        (JSC::Wasm::AirIRGenerator::emitCCall):
        (JSC::Wasm::AirIRGenerator::moveOpForValueType):
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        (JSC::Wasm::AirIRGenerator::addLocal):
        (JSC::Wasm::AirIRGenerator::addConstant):
        (JSC::Wasm::AirIRGenerator::setGlobal):
        (JSC::Wasm::AirIRGenerator::gAnyref): Deleted.
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addLocal):
        (JSC::Wasm::B3IRGenerator::addTableGet):
        (JSC::Wasm::B3IRGenerator::setGlobal):
        * wasm/WasmCallingConvention.h:
        (JSC::Wasm::WasmCallingConvention::marshallLocation const):
        (JSC::Wasm::JSCallingConvention::marshallLocation const):
        * wasm/WasmFormat.h:
        (JSC::Wasm::isValueType):
        (JSC::Wasm::isSubtype):
        (JSC::Wasm::TableInformation::wasmType const):
        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):
        * wasm/WasmGlobal.cpp:
        (JSC::Wasm::Global::get const):
        (JSC::Wasm::Global::set):
        (JSC::Wasm::Global::visitAggregate):
        * wasm/WasmGlobal.h:
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::Instance):
        (JSC::Wasm::Instance::setGlobal):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::jsNullConstant):
        (JSC::Wasm::LLIntGenerator::callInformationForCaller):
        (JSC::Wasm::LLIntGenerator::callInformationForCallee):
        (JSC::Wasm::LLIntGenerator::addArguments):
        (JSC::Wasm::LLIntGenerator::addLocal):
        (JSC::Wasm::LLIntGenerator::setGlobal):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):
        (JSC::Wasm::setWasmTableElement):
        * wasm/WasmSectionParser.cpp:
        (JSC::Wasm::SectionParser::parseTableHelper):
        * wasm/WasmTable.cpp:
        (JSC::Wasm::Table::tryCreate):
        (JSC::Wasm::Table::set):
        * wasm/WasmTable.h:
        (JSC::Wasm::Table::isExternrefTable const):
        (JSC::Wasm::Table::isAnyrefTable const): Deleted.
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::boxWasmResult):
        * wasm/js/JSWebAssemblyTable.cpp:
        (JSC::JSWebAssemblyTable::set):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * wasm/wasm.json:

2020-11-06  Yusuke Suzuki  <ysuzuki@apple.com>

        Re-enable SharedArrayBuffer for JSC shell and Testers
        https://bugs.webkit.org/show_bug.cgi?id=212069

        Reviewed by Keith Miller.

        This patch revives SharedArrayBuffer and Atomics and aligning them to the latest spec.

        1. SharedArrayBuffer's sort should be done in JS side. C++ sort is not safe for SharedArrayBuffer since the buffer
           can be modified by different threads while sorting.
        2. Atomics.wait should be renamed to Atomics.notify.
        3. Atomics operation should be VarArgs in DFG because DFGSSALoweringPhase assumes that they are VarArgs and they can
           have another arg for CheckInBounds dependency.
        4. For test262, JSC shell should support "--can-block-is-false" flag. If it is true, the main thread's [[CanBlock]] becomes false.
           This means that `Atomics.wait` cannot be used.

        * builtins/BuiltinNames.h:
        * builtins/TypedArrayPrototype.js:
        (sort):
        * bytecode/LinkTimeConstant.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::mustGenerate const):
        (JSC::DFG::Node::hasVarArgs const):
        (JSC::DFG::Node::mustGenerate): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGSSALoweringPhase.cpp:
        (JSC::DFG::SSALoweringPhase::handleNode):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsIsLockFree):
        * jsc.cpp:
        (printUsageStatement):
        (CommandLine::parseArguments):
        (runJSC):
        * runtime/AtomicsObject.cpp:
        (JSC::AtomicsObject::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * runtime/CommonIdentifiers.h:
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::arrayBufferSlice):
        (JSC::arrayBufferByteLength):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::toIntegerOrInfinity const):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncReverse):
        (JSC::genericTypedArrayViewPrivateFuncSort):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSTypedArrayViewPrototype.h:
        * runtime/OptionsList.h:
        * runtime/SimpleTypedArrayController.cpp:
        (JSC::SimpleTypedArrayController::SimpleTypedArrayController):
        (JSC::SimpleTypedArrayController::isAtomicsWaitAllowedOnCurrentThread):
        * runtime/SimpleTypedArrayController.h:
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::initializeCommonStrings):
        (JSC::SmallStrings::visitStrongReferences):
        * runtime/SmallStrings.h:
        (JSC::SmallStrings::notEqualString const):
        (JSC::SmallStrings::timedOutString const):
        (JSC::SmallStrings::okString const):

2020-11-06  Mark Lam  <mark.lam@apple.com>

        Use address diversified PAC to ensure the integrity of opcode maps.
        https://bugs.webkit.org/show_bug.cgi?id=218646

        Reviewed by Yusuke Suzuki.

        One reason for doing this is because space in the JSCConfig is limited, and may
        hurt RAMification scores if we need to expand it when adding new opcodes.
        By putting the opcode maps in dirty global memory, we still use less memory
        because dirty global memory does not incur internal fragmentation like the
        JSCConfig does.

        In this patch, we move g_jscConfig.llint.opcodeMap, g_jscConfig.llint.opcodeMapWide16,
        and g_jscConfig.llint.opcodeMapWide32 back to global arrays g_opcodeMap, g_opcodeMapWide16,
        and g_opcodeMapWide32.

        * interpreter/InterpreterInlines.h:
        (JSC::Interpreter::getOpcodeID):
        - Since this function is only used debugging purposes during development, and is
          currently unused, we can just strip the PAC bits from the opcode when computing
          the opcodeID.  The alternative to doing this requires that we know how the
          Opcode is signed by the client.  Since this function is currently unused, we
          have no clients to study / fix up for now.

        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        - Changed an ASSERT for llint_throw_from_slow_path_trampoline to static_assert,
          and add a second one as well for wasm_throw_from_slow_path_trampoline.
        - Moved the signing of the Opcode pointers into llint_entry() and wasm_entry()
          instead.  Now, non-ARM64E ports don't need to execute this no-op assignment loop
          (assuming it wasn't already elided by the compiler).

        * llint/LLIntData.h:
        (JSC::LLInt::opcodeMap):
        (JSC::LLInt::opcodeMapWide16):
        (JSC::LLInt::opcodeMapWide32):
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide16):
        (JSC::LLInt::getOpcodeWide32):
        - Change getOpcode(), getOpcodeWide16(), and getOpcodeWide32() to return a reference
          to the entry in the corresponding opcode map.  This is needed because we need to
          be able to compute the address of the Opcode entry in order to retag the Opcode.

        (JSC::LLInt::getCodePtrImpl):
        (JSC::LLInt::getCodePtr):
        (JSC::LLInt::getWide16CodePtr):
        (JSC::LLInt::getWide32CodePtr):

        * llint/LowLevelInterpreter.asm:
        * llint/WebAssembly.asm:
        - Changed the bytecode dispatch `jmp`s to use address diversification when
          authenticating the Opcode pointer.
        - Changed llint_entry and wasm_entry to also tag the Opcode pointers for ARM64E.
        - Changed llint_entry and wasm_entry to validate that they are only called during
          system initialization.

        * offlineasm/arm64.rb:
        - Optimize `leap` code generation to elide an add instruction if it's only adding
          0 to a global address.

        * offlineasm/arm64e.rb:
        * offlineasm/ast.rb:
        * offlineasm/instructions.rb:
        - Added support for jmp or call using address diversified pointers.
        - Added a tagCodePtr instruction that also supports signing address diversified pointers.

        * runtime/JSCConfig.h:
        * runtime/JSCPtrTag.h:
        (JSC::untagAddressDiversifiedCodePtr):
        - Added untagAddressDiversifiedCodePtr() so that we can retag the Opcode pointers.

2020-11-05  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early November 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=218628

        Unreviewed non-unified build fix.

        * llint/LLIntSlowPaths.cpp:

2020-11-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for ARM64E
        https://bugs.webkit.org/show_bug.cgi?id=218587

        * llint/LLIntData.cpp:

2020-11-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Apply JITCage to CSSJIT
        https://bugs.webkit.org/show_bug.cgi?id=218587

        Reviewed by Mark Lam.

        * llint/LLIntData.cpp:
        * llint/LowLevelInterpreter.asm:
        * runtime/JSCPtrTag.h:
        * yarr/YarrJIT.cpp:

2020-11-04  David Kilzer  <ddkilzer@apple.com>

        WebKit should remove unused debug variant support
        <https://webkit.org/b/218315>
        <rdar://problem/70785369>

        Reviewed by Darin Adler.

        Remove support for building the debug variant since it is
        currently unused. We now set default values for the
        DEAD_CODE_STRIPPING, DEBUG_DEFINES, GCC_OPTIMIZATION_LEVEL and
        STRIP_INSTALLED_PRODUCT variables.

        Also move these values out of the Xcode project into
        Base.xcconfig files using the [config=Debug] specifier so that
        these overrides are next to the definitions.

        * Configurations/Base.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-11-04  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix ARM64 only crash (ARM64E works) after JIT Cage
        https://bugs.webkit.org/show_bug.cgi?id=218143

        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::execute):

2020-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for ARM64E debug build
        https://bugs.webkit.org/show_bug.cgi?id=218143

        * runtime/JSCPtrTag.cpp:
        (JSC::tagForPtr):

2020-11-03  Saam Barati  <sbarati@apple.com>

        Add back the removed assertion from r269338 and add a test
        https://bugs.webkit.org/show_bug.cgi?id=218543

        Reviewed by Filip Pizlo.

        The assertion from r269338 was wrong in JSLock::willReleaseLock because
        of our use of DropAllLocks. However, it is correct inside the topmost ~VMEntryScope.

        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::~VMEntryScope):

2020-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add JITCage support
        https://bugs.webkit.org/show_bug.cgi?id=218143

        Reviewed by Saam Barati.

        Towards software verified JIT, this patch adds partial JIT-Caging support which cages JIT call / jumps in a certain format.
        This is currently only enabled when internal SDK is enabled. And it is only enabled in ARM64E for now.
        Currently, this patch does not have CSS JIT support. Subsequent patch will add it.
        We ensured that JS2 and RAMification are neutral.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        (JSC::JITOperationList::populatePointersInJavaScriptCoreForLLInt):
        * assembler/JITOperationList.h:
        (JSC::JITOperationList::map const):
        (JSC::JITOperationList::assertIsHostFunction):
        (JSC::JITOperationList::assertIsJITOperation):
        (JSC::JITOperationList::contains const): Deleted.
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::farJump):
        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::callTrustedPtr):
        (JSC::MacroAssemblerARM64E::call):
        (JSC::MacroAssemblerARM64E::callRegister):
        (JSC::MacroAssemblerARM64E::farJumpRegister):
        (JSC::MacroAssemblerARM64E::farJump):
        (JSC::MacroAssemblerARM64E::ret):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::farJump):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::farJump):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::farJump):
        * bytecode/BytecodeList.rb:
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::callerReturnPC):
        (JSC::DFG::adjustAndJumpToTarget):
        * dfg/DFGOSRExitCompilerCommon.h:
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::setJITEnabled):
        (JSC::initializeJITPageReservation):
        * jit/GPRInfo.h:
        * jit/PolymorphicCallStubRoutine.cpp:
        (JSC::PolymorphicCallNode::unlink):
        * jit/ThunkGenerators.cpp:
        (JSC::emitPointerValidation):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        * llint/LLIntData.h:
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide16):
        (JSC::LLInt::getOpcodeWide32):
        (JSC::LLInt::getCodePtr):
        (JSC::LLInt::getWide16CodePtr):
        (JSC::LLInt::getWide32CodePtr):
        (JSC::LLInt::getCodeFunctionPtr):
        (JSC::LLInt::getWide16CodeFunctionPtr):
        (JSC::LLInt::getWide32CodeFunctionPtr):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::entrypointTrampoline):
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        (JSC::LLInt::getHostCallReturnValueEntrypoint):
        (JSC::LLInt::fuzzerReturnEarlyFromLoopHintEntrypoint):
        (JSC::LLInt::genericReturnPointEntrypoint):
        * llint/LLIntEntrypoint.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::commonCallEval):
        (JSC::LLInt::dispatchToNextInstruction):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::generateThunkWithJumpToPrologue):
        (JSC::LLInt::generateThunkWithJumpToLLIntReturnPoint):
        (JSC::LLInt::functionForCallEntryThunk):
        (JSC::LLInt::functionForConstructEntryThunk):
        (JSC::LLInt::functionForCallArityCheckThunk):
        (JSC::LLInt::functionForConstructArityCheckThunk):
        (JSC::LLInt::evalEntryThunk):
        (JSC::LLInt::programEntryThunk):
        (JSC::LLInt::moduleProgramEntryThunk):
        (JSC::LLInt::wasmFunctionEntryThunk):
        (JSC::LLInt::handleCatchThunk):
        (JSC::LLInt::genericReturnPointThunk):
        (JSC::LLInt::fuzzerReturnEarlyFromLoopHintThunk):
        (JSC::LLInt::createJSGateThunk):
        (JSC::LLInt::createWasmGateThunk):
        (JSC::LLInt::createTailCallGate):
        (JSC::LLInt::loopOSREntryGateThunk):
        (JSC::LLInt::entryOSREntryGateThunk):
        (JSC::LLInt::wasmOSREntryGateThunk):
        (JSC::LLInt::exceptionHandlerGateThunk):
        (JSC::LLInt::returnFromLLIntGateThunk):
        (JSC::LLInt::tagGateThunk):
        (JSC::LLInt::untagGateThunk):
        (JSC::LLInt::jitCagePtrThunk):
        (JSC::LLInt::normalOSRExitTrampolineThunk):
        (JSC::LLInt::checkpointOSRExitTrampolineThunk):
        (JSC::LLInt::checkpointOSRExitFromInlinedCallTrampolineThunk):
        (JSC::LLInt::returnLocationThunk):
        * llint/LLIntThunks.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * llint/WebAssembly.asm:
        * offlineasm/arm64.rb:
        * offlineasm/mips.rb:
        * runtime/Gate.h: Added.
        * runtime/JSCConfig.h:
        * runtime/JSCPtrTag.cpp:
        (JSC::tagForPtr):
        (JSC::callerType):
        (JSC::calleeType):
        * runtime/JSCPtrTag.h:
        (JSC::tagJSCCodePtrImpl):
        (JSC::untagJSCCodePtrImpl):
        (JSC::tagCodePtrWithStackPointerForJITCall):
        (JSC::untagCodePtrWithStackPointerForJITCall):
        * runtime/MatchResult.h:
        (JSC::MatchResult::MatchResult):
        * runtime/Options.cpp:
        (JSC::disableAllJITOptions):
        (JSC::canUseJITCage):
        * runtime/OptionsList.h:
        * wasm/WasmSlowPaths.cpp:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::execute):

2020-11-03  Geoffrey Garen  <ggaren@apple.com>

        Drop most uses of the phrase 'neuter' from the tree
        https://bugs.webkit.org/show_bug.cgi?id=218536

        Reviewed by Tim Horton.

        In ArrayBuffer use cases, the spec has gone with "detached".

        In other cases, I picked something.

        * JavaScriptCore.order:
        * builtins/ArrayIteratorPrototype.js:
        (next):
        * builtins/BuiltinNames.h:
        * builtins/TypedArrayPrototype.js:
        (fill):
        (globalPrivate.typedArrayElementCompare):
        * bytecode/LinkTimeConstant.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDesiredWatchpoints.cpp:
        (JSC::DFG::ArrayBufferViewWatchpointAdaptor::add):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckDetached):
        (JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsDetachedIfOutOfBounds):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileCheckNeutered): Deleted.
        (JSC::DFG::SpeculativeJIT::jumpForTypedArrayIsNeuteredIfOutOfBounds): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantStructureChecks):
        (JSC::DFG::TypeCheckHoistingPhase::identifyRedundantArrayChecks):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckDetached):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotDetached):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckNeutered): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::speculateTypedArrayIsNotNeutered): Deleted.
        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBufferContents::tryAllocate):
        (JSC::ArrayBuffer::transferTo):
        (JSC::ArrayBuffer::detach):
        (JSC::ArrayBuffer::notifyDetaching):
        (JSC::ArrayBuffer::neuter): Deleted.
        (JSC::ArrayBuffer::notifyNeutering): Deleted.
        * runtime/ArrayBuffer.h:
        (JSC::ArrayBuffer::isDetached):
        (JSC::ArrayBuffer::detachingWatchpointSet):
        (JSC::ArrayBuffer::isNeutered): Deleted.
        (JSC::ArrayBuffer::neuteringWatchpointSet): Deleted.
        * runtime/ArrayBufferView.cpp:
        (JSC::ArrayBufferView::ArrayBufferView):
        (JSC::ArrayBufferView::~ArrayBufferView):
        (JSC::ArrayBufferView::setDetachable):
        (JSC::ArrayBufferView::setNeuterable): Deleted.
        * runtime/ArrayBufferView.h:
        (JSC::ArrayBufferView::isDetached const):
        (JSC::ArrayBufferView::possiblySharedBuffer const):
        (JSC::ArrayBufferView::isShared const):
        (JSC::ArrayBufferView::baseAddress const):
        (JSC::ArrayBufferView::byteOffset const):
        (JSC::ArrayBufferView::isDetachable const):
        (JSC::ArrayBufferView::isNeutered const): Deleted.
        (JSC::ArrayBufferView::isNeuterable const): Deleted.
        * runtime/GenericTypedArrayView.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::detach):
        (JSC::JSArrayBufferView::neuter): Deleted.
        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::isDetached):
        (JSC::JSArrayBufferView::isNeutered): Deleted.
        * runtime/JSDataView.cpp:
        (JSC::JSDataView::create):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::setData):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::setWithSpecificType):
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
        (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::speciesConstruct):
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncCopyWithin):
        (JSC::genericTypedArrayViewProtoFuncIncludes):
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
        (JSC::genericTypedArrayViewProtoFuncReverse):
        (JSC::genericTypedArrayViewPrivateFuncSort):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::createTypedArrayIteratorObject):
        * runtime/JSTypedArrayViewPrototype.h:
        * wasm/js/JSWebAssemblyHelpers.h:
        (JSC::getWasmBufferFromValue):
        * wasm/js/JSWebAssemblyMemory.cpp:
        (JSC::JSWebAssemblyMemory::growSuccessCallback):

2020-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Obtain default timezone ID from cached icu::TimeZone
        https://bugs.webkit.org/show_bug.cgi?id=218531
        <rdar://problem/64265880>

        Reviewed by Ross Kirsling.

        ICU internally caches icu::TimeZone (icu::TimeZone::createDefault), and it is not updated even if system timezone is changed.
        As a result, we will see wrong timezone in Intl.DateTimeFormat when system timezone is changed.
        We have a mechanism that clears TimeZone cache for JS Date. However, this mechanism is not used for Intl.DateTimeFormat.

        This patch retrieves timezone ID from cached icu::TimeZone in VM::dateCache. So system's timezone change can be effective for
        Intl.DateTimeFormat, and timezone becomes consistent between JS Date and Intl.DateTimeFormat.

        Unfortunately, we need to use C++ APIs since we do not have a way to get timezone ID from icu::TimeZone.
        Once https://unicode-org.atlassian.net/browse/ICU-21372 is fixed, we can switch to C APIs.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::isUTCEquivalent): Deleted.
        (JSC::defaultTimeZone): Deleted.
        * runtime/JSDateMath.cpp:
        (JSC::DateCache::defaultTimeZone):
        * runtime/JSDateMath.h:
        (JSC::isUTCEquivalent):

2020-11-03  Saam Barati  <sbarati@apple.com>

        Don't assert there is no checkpoint side state when dropping the JSLock
        https://bugs.webkit.org/show_bug.cgi?id=218537

        Reviewed by Filip Pizlo.

        You may have multiple OSR exit sidestate data on the stack, and then call into
        API code, which might DropAllLocks. Hence, this assert is wrong.
        
        Working on a test. Will land in a followup.

        * runtime/JSLock.cpp:
        (JSC::JSLock::willReleaseLock):

2020-11-03  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION (r254038): Simple.com money transfer UI is very laggy (multiple seconds per keypress)
        https://bugs.webkit.org/show_bug.cgi?id=218348

        Reviewed by Darin Adler.

        We have depth-1 LocalTimeOffset cache to avoid repeatedly calling `localtime_r`. But this depth-1 cache can be easily missed if
        we parse Dates of multiple years. Instead of increasing depth as a work-around, this patch starts using ICU TimeZone cache.
        This is used in SpiderMonkey and V8 too, and it is the right direction since ICU knows tzdata and can do more sophisticated caching.

        Microbenchmark shows 24x improvement.

                                           ToT                     Patched

        local-date-constructor     2026.8715+-11.2909    ^     85.0022+-1.0548        ^ definitely 23.8449x faster

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/DateConstructor.cpp:
        (JSC::millisecondsFromComponents):
        (JSC::constructDate):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::calculateGregorianDateTime const):
        (JSC::DateInstance::calculateGregorianDateTimeUTC const):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSDateMath.cpp:
        (JSC::OpaqueICUTimeZoneDeleter::operator()):
        (JSC::localTimeOffset):
        (JSC::DateCache::gregorianDateTimeToMS):
        (JSC::DateCache::msToGregorianDateTime):
        (JSC::DateCache::parseDate):
        (JSC::DateCache::cachedDateInstanceData):
        (JSC::DateCache::timeZoneCacheSlow):
        (JSC::DateCache::reset):
        (JSC::gregorianDateTimeToMS): Deleted.
        (JSC::msToGregorianDateTime): Deleted.
        (JSC::parseDate): Deleted.
        * runtime/JSDateMath.h:
        (JSC::DateCache::timeZoneCache):
        * runtime/VM.cpp:
        (JSC::VM::resetDateCache): Deleted.
        * runtime/VM.h:
        (JSC::VM::resetDateCache):
        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::VMEntryScope):

2020-11-03  Keith Rollin  <krollin@apple.com>

        Extend check-for-inappropriate-files-in-framework to WebKitLegacy and JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=218272
        <rdar://problem/70748116>

        Reviewed by Simon Fraser.

        Bug 218268 reports that some *.txt files got included in WebKitLegacy.
        To help protect against this happening in the future, extend
        check-for-inappropriate-files-in-framework to check for *.txt files,
        and apply the script to WebKitLegacy and JavaScriptCore in addition to
        WebCore and WebKit.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-11-03  Don Olmstead  <don.olmstead@sony.com>

        [CMake] Add remote inspector platforms
        https://bugs.webkit.org/show_bug.cgi?id=218451

        Reviewed by Michael Catanzaro.

        Add a CMake definition for each of the three remote inspector server backends to
        remove duplication between the ports. Modify the port's CMake files to use the
        shared definitions.

        * PlatformFTW.cmake:
        * PlatformGTK.cmake:
        * PlatformJSCOnly.cmake:
        * PlatformPlayStation.cmake:
        * PlatformWPE.cmake:
        * PlatformWin.cmake:
        * inspector/remote/Cocoa.cmake: Added.
        * inspector/remote/GLib.cmake: Added.
        * inspector/remote/Socket.cmake: Added.
        * inspector/remote/SourcesCocoa.txt: Copied from Source/JavaScriptCore/SourcesWPE.txt.
        * inspector/remote/SourcesGLib.txt: Renamed from Source/JavaScriptCore/SourcesGTK.txt.
        * inspector/remote/SourcesSocket.txt: Renamed from Source/JavaScriptCore/SourcesWPE.txt.

2020-11-02  Xan Lopez  <xan@igalia.com>

        [JSC] Remove compiler warning in LLIntData.cpp
        https://bugs.webkit.org/show_bug.cgi?id=218443

        Reviewed by Mark Lam.

        Fix compiler warning by casting a scoped enum to its underlying
        type. Not allowing implicit type conversions is the whole point of
        scoped enums.

        * interpreter/CallFrame.h: remove underlying type specifier, since
        we are using the default anyway ('int').
        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions): cast the scoped enum to its
        underlying type.

2020-10-29  Jérôme Decoodt  <jdecoodt@apple.com>

        JavaScriptCore should support multiple build variants
        <https://webkit.org/b/218347>
        <rdar://problem/70786057>

        Reviewed by Keith Miller.

        Update JavaScriptCore to handle BUILD_VARIANTS properly by
        passing the value to build phase scripts and handling all
        variants set during the build. For engineering builds,
        BUILD_VARIANTS=normal.

        * CMakeLists.txt:
        - Update to pass equivalent ${BUILD_VARIANTS} for non-Apple
          platforms to asm.rb and generate_offset_extractor.rb.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        (LLInt Offsets | Generate Derived Sources):
        (Offline Assembler | Offline Assemble):
        - Update build phase script to pass "${BUILD_VARIANTS}" as an
          argument to scripts.

        * offlineasm/asm.rb:
        - Parse BUILD_VARIANTS argument to pass to
          offsetsAndConfigurationIndexForVariants().
        * offlineasm/generate_offset_extractor.rb:
        - Parse BUILD_VARIANTS argument to pass to
          configurationIndicesForVariants().

        * offlineasm/offsets.rb:
        (offsetsAndConfigurationIndex):
        - Update argument list in comment block.
        (offsetsAndConfigurationIndexForVariants): Add.
        - Invoke offsetsAndConfigurationIndex() for each build variant.
        (configurationIndices):
        - Update argument list in comment block.
        (configurationIndicesForVariants): Add.
        - Invoke configurationIndices() for each build variant.

2020-10-28  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo][PlayStation] Add handling for accept failure case
        https://bugs.webkit.org/show_bug.cgi?id=217353

        Reviewed by Alex Christensen.

        It is rare to happen, but listening socket can be invalid state (i.e. cable disconnection, interface error),
        and accept() will be called because of the poll's false report. In that situation, it is required to rebuild
        the listening socket from the scratch. The failure of accept is the good place to capture this situation.

        This patch moves listening duty into Listener internal calss and it is possible to make the invalid state
        while maintained by SocketEndpoint. Also in case of failure continues, the retry will be gradually increasing
        the intervals.

        * inspector/remote/socket/RemoteInspectorServer.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::pollingTimeout):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::disconnect):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:

2020-10-28  Saam Barati  <sbarati@apple.com>

        Better cache our serialization of the outer TDZ environment when creating FunctionExecutables during bytecode generation
        https://bugs.webkit.org/show_bug.cgi?id=199866
        <rdar://problem/53333108>

        Reviewed by Tadeu Zagallo.

        This patch removes performance pathologies regarding programs with
        many variables under TDZ (let/const). We had an algorithm for caching
        the results of gathering all variables under TDZ, but that algorithm
        wasn't nearly aggressive enough in its caching. This lead us to worst
        case quadratic runtime, which could happens in practice for large functions.
        
        There are a few fixes here:
        - Instead of flattening the entire TDZ stack, and caching that result,
        we now cache each stack entry individually. So as you push/pop to the
        TDZ environment stack, we no longer invalidate everything. Instead, we
        will just need to cache the newly pushed entry. We also no longer invalidate
        the cache for lifting a TDZ check. The compromise here is we may emit
        more runtime TDZ checks for closure variables. This is better than N^2
        bytecode compile time perf, since a well predicted branch for a TDZ
        check is essentially free.
        - We no longer transform the CompactTDZEnvironment (formerly CompactVariableEnvironment)
        from a Vector into a HashSet each time we generate code for an inner function. Instead,
        CompactTDZEnvironment can be in two modes: compact and inflated. It starts life off in
        compact mode (a vector), and will turn into an inflated mode if it's ever needed. Once
        inflated, it'll stay this way until it's destructed. This improves our algorithm from being 
        O(EnvSize * NumFunctions) to O(EnvSize) at the cost of using more space in a HashTable versus a 
        Vector. In the future, we could consider just binary searching through this Vector, and never using
        a hash table.

        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        (JSC::UnlinkedFunctionExecutable::UnlinkedFunctionExecutable):
        * bytecode/UnlinkedFunctionExecutable.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::popLexicalScopeInternal):
        (JSC::BytecodeGenerator::needsTDZCheck):
        (JSC::BytecodeGenerator::liftTDZCheckIfPossible):
        (JSC::BytecodeGenerator::pushTDZVariables):
        (JSC::BytecodeGenerator::getVariablesUnderTDZ):
        (JSC::BytecodeGenerator::preserveTDZStack):
        (JSC::BytecodeGenerator::restoreTDZStack):
        (JSC::BytecodeGenerator::emitNewInstanceFieldInitializerFunction):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        * parser/Parser.h:
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        * parser/VariableEnvironment.cpp:
        (JSC::CompactTDZEnvironment::sortCompact):
        (JSC::CompactTDZEnvironment::CompactTDZEnvironment):
        (JSC::CompactTDZEnvironment::operator== const):
        (JSC::CompactTDZEnvironment::toTDZEnvironmentSlow const):
        (JSC::CompactTDZEnvironmentMap::get):
        (JSC::CompactTDZEnvironmentMap::Handle::~Handle):
        (JSC::CompactTDZEnvironmentMap::Handle::Handle):
        (JSC::CompactVariableEnvironment::CompactVariableEnvironment): Deleted.
        (JSC::CompactVariableEnvironment::operator== const): Deleted.
        (JSC::CompactVariableEnvironment::toVariableEnvironment const): Deleted.
        (JSC::CompactVariableMap::get): Deleted.
        (JSC::CompactVariableMap::Handle::~Handle): Deleted.
        (JSC::CompactVariableMap::Handle::Handle): Deleted.
        * parser/VariableEnvironment.h:
        (JSC::CompactTDZEnvironment::toTDZEnvironment const):
        (JSC::CompactTDZEnvironmentKey::CompactTDZEnvironmentKey):
        (JSC::CompactTDZEnvironmentKey::hash):
        (JSC::CompactTDZEnvironmentKey::equal):
        (JSC::CompactTDZEnvironmentKey::makeDeletedValue):
        (JSC::CompactTDZEnvironmentKey::isHashTableDeletedValue const):
        (JSC::CompactTDZEnvironmentKey::environment):
        (WTF::HashTraits<JSC::CompactTDZEnvironmentKey>::emptyValue):
        (WTF::HashTraits<JSC::CompactTDZEnvironmentKey>::isEmptyValue):
        (WTF::HashTraits<JSC::CompactTDZEnvironmentKey>::constructDeletedValue):
        (WTF::HashTraits<JSC::CompactTDZEnvironmentKey>::isDeletedValue):
        (JSC::CompactTDZEnvironmentMap::Handle::environment const):
        (JSC::CompactVariableEnvironment::hash const): Deleted.
        (JSC::CompactVariableMapKey::CompactVariableMapKey): Deleted.
        (JSC::CompactVariableMapKey::hash): Deleted.
        (JSC::CompactVariableMapKey::equal): Deleted.
        (JSC::CompactVariableMapKey::makeDeletedValue): Deleted.
        (JSC::CompactVariableMapKey::isHashTableDeletedValue const): Deleted.
        (JSC::CompactVariableMapKey::isHashTableEmptyValue const): Deleted.
        (JSC::CompactVariableMapKey::environment): Deleted.
        (WTF::HashTraits<JSC::CompactVariableMapKey>::emptyValue): Deleted.
        (WTF::HashTraits<JSC::CompactVariableMapKey>::isEmptyValue): Deleted.
        (WTF::HashTraits<JSC::CompactVariableMapKey>::constructDeletedValue): Deleted.
        (WTF::HashTraits<JSC::CompactVariableMapKey>::isDeletedValue): Deleted.
        (JSC::CompactVariableMap::Handle::Handle): Deleted.
        (JSC::CompactVariableMap::Handle::operator=): Deleted.
        (JSC::CompactVariableMap::Handle::operator bool const): Deleted.
        (JSC::CompactVariableMap::Handle::environment const): Deleted.
        (JSC::CompactVariableMap::Handle::swap): Deleted.
        * runtime/CachedTypes.cpp:
        (JSC::Decoder::handleForTDZEnvironment const):
        (JSC::Decoder::setHandleForTDZEnvironment):
        (JSC::CachedCompactTDZEnvironment::encode):
        (JSC::CachedCompactTDZEnvironment::decode const):
        (JSC::CachedCompactTDZEnvironmentMapHandle::encode):
        (JSC::CachedCompactTDZEnvironmentMapHandle::decode const):
        (JSC::CachedFunctionExecutableRareData::decode const):
        (JSC::Decoder::handleForEnvironment const): Deleted.
        (JSC::Decoder::setHandleForEnvironment): Deleted.
        (JSC::CachedCompactVariableEnvironment::encode): Deleted.
        (JSC::CachedCompactVariableEnvironment::decode const): Deleted.
        (JSC::CachedCompactVariableMapHandle::encode): Deleted.
        (JSC::CachedCompactVariableMapHandle::decode const): Deleted.
        * runtime/CachedTypes.h:
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        (JSC::generateUnlinkedCodeBlock):
        (JSC::generateUnlinkedCodeBlockForDirectEval):
        (JSC::recursivelyGenerateUnlinkedCodeBlockForProgram):
        (JSC::recursivelyGenerateUnlinkedCodeBlockForModuleProgram):
        (JSC::CodeCache::getUnlinkedGlobalCodeBlock):
        * runtime/CodeCache.h:
        * runtime/Completion.cpp:
        (JSC::generateProgramBytecode):
        (JSC::generateModuleBytecode):
        * runtime/DirectEvalExecutable.cpp:
        (JSC::DirectEvalExecutable::create):
        * runtime/DirectEvalExecutable.h:
        * runtime/JSScope.cpp:
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        * runtime/JSScope.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2020-10-28  Robin Morisset  <rmorisset@apple.com>

        DFGIntegerRangeOptimization is wrong for Upsilon (as 'shadow' nodes are not in SSA form)
        https://bugs.webkit.org/show_bug.cgi?id=218073

        Reviewed by Saam Barati.

        In DFGIntegerRangeOptimization, when visiting an Upsilon node, we call setEquivalence, that calls setRelationship.
        But despite its name, this function does not overwrite a pre-existing relationship, it simply replaces it by an over-approximation of the intersection of the old and new relationship (see the filter method).
        Since the old relationship is always (by definition) an over-approximation of this intersection, it will often do nothing at all if it cannot find a closer approximation.
        This is a problem specifically for Upsilon nodes, because several of them can store to the same "shadow node" corresponding to a given Phi, so they are the only case where there can already be a completely different relationship for the same nodes (coming from a different Upsilon).

        The fix is very simple thanks to a suggestion by Phil: we just remove all relationships referring to the shadow node just before executing an Upsilon.
        This is correct since the upsilon effectively kills that shadow node, before making it live again with a different value, and we already aggressively prune the relationshipMaps by liveness.

        * dfg/DFGIntegerRangeOptimizationPhase.cpp:

2020-10-27  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wparentheses warning in OptionsList.h
        https://bugs.webkit.org/show_bug.cgi?id=218242

        Unreviewed, fix warning by adding extra parentheses.

        * runtime/OptionsList.h:

2020-10-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: console command line API should be exposed to breakpoint conditions/actions
        https://bugs.webkit.org/show_bug.cgi?id=218141
        <rdar://problem/70636727>

        Reviewed by Brian Burg.

        * debugger/Debugger.h:
        (JSC::Debugger::Client::scopeExtensionObject): Added.
        * debugger/Debugger.cpp:
        (JSC::Debugger::setClient): Added.
        (JSC::Debugger::evaluateBreakpointCondition):
        (JSC::Debugger::evaluateBreakpointActions):
        Introduce an optional `Debugger::Client` virtual class that can be used to adjust behavior
        in various situations. Right now it is used when evaluating breakpoint conditions/actions
        to get a scope extension object.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::internalEnable):
        (Inspector::InspectorDebuggerAgent::internalDisable):
        (Inspector::InspectorDebuggerAgent::scopeExtensionObject): Added.
        Implement `Debugger::Client` and provide a newly created `CommandLineAPI` instance.

        * inspector/InjectedScript.h:
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::createCommandLineAPIObject const): Added.
        * inspector/InjectedScriptSource.js:
        (let.InjectedScript.prototype.createCommandLineAPIObject): Added.
        (let.InjectedScript.prototype._evaluateOn):
        Expose a way for the C++ to create `CommandLineAPI` instances.

2020-10-15  Tadeu Zagallo  <tzagallo@apple.com>

        Sign MacroAssembler::jumpsToLink
        https://bugs.webkit.org/show_bug.cgi?id=217774
        <rdar://problem/69433058>

        Reviewed by Saam Barati.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::LinkRecord::LinkRecord):
        (JSC::ARM64Assembler::LinkRecord::setFrom):
        (JSC::ARM64Assembler::LinkRecord::to const):
        (JSC::ARM64Assembler::linkJump):
        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2020-10-15  Tadeu Zagallo  <tzagallo@apple.com>

        Validate addresses returned by LinkBuffer::locationOf
        https://bugs.webkit.org/show_bug.cgi?id=217786
        <rdar://problem/69887913>

        Reviewed by Saam Barati.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::locationOf):
        (JSC::LinkBuffer::locationOfNearCall):
        (JSC::LinkBuffer::getLinkerAddress):

2020-10-26  Alex Christensen  <achristensen@webkit.org>

        Inclusive software: Remove instances of "dumb" from the code
        https://bugs.webkit.org/show_bug.cgi?id=217778

        Reviewed by Simon Fraser.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        (JSC::FTL::DFG::LowerDFGToB3::unboxBoolean):
        * heap/SlotVisitor.h:
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitVirtualCall):
        (JSC::AssemblyHelpers::emitDumbVirtualCall): Deleted.
        * jit/AssemblyHelpers.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        * runtime/CachedTypes.cpp:
        * runtime/JSCJSValue.h:
        * runtime/WriteBarrier.h:
        * runtime/WriteBarrierInlines.h:
        (JSC::RawValueTraits<Unknown>>::set):
        (JSC::DumbValueTraits<Unknown>>::set): Deleted.
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/generateWasm.py:
        (opcodeIterator):

2020-10-26  Sam Weinig  <weinig@apple.com>

        JSC special function forward declarations (e.g. JSC_DECLARE_HOST_FUNCTION) that are internal to a cpp file should be declared with static to avoid external linkage
        https://bugs.webkit.org/show_bug.cgi?id=218159

        Reviewed by Darin Adler.

        Add static prefix when declarations are constrained to the cpp file. This should help out the linker
        by using the correct linkage type.

        * runtime/ArrayPrototype.cpp:
        * runtime/AsyncGeneratorFunctionConstructor.cpp:
        * runtime/AtomicsObject.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/DatePrototype.cpp:
        * runtime/InspectorInstrumentationObject.cpp:
        * runtime/JSDataViewPrototype.cpp:
        * runtime/JSONObject.cpp:
        * runtime/MathObject.cpp:
        * runtime/ObjectConstructor.cpp:
        * runtime/RegExpObject.cpp:
        * runtime/StringPrototype.cpp:

2020-10-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [ECMA-402] Implement Intl.ListFormat
        https://bugs.webkit.org/show_bug.cgi?id=209775

        Reviewed by Ross Kirsling.

        This patch implements Intl.ListFormat. Intl.ListFormat requires ulistfmt_openForType.
        But it is available after ICU 67, and it is draft (unstable) API in ICU 67.
        But now, this function is stable in ICU 68 without signature change and no major
        change happened to this API. Thus, we can assume that this API signature won't be changed.
        We specially undef U_HIDE_DRAFT_API for unicode/ulistformatter.h to use this draft (but stable) APIs.

        While macOS / iOS shipping ICU (AppleICU) is ICU 66, AppleICU has ulistfmt_openForType and related APIs
        even in ICU 66. We use these APIs in AppleICU 66 to implement Intl.ListFormat.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDisplayNames.cpp:
        (JSC::IntlDisplayNames::initializeDisplayNames):
        * runtime/IntlListFormat.cpp: Added.
        (JSC::UListFormatterDeleter::operator()):
        (JSC::IntlListFormat::create):
        (JSC::IntlListFormat::createStructure):
        (JSC::IntlListFormat::IntlListFormat):
        (JSC::IntlListFormat::finishCreation):
        (JSC::IntlListFormat::initializeListFormat):
        (JSC::stringListFromIterable):
        (JSC::ListFormatInput::ListFormatInput):
        (JSC::ListFormatInput::size const):
        (JSC::ListFormatInput::stringPointers const):
        (JSC::ListFormatInput::stringLengths const):
        (JSC::IntlListFormat::format const):
        (JSC::IntlListFormat::formatToParts const):
        (JSC::IntlListFormat::resolvedOptions const):
        (JSC::IntlListFormat::styleString):
        (JSC::IntlListFormat::typeString):
        * runtime/IntlListFormat.h: Added.
        * runtime/IntlListFormatConstructor.cpp: Added.
        (JSC::IntlListFormatConstructor::create):
        (JSC::IntlListFormatConstructor::createStructure):
        (JSC::IntlListFormatConstructor::IntlListFormatConstructor):
        (JSC::IntlListFormatConstructor::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlListFormatConstructor.h: Added.
        * runtime/IntlListFormatPrototype.cpp: Added.
        (JSC::IntlListFormatPrototype::create):
        (JSC::IntlListFormatPrototype::createStructure):
        (JSC::IntlListFormatPrototype::IntlListFormatPrototype):
        (JSC::IntlListFormatPrototype::finishCreation):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/IntlListFormatPrototype.h: Added.
        * runtime/IntlObject.cpp:
        (JSC::createListFormatConstructor):
        (JSC::IntlObject::finishCreation):
        * runtime/IntlObject.h:
        (JSC::intlListFormatAvailableLocales):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::listFormatStructure):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2020-10-23  Keith Miller  <keith_miller@apple.com>

        Using WASM function size as the cap for choosing a register allocator causes performance regressions.
        https://bugs.webkit.org/show_bug.cgi?id=217290

        Reviewed by Michael Saboff.

        Previously in https://bugs.webkit.org/show_bug.cgi?id=212105 we
        limited the size of WASM functions we compile with OMG because
        sufficiently large functions caused us to OOM while register
        allocating. The memory growth we saw is because the memory usage
        of graph coloring is O((number of tmps)^2). However, some large
        WASM functions may not have that many tmps by the time we get to
        register allocation. This patch changes our heuristic to instead
        use the total number of tmps right before register allocation
        instead of the WASM function size. The number of tmps is more
        likely to represent the worst case memory usage of register
        allocation. This fixes a performance regression in Safari 14 when running
        https://dos.zone/en/play/https%3A%2F%2Fdoszone-uploads.s3.dualstack.eu-central-1.amazonaws.com%2Foriginal%2F2X%2Fb%2Fb4b5275904d86a4ab8a20917b2b7e34f0df47bf7.jsdos

        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::prepareForGeneration):
        * runtime/OptionsList.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmCompilationMode.cpp:
        (JSC::Wasm::wasmFunctionSizeCanBeOMGCompiled): Deleted.
        * wasm/WasmCompilationMode.h:
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):

2020-10-23  Angelos Oikonomopoulos  <angelos@igalia.com>

        [JSC] Fix argument order for double and/or ops on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=218118

        Reviewed by Adrian Perez de Castro.

        The andDouble and orDouble macro assembler methods for ARMv7
        incorrectly pass the destination register as the last argument,
        whereas the assembler expects the destination to be the first
        argument.

        This fixes a failing testmasm test.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::andDouble):
        (JSC::MacroAssemblerARMv7::orDouble):

2020-10-22  Robin Morisset  <rmorisset@apple.com>

        Use operand names when dumping Bytecode
        https://bugs.webkit.org/show_bug.cgi?id=218084

        Reviewed by Saam Barati.

        For example this would output the following:
          [ 258] put_to_scope       scope:loc7, var:3, value:loc8, getPutInfo:1048576<DoNotThrowIfNotFound|GlobalProperty|Initialization|NotStrictMode>, symbolTableOrScopeDepth:0, offset:0
        instead of
          [ 258] put_to_scope       loc7, 3, loc8, 1048576<DoNotThrowIfNotFound|GlobalProperty|Initialization|NotStrictMode>, 0, 0

        * bytecode/BytecodeDumper.h:
        (JSC::BytecodeDumperBase::dumpOperand):
        * generator/Opcode.rb:

2020-10-21  Caitlin Potter  <caitp@igalia.com>

        [JSC] support op_get_private_name in DFG and FTL
        https://bugs.webkit.org/show_bug.cgi?id=214861

        Reviewed by Filip Pizlo.

        Adds DFG/FTL support for op_get_private_name.

        During DFG bytecode parsing, we will attempt, if deemed possible by
        the information available, to output a GetByOffset operation. If a
        single private field identifier is used in all cases (the common case),
        but there are too many structure variants, a GetPrivateNameById
        operation is emitted instead. Failing that, the GetPrivateName
        operation is produced, which produces a GetByVal IC like in the
        baseline JIT.

        In FTL, GetPrivateNameByID can be reduced to [Multi]GetByOffset in the
        DFGConstantFoldingPhase, or a GetByID IC when lowering to B3.

        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeFromLLInt):
        * bytecode/StructureStubInfo.h:
        (JSC::appropriateOptimizingGetByIdFunction):
        (JSC::appropriateGenericGetByIdFunction):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::simplifyGetByStatus):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::handleGetPrivateNameById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToGetByOffset):
        (JSC::DFG::Node::convertToMultiGetByOffset):
        (JSC::DFG::Node::hasCacheableIdentifier):
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPrivateName):
        (JSC::DFG::SpeculativeJIT::compileGetPrivateNameByVal):
        (JSC::DFG::SpeculativeJIT::compileGetPrivateNameById):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::getPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetPrivateNameById):
        * jit/ICStats.h:
        * jit/JITOperations.cpp:
        (JSC::getPrivateName):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        * jit/JITOperations.h:
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByFunction):
        (JSC::appropriateGetByFunction):
        (JSC::tryCacheGetBy):
        * jit/Repatch.h:
        * runtime/OptionsList.h:

2020-10-20  Saam Barati  <sbarati@apple.com>

        Don't OSR exit to bc#0 for FTL argument type checks during loop OSR entry
        https://bugs.webkit.org/show_bug.cgi?id=217925
        <rdar://problem/70369407>

        Reviewed by Michael Saboff and Tadeu Zagallo.

        When the FTL was emitting type checks for the named arguments of a function,
        it was always emitting these type checks with an exit origin of bc#0. It was
        doing this even if we were an OSR entry compilation! This meant that type
        checks for arguments that failed during loop OSR entry would incorrectly exit
        back to bc#0.
        
        This patch fixes this by having the OSR entry runtime code validate the
        argument types before OSR entering. The current OSR entry compiled code in
        the FTL is designed to only allow exiting after all ExtractOSREntryLocal and
        MovHints have executed, so it is simpler to put the type checks in the runtime
        instead of the compiled code.
        
        This patch also makes it so we do exponential backoff when failing to OSR
        enter. This is needed due to insufficient profiling where we never properly
        profile the type of arguments. Before this, we'd OSR exit in the FTL code
        itself, which does exponential backoff when recompiling. This patch builds
        this same exponential backoff in for when we fail to OSR enter enough times
        to give up on the OSR entry compilation.

        * ftl/FTLForOSREntryJITCode.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):

2020-10-20  Michael Saboff  <msaboff@apple.com>

        [JSC] Update RegExp UCD to version 13.0
        https://bugs.webkit.org/show_bug.cgi?id=217975

        Reviewed by Yusuke Suzuki.

        UCD 13.0 data files and an update to the generated file's copyright.

        * ucd/CaseFolding.txt:
        * ucd/DerivedBinaryProperties.txt:
        * ucd/DerivedCoreProperties.txt:
        * ucd/DerivedNormalizationProps.txt:
        * ucd/PropList.txt:
        * ucd/PropertyAliases.txt:
        * ucd/PropertyValueAliases.txt:
        * ucd/ScriptExtensions.txt:
        * ucd/Scripts.txt:
        * ucd/UnicodeData.txt:
        * ucd/emoji-data.txt:
        * yarr/generateYarrUnicodePropertyTables.py:

2020-10-20  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Rename item() to at() and move it behind a flag
        https://bugs.webkit.org/show_bug.cgi?id=217942

        Reviewed by Yusuke Suzuki.

        {Array, %TypedArray%}.prototype.item is official web-incompatible,
        but it is expected to be renamed to `at` instead of being scrapped entirely:
        https://github.com/tc39/proposal-item-method/issues/34

        This patch performs the renaming, but does so behind a runtime flag since this has yet to achieve consensus.

        * builtins/ArrayPrototype.js:
        (at):
        (item): Deleted.
        * builtins/TypedArrayPrototype.js:
        (at):
        (item): Deleted.
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/OptionsList.h:

2020-10-20  Philippe Normand  <pnormand@igalia.com> and Pavel Feldman <pavel.feldman@gmail.com>

        Web Inspector: Add setScreenSizeOverride API to the Page agent
        https://bugs.webkit.org/show_bug.cgi?id=213242

        Reviewed by Devin Rousso.

        * inspector/protocol/Page.json: Add a new setScreenSizeOverride API in the Page agent.

2020-10-19  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%#sort helper functions should be globalPrivate
        https://bugs.webkit.org/show_bug.cgi?id=217928

        Reviewed by Yusuke Suzuki and Alexey Shvayka.

        Following r267827, this patch ensures that %TypedArray%.prototype.sort's helper functions:
          1. use parameters instead of capturing variables
          2. are converted from local functions to globalPrivate ones

        To this end, also expose Math.min as a link-time constant.

        * builtins/ArrayPrototype.js:
        (globalPrivate.sortMerge):
        (globalPrivate.sortMin): Deleted.
        * builtins/BuiltinNames.h:
        * builtins/TypedArrayPrototype.js:
        (globalPrivate.typedArrayElementCompare): Added.
        (globalPrivate.typedArrayMerge): Added.
        (globalPrivate.typedArrayMergeSort): Added.
        (sort):
        (sort.min): Deleted.
        (sort.merge): Deleted.
        (sort.mergeSort): Deleted.
        * bytecode/LinkTimeConstant.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/MathObject.cpp:
        * runtime/MathObject.h:

2020-10-19  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] %Interface%.prototype.constructor should be defined on [[Set]] receiver
        https://bugs.webkit.org/show_bug.cgi?id=216533

        Reviewed by Darin Adler.

        Before this change, a [[Set]] performed on an %Interface% instance used to overwrite
        %Interface%.prototype.constructor instead of defining own "constructor" property.

        Since using CustomValue is essential for lazy initialization of WebIDL constructors,
        and forwarding [[Set]] with correct receiver would require further diverging
        CustomValue setter signature from CustomAccessor counterpart, this patch makes a
        CustomValue property without a setter to be treated as a data descriptor [1].

        This avoids generating a "constructor" setter for every exposed WebIDL interface and
        making an extra put() dispatch in putInlineSlow(). Changing the semantics is safe
        because there were no setter-less CustomValue properties before this patch.

        [1]: https://tc39.es/ecma262/#sec-ordinarysetwithowndescriptor (step 3.e.ii)

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * runtime/CustomGetterSetter.cpp:
        (JSC::callCustomSetter):
        * runtime/CustomGetterSetter.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive): Add missing exception check.
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putInlineSlow):
        * runtime/Lookup.h:
        (JSC::putEntry):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::customGetter const):
        * runtime/PropertySlot.h:
        * tools/JSDollarVM.cpp:

2020-10-19  Mark Cohen  <m@mpc.sh>

        test262: test/language/expressions/conditional/in-branch-1.js
        https://bugs.webkit.org/show_bug.cgi?id=217879

        Reviewed by Darin Adler.

        The test262 test in question checks that the parser respects the +In
        parameter on the left-hand AssignmentExpression (between `?` and `:`)
        in the ternary operator grammar. The relevant piece of the spec can be
        found here (https://tc39.es/ecma262/#sec-conditional-operator). The
        test checks this by embedding a ternary with left-hand
        AssignmentExpression that contains the `in` keyword in the
        initializing statement of a `for` loop, where `in` would normally be
        disallowed. All this patch does is unconditionally allow the `in`
        keyword inside the left-hand AssignmentExpression of a ternary.

        This also fixes a variable typo in parseForStatement.

        * parser/Parser.cpp:

2020-10-18  David Kilzer  <ddkilzer@apple.com>

        Fix -Wdeprecated-copy warnings in WTF and JavaScriptCore
        <https://webkit.org/b/217855>
        <rdar://problem/67716914>

        Reviewed by Darin Adler.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::LinkRecord::LinkRecord): Add.
        - Implement the copy constructor since the compiler may not
          have implemented it the same way as the copy assignment
          operator.
        (JSC::ARM64Assembler::LinkRecord::operator=):
        - Fix return type of copy assignment operator and simplify it.

2020-10-18  Caio Lima  <ticaiolima@gmail.com>

        [ESNext][JIT] Add support for UntypedUse on PutPrivateName's base operand
        https://bugs.webkit.org/show_bug.cgi?id=217373

        Reviewed by Yusuke Suzuki.

        This patch is adding UntypedUse for `PutPrivateName`'s base operand to
        avoid a OSR when we have a non-cell base.
        Also, it is fixing a bug on private field operations `get_private_name` and
        `put_private_name` to call `ToObject` on base to properly support
        class fields spec text[1][2].

        [1] - https://tc39.es/proposal-class-fields/#sec-getvalue
        [2] - https://tc39.es/proposal-class-fields/#sec-putvalue

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        * jit/JITOperations.cpp:
        (JSC::setPrivateField):
        (JSC::definePrivateField):
        (JSC::JSC_DEFINE_JIT_OPERATION):
        (JSC::getPrivateName):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_private_name):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_private_name):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.cpp:

        Previous implementation was wrongly considering that base was always
        an object, causing segmentation fault when base was not an object.
        We changed this to handle cases when base is not and object, following
        what spec text specifies.

2020-10-17  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for r268640
        https://bugs.webkit.org/show_bug.cgi?id=217883

        It seems I made a late adjustment that test262 was unhappy with; this reverts just that line.

        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):

2020-10-17  Ross Kirsling  <ross.kirsling@sony.com>

        Ensure %TypedArray% essential internal methods adhere to spec
        https://bugs.webkit.org/show_bug.cgi?id=217854

        Reviewed by Yusuke Suzuki.

        This patch addresses https://github.com/tc39/ecma262/pull/2164,
        which aligns detached buffer semantics in typed arrays with web reality.

        In particular:
        - [[HasProperty]] must not throw
        - IntegerIndexedElementGet (i.e. [[GetOwnProperty]] and [[Get]]) must not throw
        - IntegerIndexedElementSet (i.e. [[DefineOwnProperty]] and [[Set]]) must not throw
        - Integer-indexed elements must be [[Configurable]] (to avoid breaking a [[HasProperty]] invariant)
        - [[Delete]] must be overridden to return false for integer-indexed elements (which are *not* deletable)

        This patch furthermore ensures that all of these essential internal methods have a spec-perfect implementation.

        Note that there are a couple of interesting ripple effects here:
        - The fill(), sort(), and set() methods should throw explicitly, but we'd been letting [[Get]] throw instead.
        - Other callback-taking methods should *not* throw anymore; they only did so implicitly via [[Get]] and [[Set]].

        * builtins/TypedArrayPrototype.js:
        (fill):
        (sort):
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewInlines.h:
        (JSC::JSGenericTypedArrayView<Adaptor>::set):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlot):
        (JSC::JSGenericTypedArrayView<Adaptor>::put):
        (JSC::JSGenericTypedArrayView<Adaptor>::defineOwnProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::deleteProperty):
        (JSC::JSGenericTypedArrayView<Adaptor>::getOwnPropertySlotByIndex):
        (JSC::JSGenericTypedArrayView<Adaptor>::deletePropertyByIndex):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::getNonIndexPropertySlot):
        * runtime/JSTypedArrays.cpp:

2020-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r266074): line-based JavaScript breakpoints don't hit after reload
        https://bugs.webkit.org/show_bug.cgi?id=217862

        Reviewed by Timothy Hatcher.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
        Don't clear the list of protocol breakpoints when the global object changes. Protocol
        breakpoints should only be cleared when individually removed or by `Debugger.disable`.

2020-10-16  Saam Barati  <sbarati@apple.com>

        Don't emit OpSpread with a constant as the destination
        https://bugs.webkit.org/show_bug.cgi?id=217800
        <rdar://problem/69492311>

        Reviewed by Yusuke Suzuki.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):

2020-10-16  Michael Catanzaro  <mcatanzaro@gnome.org>

        REGRESSION(r267727): Warning spam from JSC_DECLARE_CUSTOM_GETTER
        https://bugs.webkit.org/show_bug.cgi?id=217585

        Reviewed by Yusuke Suzuki.

        A small number of source files now need to use JSC_DECLARE_CUSTOM_GETTER_WITHOUT_WTF_INTERNAL.

        * b3/testb3_5.cpp:
        * b3/testb3_7.cpp:
        * tools/JSDollarVM.cpp:

2020-10-15  Saam Barati  <sbarati@apple.com>

        Don't assign a bogus register to Load/ForwardVarargs in AvailabilityAnalysis before stack layout
        https://bugs.webkit.org/show_bug.cgi?id=217789
        <rdar://problem/69285703>

        Reviewed by Keith Miller.

        There is code inside AvailabilityAnalysis phase that was assuming the
        Load/ForwardVarargs data was already stack allocated. However, this isn't
        guaranteed to be the case. However, we were doing virtual register math on
        invalid virtual registers, leading to wonky results. The fix here is to
        model it like we do GetStack/PutStack, where we say, before we do stack
        allocation, we just tell availability analysis the flush format, but not
        where it's flushed.
        
        This was causing validation errors when merging these invalid FlushedAts with
        the FlushedAts from GetStack/PutStack.

        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):

2020-10-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r268489): test/built-ins/Object/entries/order-after-define-property.js failing on test262 bots
        https://bugs.webkit.org/show_bug.cgi?id=217738

        Reviewed by Yusuke Suzuki.

        This change fixes an oversight of r268489 that caused Object.entries to
        return a sparse array if its argument contained non-enumerable properties.

        * builtins/ObjectConstructor.js:
        (entries):

2020-10-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use @putByValDirect instead of Array.prototype.@push in built-ins
        https://bugs.webkit.org/show_bug.cgi?id=175432

        Reviewed by Yusuke Suzuki.

        Before this patch, Array.prototype.@push was used to implement List spec type,
        stacks / queues, and in place of CreateDataProperty [1].
        It's undesirably observable since elements are pushed using [[Set]],
        affecting indexed properties on prototypes [2].

        This change introduces @arrayPush() intrinsic to use with lists / stacks / queues.
        @arrayPush() should only be used with JSArray receivers because "length" isn't
        incremented. Unlike Array.prototype.@push, it doesn't grow arrays beyond UINT_MAX,
        which is OK for current use cases. Object.entries microbenchmark is neutral.

        Despite Array.prototype.@shift also performing [[Set]], it's safe to use with
        non-sparse receivers.

        [1]: https://tc39.es/ecma262/#sec-createarrayfromlist (step 4.a)
        [2]: https://tc39.es/ecma262/#sec-array.prototype.push (step 5.a)

        * builtins/ArrayPrototype.js:
        (globalPrivate.sortBucketSort):
        * builtins/ObjectConstructor.js:
        (entries):
        * builtins/RegExpPrototype.js:
        (globalPrivate.matchSlow):
        (Symbol.replace):
        (Symbol.split):
        * builtins/TypedArrayPrototype.js:
        (filter):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_arrayPush):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):

2020-10-14  Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, mid October 2020
        https://bugs.webkit.org/show_bug.cgi?id=217721

        Reviewed by Yusuke Suzuki.

        * API/JSContextRef.cpp:
        * dfg/DFGDoesGCCheck.cpp:
        * llint/LLIntExceptions.cpp:
        * llint/LLIntExceptions.h:
        * llint/LLIntThunks.h:

2020-10-13  Saam Barati  <sbarati@apple.com>

        JSObject::getPropertyNames should have a stack overflow check
        https://bugs.webkit.org/show_bug.cgi?id=217677
        <rdar://problem/69286436>

        Reviewed by Tadeu Zagallo.

        A prototype chain can be long enough where the recursion causes a stack
        overflow. The attached test case uses $vm to mimic such a prototype chain
        by using JSProxy to make a cyclic prototype chain. But the same works by
        making a prototype chain very long, but the test case takes too long to
        run to justify landing. For posterity, the alternate test case is:
        
        ```
        function makeLongProtoChain(length) {
            let object = /foo/;
            for (let i = 0; i < length; ++i) {
                next = /foo/;
                next.__proto__ = object;
                object = next;
            }
            return object;
        }
        
        let o = makeLongProtoChain(30000);
        for (let q in o) {}
        ```

        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):

2020-10-13  Keith Rollin  <krollin@apple.com>

        Remove leftover MACOSX_DEPLOYMENT_TARGET_macosx support
        https://bugs.webkit.org/show_bug.cgi?id=217649
        <rdar://problem/70236877>

        Reviewed by Darin Adler.

        Bug 42796 introduced MACOSX_DEPLOYMENT_TARGET_<PLATFORM> as "support
        for compiling WebKit against iOS SDKs". Support for the iOS part of
        this feature was later removed in several changes, including Bug
        139212, Bug 139463 and Bug 144762. However, vestiges have remained for
        five or six years in the form of MACOSX_DEPLOYMENT_TARGET_macosx. The
        inclusion of the platform in MACOSX_DEPLOYMENT_TARGET is no longer
        needed and can be removed.

        This changes brings most projects in conformance with other projects
        that don't support including the platform in MACOSX_DEPLOYMENT_TARGET,
        including WebEditingTester, gtest, WebKitTestRunner, MiniBrowser, and
        TestWebKitAPI.

        Along the way, remove a couple of left-over references to macOS 10.16,
        and a couple of places where [sdk=macosx*] was still being used.

        With this change, initialization of MACOSX_DEPLOYMENT_TARGET should be
        consistent across all projects, with two exceptions: WebKitLauncher
        (which hardcodes it to 10.12) and libwebrtc's copy of googletest
        (which hardcodes it to 10.4). The reasons for these hard-coded values
        is not apparent, so leave them be.

        * Configurations/DebugRelease.xcconfig:

2020-10-12  Yusuke Suzuki  <ysuzuki@apple.com>

        JIT operations do not need extern "C"
        https://bugs.webkit.org/show_bug.cgi?id=217636

        Reviewed by Saam Barati.

        Since they are directly embedded by JIT code generator (not linked via linker), they do not need to be C linkage.

        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * ftl/FTLOSRExitCompiler.cpp:
        * ftl/FTLOSRExitCompiler.h:
        * ftl/FTLOperations.cpp:
        * ftl/FTLOperations.h:
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:

2020-10-12  Saam Barati  <sbarati@apple.com>

        Array.prototype.sort's sortBucketSort accesses an array in an invalid way that can lead to incorrect results with indexed properties on the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=217634
        <rdar://problem/69489404>

        Reviewed by Yusuke Suzuki.

        Inside one of Array.prototype.sort's builtin helper methods, we are using an
        array as an internal data structure to do some bookkeeping. However, we were
        accessing it in such a way that it was reading properties from the prototype
        chain. The code is written in a way such that it is only correct if it is
        reading self properties (as the prototype chain can be user controlled). The
        fix is to set this bookkeeping array's __proto__ to null, so we don't read
        from the prototype chain.

        * builtins/ArrayPrototype.js:
        (globalPrivate.sortBucketSort):

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        OpToPropertyKey only accepts temporary for destination
        https://bugs.webkit.org/show_bug.cgi?id=217471

        Reviewed by Saam Barati.

        propertyName register can be constant. We should create temporary register if it is necessary for the destination.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue const):

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        The previous workaround turns out to be ineffective because we can't set the value of 
        TARGET_MAC_OS_X_VERSION_MAJOR based on a previous value of itself. Introduce a new 
        variable TARGET_MAC_OS_X_VERSION_MAJOR to determine whether we need to explicitly 
        adjust MAC_OS_X_VERSION_MAJOR to 110000.

        * Configurations/DebugRelease.xcconfig:

2020-10-12  Luming Yin  <luming_yin@apple.com>

        [macOS] Workaround for MAC_OS_X_VERSION_MAJOR incorrectly including minor version when building 
        with Xcode 12 on macOS Big Sur SUs
        https://bugs.webkit.org/show_bug.cgi?id=217602
        rdar://70194453

        Reviewed by Darin Adler.

        Due to a bug in Xcode (rdar://70185899), Xcode 12.0 and Xcode 12.1 Beta incorrectly includes the 
        minor release number in MAC_OS_X_VERSION_MAJOR, which causes Debug and Release builds of WebKit 
        to be misconfigured when building on macOS Big Sur SUs, leading to webpages failing to load.

        To work around the Xcode bug, when the MAC_OS_X_VERSION_MAJOR includes the minor version number, 
        drop the minor version number by explicitly setting TARGET_MAC_OS_X_VERSION_MAJOR to 110000.

        Note: This change should be reverted after <rdar://70185899> is resolved.

        * Configurations/DebugRelease.xcconfig:

2020-10-11  Luming Yin  <luming_yin@apple.com>

        Strip patch version from TARGET_MAC_OS_X_VERSION_MAJOR when building for macOS Big Sur 
        or later
        https://bugs.webkit.org/show_bug.cgi?id=217594
        rdar://70188497

        Reviewed by Darin Adler.

        To ensure successful Mac Catalyst WebKit builds, strip the patch version from 
        TARGET_MAC_OS_X_VERSION_MAJOR by using two `base:`s on MACOSX_DEPLOYMENT_TARGET.

        * Configurations/Base.xcconfig:

2020-10-11  Luming Yin  <luming_yin@apple.com>

        Ignore deployment suffix and identifier when computing major OS version for macOS 
        Big Sur and newer
        https://bugs.webkit.org/show_bug.cgi?id=217584
        rdar://70168426

        Reviewed by Darin Adler.

        Stop using MACOSX_DEPLOYMENT_TARGET:suffix:identifier to compute major OS versions. 
        Only use the deployment target base for macOS Big Sur and newer. Keep the manual 
        definitions for legacy versions of macOS.

        * Configurations/Base.xcconfig:

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, mark missing custom getter and setters
        https://bugs.webkit.org/show_bug.cgi?id=217500

        * tools/JSDollarVM.cpp:

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] arguments.callee should become ThrowTypeError if function has non simple parameter list
        https://bugs.webkit.org/show_bug.cgi?id=217574

        Reviewed by Darin Adler.

        We should set ThrowTypeError in ClonedArguments when the callee is strict mode or callee has non simple parameter list[1].
        We propagate NonSimpleParameterList information from parser and use it when materializing "callee" property of ClonedArguments.

        [1]: https://tc39.es/ecma262/#sec-functiondeclarationinstantiation

        * parser/Nodes.h:
        (JSC::ScopeNode::isStrictMode const):
        (JSC::ScopeNode::usesNonSimpleParameterList const):
        (JSC::ScopeNode::setFeatures): Deleted.
        (JSC::ScopeNode::setUsesArguments): Deleted.
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseInner):
        * parser/ParserModes.h:
        * runtime/ClonedArguments.cpp:
        (JSC::ClonedArguments::getOwnPropertySlot):
        (JSC::ClonedArguments::materializeSpecials):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::usesNonSimpleParameterList const):

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt constructor should be constructible while it always throws an error
        https://bugs.webkit.org/show_bug.cgi?id=217575

        Reviewed by Darin Adler.

        In terms of the spec, BigInt constructor should be a constructor. So we should put constructBigIntConstructor function instead of nullptr.
        But it should always throw a TypeError. Error message looks a bit awkward ("TypeError: function is not a constructor..."), but this looks
        most intuitive to users. Note that V8 and SpiderMonkey throw similar messages ("is not a constructor").

        * runtime/BigIntConstructor.cpp:
        (JSC::BigIntConstructor::BigIntConstructor):
        (JSC::JSC_DEFINE_HOST_FUNCTION):

2020-10-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] LowerCase when LanguageTag checks duplicate variants
        https://bugs.webkit.org/show_bug.cgi?id=217571

        Reviewed by Ross Kirsling.

        Since Unicode LanguageTag is case insensitive, we need to recognize "VARIANT0" and "variant0" are the same language tag variants.
        To achieve that, we perform toASCIILower when computing VariantCode.

        * runtime/IntlObject.cpp:
        (JSC::parseVariantCode):

2020-10-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Assert Operation and HostFunction are in JITOperationsList
        https://bugs.webkit.org/show_bug.cgi?id=217500

        Reviewed by Saam Barati.

        We make JSC PtrTag more restricted. We add the following information for each PtrTag.

            1. What code target is tagged with this PtrTag? Native or JIT.
            2. What uses this PtrTag when invoking code? Native, JIT, or None.

        And we will verify via JIT-caging.

        This patch adds HostFunctionPtrTag and sign host functions with it. Previously, it was signed with JSEntryPtrTag,
        and this is wrong since it is used for JS entry thunks. And we introduce assertion that function is registered in
        JITOperationList when signing function with OperationPtrTag or HostFunctionPtrTag.

        We also annotate all operations in testb3 so that testb3 can work with OperationPtrTag / HostFunctionPtrTag assertions.

        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        * assembler/JITOperationList.h:
        * b3/testb3_1.cpp:
        (main):
        * b3/testb3_5.cpp:
        (JSC_DEFINE_JIT_OPERATION):
        (simpleFunction): Deleted.
        (functionWithHellaArguments): Deleted.
        (functionWithHellaArguments2): Deleted.
        (functionWithHellaArguments3): Deleted.
        (simpleFunctionDouble): Deleted.
        (simpleFunctionFloat): Deleted.
        (functionWithHellaDoubleArguments): Deleted.
        (functionWithHellaFloatArguments): Deleted.
        * b3/testb3_6.cpp:
        (JSC_DEFINE_JIT_OPERATION):
        (interpreterPrint): Deleted.
        * b3/testb3_7.cpp:
        (JSC_DEFINE_JIT_OPERATION):
        (oneFunction): Deleted.
        (noOpFunction): Deleted.
        (functionNineArgs): Deleted.
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        * jit/ThunkGenerators.cpp:
        (JSC::nativeForGenerator):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSCPtrTag.cpp:
        (JSC::tagForPtr):
        (JSC::ptrTagName):
        * runtime/JSCPtrTag.h:
        (JSC::tagJSCCodePtrImpl):
        (JSC::untagJSCCodePtrImpl):
        * runtime/NativeFunction.h:
        (JSC::TaggedNativeFunction::TaggedNativeFunction):
        (JSC::TaggedNativeFunction::operator NativeFunction):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::doOSREntry):

2020-10-09  Keith Miller  <keith_miller@apple.com>

        Enable WeakRefs/FinalizationRegistries by default.
        https://bugs.webkit.org/show_bug.cgi?id=215789

        Reviewed by Yusuke Suzuki.

        * runtime/OptionsList.h:

2020-10-09  Keith Miller  <keith_miller@apple.com>

        Finalizers shouldn't run if events can't fire
        https://bugs.webkit.org/show_bug.cgi?id=214508

        Reviewed by Ryosuke Niwa.

        This patch makes it so the DeferredWorkTimer won't run scheduled
        tasks if those would not have run if they were scheduled in
        WebCore. To do this there is now a concept of a
        ScriptExecutionOwner. The ScriptExecutionOwner is almost always
        the same as the global object of the pending task (referred to as
        the ticket). The only exception to this is if the global object
        is a JSDOMWindowBase, then the ScriptExecutionOwner is the
        Document's JS wrapper. To tell the status of a
        ScriptExecutionOwner, the DeferredWorkTimer calls a virtual
        function on the global object of the ticket, for JSC-only this
        just always returns Running. For WebCore, we ask the
        ScriptExecutionContext associated with the ScriptExecutionOwner.

        * API/JSAPIGlobalObject.cpp:
        * API/JSAPIGlobalObject.mm:
        * jsc.cpp:
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::doWork):
        (JSC::DeferredWorkTimer::addPendingWork):
        (JSC::DeferredWorkTimer::hasDependancyInPendingWork):
        (JSC::DeferredWorkTimer::didResumeScriptExecutionOwner):
        * runtime/DeferredWorkTimer.h:
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::create):
        (JSC::JSFinalizationRegistry::finishCreation):
        * runtime/JSFinalizationRegistry.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::currentScriptExecutionOwner):
        (JSC::JSGlobalObject::scriptExecutionStatus):

2020-10-08  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, reland r268170
        https://bugs.webkit.org/show_bug.cgi?id=217460

        Fixed missing wrong OperationPtrTag use in Repatch.cpp.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::getLinkerAddress):
        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::finalHash const):
        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * assembler/testmasm.cpp:
        (JSC::testProbeModifiesProgramCounter):
        * b3/air/testair.cpp:
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::callWithoutSideEffects):
        (JSC::FTL::Output::operation):
        * ftl/FTLSlowPathCall.cpp:
        (JSC::FTL::SlowPathCallContext::makeCall):
        * jit/JITCode.cpp:
        (JSC::JITCodeWithCodeRef::executableAddressAtOffset):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        (JSC::readPutICCallTarget):
        (JSC::ftlThunkAwareRepatchCall):
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutByID):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        * llint/LLIntPCRanges.h:
        (JSC::LLInt::isLLIntPC):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        * runtime/JSCPtrTag.h:
        * runtime/MachineContext.h:
        (JSC::MachineContext::instructionPointer):
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::finishCreation):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setCustomValue):
        (JSC::PutPropertySlot::setCustomAccessor):
        (JSC::PutPropertySlot::customSetter const):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitCCall):
        * wasm/WasmSlowPaths.cpp:

2020-10-08  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r268170 and r268190.
        https://bugs.webkit.org/show_bug.cgi?id=217502

        Crash on ARM64E exclusively

        Reverted changesets:

        "[JSC] Restrict more ptr-tagging and avoid using
        OperationPtrTag for JIT code"
        https://bugs.webkit.org/show_bug.cgi?id=217460
        https://trac.webkit.org/changeset/268170

        "Unreviewed, build fix for ARM64E"
        https://bugs.webkit.org/show_bug.cgi?id=217460
        https://trac.webkit.org/changeset/268190

2020-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Make it possible to send an arbitrary IPC message from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=217423
        <rdar://problem/69969351>

        Reviewed by Geoffrey Garen.

        Added a helper function to get uint64_t out of BigInt.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::toUint64Heap): Added.
        * runtime/JSBigInt.h:
        (JSC::JSBigInt::toUint64): Added.

2020-10-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Restrict more ptr-tagging and avoid using OperationPtrTag for JIT code
        https://bugs.webkit.org/show_bug.cgi?id=217460

        Reviewed by Saam Barati.

        This patch makes tagging / untagging pointer functions solid by using PtrTag in template parameter.
        Later, we will introduce compile time behavior change for different kind of PtrTag so that we can insert OperationPtrTag validation
        when tagging a function with OperationPtrTag.

        We also found that FTL is tagging JIT code with OperationPtrTag wrongly. We should tag it with JITThunkPtrTag.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::getLinkerAddress):
        * assembler/AssemblerBuffer.h:
        (JSC::ARM64EHash::update):
        (JSC::ARM64EHash::finalHash const):
        * assembler/JITOperationList.cpp:
        (JSC::addPointers):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * assembler/testmasm.cpp:
        (JSC::testProbeModifiesProgramCounter):
        * b3/air/testair.cpp:
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::callWithoutSideEffects):
        (JSC::FTL::Output::operation):
        * ftl/FTLSlowPathCall.cpp:
        (JSC::FTL::SlowPathCallContext::makeCall):
        * jit/JITCode.cpp:
        (JSC::JITCodeWithCodeRef::executableAddressAtOffset):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        (JSC::readPutICCallTarget):
        (JSC::ftlThunkAwareRepatchCall):
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutByID):
        * llint/LLIntData.cpp:
        (JSC::LLInt::initialize):
        * llint/LLIntPCRanges.h:
        (JSC::LLInt::isLLIntPC):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setUpCall):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        * runtime/MachineContext.h:
        (JSC::MachineContext::instructionPointer):
        * runtime/NativeExecutable.cpp:
        (JSC::NativeExecutable::finishCreation):
        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setCustomValue):
        (JSC::PutPropertySlot::setCustomAccessor):
        (JSC::PutPropertySlot::customSetter const):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitCCall):
        * wasm/WasmSlowPaths.cpp:

2020-10-07  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Revert String.prototype.item
        https://bugs.webkit.org/show_bug.cgi?id=217449

        Reviewed by Yusuke Suzuki.

        This patch reverts the String part of r267814, as it has been shown to be web-incompatible:
        https://github.com/tc39/proposal-item-method/issues/31

        Thankfully, this was the inessential part of the proposal; the core parts (Array and %TypedArray%) remain for now.

        * builtins/StringPrototype.js:
        (item): Deleted.
        * runtime/StringPrototype.cpp:

2020-10-07  Keith Rollin  <krollin@apple.com>

        Update post-processing rules for headers to not unnecessarily change timestamps
        https://bugs.webkit.org/show_bug.cgi?id=217371
        <rdar://problem/69992230>

        Reviewed by Darin Adler.

        Under XCBuild, the scripts employed in custom build rules can be
        invoked in innocuous situations. A common example is when the user is
        building from the command-line and they change the `make` output from
        stdout to a file, or vice-versa. Changing the output changes the
        setting of the COLOR_DIAGNOSTICS environment variable, which is enough
        to cause XCBuild to think something is different and that the custom
        build rule needs to be invoked. For the script's part, nothing
        significant has changed, yet it post-processes the header files,
        causing their modification dates to change, causing downstream
        rebuilds to occur.

        Fix this problem by adopting an approach that doesn't modify the
        post-processed header files unless their contents actually change.

        * Scripts/postprocess-header-rule:

2020-10-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] More consistent PtrTagging for code types
        https://bugs.webkit.org/show_bug.cgi?id=217362

        Reviewed by Mark Lam.

        1. Avoid tagging JIT code with OperationPtrTag. OperationPtrTag should be used only for operations (C++ code).
        2. Avoid mixing JIT and C++ code for the same tagged pointers. For exception trampoline, in JIT mode, we should have
           JIT trampoline thunk which goes to LLInt bytecode handler code.

        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::finalizeUnconditionally):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileExceptionHandlers):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileMathIC):
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::compileWithoutLinking):
        (JSC::JIT::link):
        (JSC::JIT::privateCompileExceptionHandlers):
        * jit/JIT.h:
        (JSC::CallRecord::CallRecord):
        * jit/JITCall.cpp:
        (JSC::JIT::compileTailCall):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITExceptions.cpp:
        (JSC::genericUnwind):
        * jit/JITInlines.h:
        (JSC::JIT::emitNakedNearCall):
        (JSC::JIT::emitNakedNearTailCall):
        (JSC::JIT::emitNakedCall): Deleted.
        (JSC::JIT::emitNakedTailCall): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByVal):
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        * jit/SlowPathCall.h:
        (JSC::JITSlowPathCall::call):
        * llint/LLIntData.h:
        (JSC::LLInt::getWide16CodeRef):
        (JSC::LLInt::getWide32CodeRef):
        (JSC::LLInt::getCodeFunctionPtr):
        (JSC::LLInt::getWide16CodeFunctionPtr):
        (JSC::LLInt::getWide32CodeFunctionPtr):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * llint/LLIntExceptions.cpp:
        (JSC::LLInt::callToThrow):
        (JSC::LLInt::handleUncaughtException):
        (JSC::LLInt::catcher):
        * llint/LLIntExceptions.h:
        * llint/LLIntSlowPaths.cpp:
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::functionForCallEntryThunk):
        (JSC::LLInt::functionForConstructEntryThunk):
        (JSC::LLInt::functionForCallArityCheckThunk):
        (JSC::LLInt::functionForConstructArityCheckThunk):
        (JSC::LLInt::evalEntryThunk):
        (JSC::LLInt::programEntryThunk):
        (JSC::LLInt::moduleProgramEntryThunk):
        (JSC::LLInt::wasmFunctionEntryThunk):
        (JSC::LLInt::callToThrowThunk):
        (JSC::LLInt::handleUncaughtExceptionThunk):
        (JSC::LLInt::catcherThunk):
        * llint/LLIntThunks.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::JSC_DEFINE_JIT_OPERATION):

2020-10-05  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%.from must do mapping and putting in lockstep
        https://bugs.webkit.org/show_bug.cgi?id=217349

        Reviewed by Yusuke Suzuki.

        %TypedArray%.from first turns the input iterator into a list to find the size for the resulting typed array,
        then it fills the typed array with the list elements.

        If a map function is provided, however, it must be called during the *second* phase, not the first,
        because if an element throws upon valueOf, that should prevent all further calls of the map function.

        * builtins/TypedArrayConstructor.js:
        (from):

2020-10-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unrevewed, fix crash for ASan debug builds
        https://bugs.webkit.org/show_bug.cgi?id=217261

        Reviewed by Saam Barati.

        This function touches memory region which ASan cannot understand whether this is safe.
        And ASan makes pointer fat so that it will see some null pointers.

        * assembler/JITOperationList.cpp:
        (JSC::addPointers):

2020-10-05  Keith Miller  <keith_miller@apple.com>

        Add JSC option to trigger a hardware breakpoint when debugger expressions are reached.
        https://bugs.webkit.org/show_bug.cgi?id=217334

        Reviewed by Yusuke Suzuki.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::debug):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::defaultCodeGenerationMode const):
        * runtime/OptionsList.h:

2020-10-05  David Kilzer  <ddkilzer@apple.com>

        Build fix: Use JSC_DEFINE_HOST_FUNCTION_WITH_ATTRIBUTES() with SUPPRESS_ASAN
        <rdar://problem/69954783>

        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION_WITH_ATTRIBUTES):
        - Change `SUPPRESS_ASAN JSC_DEFINE_HOST_FUNCTION()` to
          `JSC_DEFINE_HOST_FUNCTION_WITH_ATTRIBUTES(..., SUPPRESS_ASAN, ...)`
          to fix the build.

2020-10-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Introduce JITOperationList to validate JIT-caged pointers
        https://bugs.webkit.org/show_bug.cgi?id=217261

        Reviewed by Saam Barati.

        This patch adds JITOperationList, which manages all the host-function & jit-operation pointers.
        And we can now query whether the given pointer is registered in this table.
        Currently, as a test, we are verifying that host-function is registered in this table when creating NativeExecutable in debug build.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/JITOperationList.cpp: Added.
        (JSC::JITOperationList::initialize):
        (JSC::addPointers):
        (JSC::JITOperationList::populatePointersInJavaScriptCore):
        (JSC::JITOperationList::populatePointersInEmbedder):
        * assembler/JITOperationList.h: Added.
        (JSC::JITOperationList::contains const):
        (JSC::JITOperationList::assertIsHostFunction):
        (JSC::JITOperationList::assertIsJITOperation):
        (JSC::JITOperationList::instance):
        * assembler/MacroAssemblerARM64.cpp:
        * assembler/MacroAssemblerARMv7.cpp:
        * assembler/MacroAssemblerMIPS.cpp:
        * assembler/MacroAssemblerX86Common.cpp:
        * jsc.cpp:
        (jscmain):
        * runtime/InitializeThreading.cpp:
        (JSC::initialize):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSet):
        (JSC::genericTypedArrayViewProtoFuncCopyWithin):
        (JSC::genericTypedArrayViewProtoFuncIncludes):
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncJoin):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):
        (JSC::genericTypedArrayViewProtoGetterFuncBuffer):
        (JSC::genericTypedArrayViewProtoGetterFuncLength):
        (JSC::genericTypedArrayViewProtoGetterFuncByteLength):
        (JSC::genericTypedArrayViewProtoGetterFuncByteOffset):
        (JSC::genericTypedArrayViewProtoFuncReverse):
        (JSC::genericTypedArrayViewPrivateFuncSort):
        (JSC::genericTypedArrayViewProtoFuncSlice):
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate):
        (JSC::JSC_DEFINE_HOST_FUNCTION): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::getHostFunction):

2020-10-02  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Add Array#item to @@unscopables
        https://bugs.webkit.org/show_bug.cgi?id=217243

        Reviewed by Yusuke Suzuki.

        ES2015+ Array methods must be listed in Array.prototype[@@unscopables] per the note here:
        https://tc39.es/ecma262/#sec-array.prototype-@@unscopables

        The Array#item spec doesn't currently make this explicit, but I created an issue to ensure it isn't overlooked:
        https://github.com/tc39/proposal-item-method/issues/30 

        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):

2020-10-02  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed. [GTK] Add missing locale.h header needed for setlocale()

        * jsc.cpp: Add missing locale.h header for the GTK port, which is needed to get the
        definition for setlocale() in scope.

2020-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Masm probe should invoke JIT operation function
        https://bugs.webkit.org/show_bug.cgi?id=217199

        Reviewed by Mark Lam.

        Masm probe function should be invoked via OperationPtrTag since it is invoked from JIT code, and it is native code.
        And we should register probe trampoline as JIT operation.

        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerARMv7.cpp:
        * assembler/MacroAssemblerMIPS.cpp:
        * assembler/MacroAssemblerX86Common.cpp:
        * runtime/JSCPtrTag.h:

2020-10-01  Adrian Perez de Castro <aperez@igalia.com> and Don Olmstead  <don.olmstead@sony.com>

        Non-unified build fixes, early October 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=217165

        Reviewed by Yusuke Suzuki.

        * llint/LLIntEntrypoint.h:
        * llint/LLIntSlowPaths.cpp:

2020-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        stress/put-private-name-invalid-define.js.ftl-eager is getting flaky failure
        https://bugs.webkit.org/show_bug.cgi?id=217164

        Reviewed by Mark Lam.

        JIT operations need to use JITOperationPrologueCallFrameTracer to configure top call frame correctly.
        But putById private field JIT operations miss them or use wrong frame tracer. Since we are not setting top frame correctly,
        exception object creation from this JIT operations can be broken, and leading to stress/put-private-name-invalid-define.js.ftl-eager crash.
        This patch configures top call frame via JITOperationPrologueCallFrameTracer appropriately.

        * jit/JITOperations.cpp:

2020-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Define Array#sort's implementation functions as globalPrivate
        https://bugs.webkit.org/show_bug.cgi?id=217168

        Reviewed by Ross Kirsling.

        Now, these Array#sort's implementation functions are not capturing any heap variables. So we can make them @globalPrivate,
        this avoids function allocations in LLInt / Baseline / DFG in Array#sort.

        * builtins/ArrayPrototype.js:
        (globalPrivate.sortMin):
        (globalPrivate.sortStringComparator):
        (globalPrivate.sortCompact):
        (globalPrivate.sortCommit):
        (globalPrivate.sortMerge):
        (globalPrivate.sortMergeSort):
        (globalPrivate.sortBucketSort):
        (sort):
        (sort.min): Deleted.
        (sort.stringComparator): Deleted.
        (sort.compact): Deleted.
        (sort.commit): Deleted.
        (sort.merge): Deleted.
        (sort.mergeSort): Deleted.
        (sort.bucketSort): Deleted.

2020-10-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not use std::function in setPrivateField and definePrivateField
        https://bugs.webkit.org/show_bug.cgi?id=217167

        Reviewed by Ross Kirsling.

        std::function can potentially allocate an object in heap. We should should just pass lambda with a templatized parameter instead.

        * jit/JITOperations.cpp:
        (JSC::setPrivateField):
        (JSC::definePrivateField):

2020-09-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] We should not tag C function with JIT code related ptr tag
        https://bugs.webkit.org/show_bug.cgi?id=217150

        Reviewed by Mark Lam.

        We are tagging getHostCallReturnValue function with JIT related PtrTag. As a part of JIT-caging effort, we are restricting our
        PtrTag usage more for code types (e.g. JIT code should be tagged with JIT related PtrTag). So, we should not tag getHostCallReturnValue
        with that. This patch implements getHostCallReturnValue in JIT code if JIT is enabled. If not, it is implemented by LLInt.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/BytecodeList.rb:
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Footer::offsetOfVM):
        * heap/PreciseAllocation.h:
        (JSC::PreciseAllocation::offsetOfWeakSet):
        * heap/WeakSet.h:
        (JSC::WeakSet::offsetOfVM):
        * jit/HostCallReturnValue.cpp: Removed.
        * jit/HostCallReturnValue.h: Removed.
        * jit/JITOperations.cpp:
        * jit/JITOperationsMSVC64.cpp: Removed.
        * jit/JITStubsMSVC64.asm:
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::getHostCallReturnValueEntrypoint):
        * llint/LLIntEntrypoint.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::commonCallEval):
        * llint/LLIntThunks.cpp:
        (JSC::LLInt::getHostCallReturnValueThunk):
        * llint/LLIntThunks.h:
        * llint/LowLevelInterpreter.cpp:
        (JSC::CLoop::execute):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSCellInlines.h:
        (JSC::tryAllocateCellHelper):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::offsetOfVM):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::offsetOfEncodedHostCallReturnValue):

2020-09-30  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Implement item method proposal
        https://bugs.webkit.org/show_bug.cgi?id=217115

        Reviewed by Yusuke Suzuki.

        This patch implements {Array, %TypedArray%, String}.prototype.item, which reached Stage 3 at TC39 last week:
        https://github.com/tc39/proposal-item-method/

        This method behaves like the [] operator except:
        - it recognizes negative indices (-1 through -length, without wrapping)
        - it returns undefined *without* calling getters for out-of-bounds indices

        The primary motivation for this is as a layering improvement for Web APIs (see, e.g., NodeList.prototype.item),
        but the primary visible benefit for JavaScript users is negative indexation.

        * builtins/ArrayPrototype.js:
        (item):
        * builtins/StringPrototype.js:
        (item):
        * builtins/TypedArrayPrototype.js:
        (item):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/StringPrototype.cpp:

2020-09-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Common slow paths should be JIT operations
        https://bugs.webkit.org/show_bug.cgi?id=217141

        Reviewed by Saam Barati.

        Unlike LLInt slow paths, common (common means common between LLInt and Baseline) slow paths can be called from baseline JIT code. Thus, they should be JIT operations.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::llint_slow_path_checkpoint_osr_exit_from_inlined_call):
        (JSC::LLInt::llint_slow_path_checkpoint_osr_exit):
        (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call): Deleted.
        (JSC::LLInt::slow_path_checkpoint_osr_exit): Deleted.
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::JSC_DEFINE_COMMON_SLOW_PATH):
        (JSC::iteratorOpenTryFastImpl):
        (JSC::iteratorNextTryFastImpl):
        (JSC::SLOW_PATH_DECL): Deleted.
        (JSC::iterator_open_try_fast): Deleted.
        (JSC::iterator_next_try_fast): Deleted.
        * runtime/CommonSlowPaths.h:

2020-09-30  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation][WinCairo] Enable WebDriver target on PlayStation and client for WinCairo
        https://bugs.webkit.org/show_bug.cgi?id=216908

        Reviewed by Don Olmstead.

        Implement automation session correctly for PlayStation and WinCairo.

        * inspector/remote/RemoteInspector.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::parseTargetListJSON):
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::stopInternal):
        (Inspector::RemoteInspector::requestAutomationSession):
        (Inspector::RemoteInspector::startAutomationSession):

2020-09-30  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r267795.
        https://bugs.webkit.org/show_bug.cgi?id=217135

        Incorrect fix.

        Reverted changeset:

        "REGRESSION(r259582): Build fails on aarch64 Linux with WebKit
        2.30.1 on LLIntOffsetsExtractor.cpp.o"
        https://bugs.webkit.org/show_bug.cgi?id=217079
        https://trac.webkit.org/changeset/267795

2020-09-30  Mike Gorse  <mgorse@suse.com>

        REGRESSION(r259582): Build fails on aarch64 Linux with WebKit 2.30.1 on LLIntOffsetsExtractor.cpp.o
        https://bugs.webkit.org/show_bug.cgi?id=217079

        Reviewed by Michael Catanzaro.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode): DOn't compile in a call to
        dumpJITMemory if JIT is disabled; leads to a build failure.

2020-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Always use OperationPtrTag for all operations and annotate operations in CSS JIT
        https://bugs.webkit.org/show_bug.cgi?id=217117

        Reviewed by Mark Lam.

        For JIT-caging, we would like to annotate all operations consistently with OperationPtrTag.
        This patch replaces B3CCallPtrTag and CSSOperationPtrTag with OperationPtrTag and handle these
        operations as Operation in JIT-caging.

        We also collect and annotate all the operations called in CSS JIT and define them with JSC_DEFINE_JIT_OPERATION.

        * b3/B3LowerMacros.cpp:
        * b3/B3LowerMacrosAfterOptimizations.cpp:
        * b3/B3MathExtras.cpp:
        * b3/B3ReduceLoopStrength.cpp:
        (JSC::B3::ReduceLoopStrength::reduceByteCopyLoopsToMemcpy):
        * b3/B3ReduceStrength.cpp:
        * b3/air/AirCCallSpecial.cpp:
        (JSC::B3::Air::CCallSpecial::generate):
        * b3/testb3_5.cpp:
        (testCallSimple):
        (testCallRare):
        (testCallRareLive):
        (testCallSimplePure):
        (testCallFunctionWithHellaArguments):
        (testCallFunctionWithHellaArguments2):
        (testCallFunctionWithHellaArguments3):
        (testCallSimpleDouble):
        (testCallSimpleFloat):
        (testCallFunctionWithHellaDoubleArguments):
        (testCallFunctionWithHellaFloatArguments):
        (testLinearScanWithCalleeOnStack):
        * b3/testb3_6.cpp:
        (testInterpreter):
        * b3/testb3_7.cpp:
        (testLICMPure):
        (testLICMPureSideExits):
        (testLICMPureWritesPinned):
        (testLICMPureWrites):
        (testLICMReadsLocalState):
        (testLICMReadsPinned):
        (testLICMReads):
        (testLICMPureNotBackwardsDominant):
        (testLICMPureFoiledByChild):
        (testLICMPureNotBackwardsDominantFoiledByChild):
        (testLICMExitsSideways):
        (testLICMWritesLocalState):
        (testLICMWrites):
        (testLICMFence):
        (testLICMWritesPinned):
        (testLICMControlDependent):
        (testLICMControlDependentNotBackwardsDominant):
        (testLICMControlDependentSideExits):
        (testLICMReadsPinnedWritesPinned):
        (testLICMReadsWritesDifferentHeaps):
        (testLICMReadsWritesOverlappingHeaps):
        (testLICMDefaultCall):
        (testShuffleDoesntTrashCalleeSaves):
        * ftl/FTLOutput.h:
        (JSC::FTL::Output::callWithoutSideEffects):
        (JSC::FTL::Output::operation):
        * runtime/JSCPtrTag.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitCCall):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addTableGet):
        (JSC::Wasm::B3IRGenerator::addTableSet):
        (JSC::Wasm::B3IRGenerator::addRefFunc):
        (JSC::Wasm::B3IRGenerator::addTableSize):
        (JSC::Wasm::B3IRGenerator::addTableGrow):
        (JSC::Wasm::B3IRGenerator::addTableFill):
        (JSC::Wasm::B3IRGenerator::addGrowMemory):
        (JSC::Wasm::B3IRGenerator::setGlobal):
        (JSC::Wasm::B3IRGenerator::emitWriteBarrierForJSWrapper):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32Popcnt>):
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I64Popcnt>):

2020-09-26  Darin Adler  <darin@apple.com>

        Refactor test runner code to cut down on copy/paste code and long-winded repetitive idioms
        https://bugs.webkit.org/show_bug.cgi?id=217028

        Reviewed by Sam Weinig.

        * API/JSRetainPtr.h: Added support for JSClassRef.

2020-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Annotate JIT operation functions called from B3 etc.
        https://bugs.webkit.org/show_bug.cgi?id=217082

        Reviewed by Saam Barati.

        There are many math functions that are called from B3 etc. We should make them JIT operations to complete JIT-caging.

        * b3/B3LowerMacros.cpp:
        * b3/B3LowerMacrosAfterOptimizations.cpp:
        * b3/B3MathExtras.cpp:
        * b3/B3ReduceLoopStrength.cpp:
        (JSC::B3::JSC_DEFINE_JIT_OPERATION):
        (JSC::B3::ReduceLoopStrength::reduceByteCopyLoopsToMemcpy):
        (JSC::B3::fastForwardCopy32): Deleted.
        * b3/B3ReduceLoopStrength.h:
        (JSC::B3::fastForwardCopy32):
        * b3/B3ReduceStrength.cpp:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArithMode.cpp:
        (JSC::DFG::arithUnaryFunction):
        (JSC::DFG::arithUnaryOperation):
        (WTF::printInternal):
        * dfg/DFGArithMode.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithMod):
        (JSC::DFG::SpeculativeJIT::compileArithRounding):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileArithPow):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::doubleTrunc):
        (JSC::FTL::Output::doubleUnary):
        (JSC::FTL::Output::doubleStdPow):
        (JSC::FTL::Output::doublePow): Deleted.
        * ftl/FTLOutput.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::callDoubleToDouble):
        * jit/ThunkGenerators.cpp:
        * runtime/MathCommon.cpp:
        (JSC::Math::log1pDoubleImpl):
        (JSC::Math::log1pFloatImpl):
        (JSC::Math::log1p):
        (JSC::Math::JSC_DEFINE_JIT_OPERATION):
        (JSC::Math::roundDoubleImpl):
        * runtime/MathCommon.h:
        * runtime/MathObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * runtime/Operations.h:
        (JSC::jsRemainder):

2020-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, attempt to fix WinCairo build failure part 2
        https://bugs.webkit.org/show_bug.cgi?id=217071

        * ftl/FTLOperations.h:

2020-09-29  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, attempt to fix WinCairo build failure
        https://bugs.webkit.org/show_bug.cgi?id=217071

        * ftl/FTLOperations.h:
        * tools/JSDollarVM.cpp:

2020-09-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Use JSC_DECLARE_JIT_OPERATION / JSC_DECLARE_CUSTOM_GETTER / JSC_DECLARE_CUSTOM_SETTER
        https://bugs.webkit.org/show_bug.cgi?id=217071

        Reviewed by Keith Miller.

        This patch changes how to define JIT_OPERATIONs including custom getters and setters.
        We introduce JSC_DECLARE_JIT_OPERATION etc. to declare and define them. This is useful
        to perform some additional things (like, JIT-caging registering) for each function.

2020-09-28  Mark Lam  <mark.lam@apple.com>

        Add Bounds Check Elimination validation for debugging.
        https://bugs.webkit.org/show_bug.cgi?id=217055
        rdar://69122891

        Reviewed by Keith Miller.

        Added a JSC_validateBoundsCheckElimination option (with alias
        JSC_validateBCE) that adds an AssertInBounds whenever a CheckInBounds
        node is elided.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGIntegerCheckCombiningPhase.cpp:
        (JSC::DFG::IntegerCheckCombiningPhase::handleBlock):
        * dfg/DFGIntegerRangeOptimizationPhase.cpp:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileAssertNotEmpty):
        (JSC::FTL::DFG::LowerDFGToB3::compileAssertInBounds):
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationReportBoundsCheckEliminationErrorAndCrash):
        * ftl/FTLOperations.h:
        * runtime/OptionsList.h:

2020-09-26  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, follow-up after r267373 to resolve post-commit review comments
        https://bugs.webkit.org/show_bug.cgi?id=216667

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
        (JSC::FTL::DFG::LowerDFGToB3::compileNormalizeMapKey):
        * runtime/HashMapImpl.h:
        (JSC::jsMapHash):

2020-09-25  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%.{from, of} no longer perform AllocateTypedArray
        https://bugs.webkit.org/show_bug.cgi?id=216991

        Reviewed by Yusuke Suzuki.

        Back in ES2015, %TypedArray%.of and %TypedArray%.from appear to have been based on the abstract operation
        AllocateTypedArray, which involved crawling the prototype chain to find the appropriate constructor and
        only permitted `this` to be a (derived) typed array.

        This appears to have gone away as of ES2016 -- we simply expect `this` to be a constructor and verify that it
        produced a typed array (of sufficient length).

        * builtins/BuiltinNames.h:
        * builtins/TypedArrayConstructor.js:
        (of):
        (from):
        (allocateInt8Array): Deleted.
        (allocateInt16Array): Deleted.
        (allocateInt32Array): Deleted.
        (allocateUint32Array): Deleted.
        (allocateUint16Array): Deleted.
        (allocateUint8Array): Deleted.
        (allocateUint8ClampedArray): Deleted.
        (allocateFloat32Array): Deleted.
        (allocateFloat64Array): Deleted.
        * runtime/JSGenericTypedArrayViewConstructor.h:
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::create):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-09-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Introduce JSC_DECLARE_HOST_FUNCTION / JSC_DEFINE_HOST_FUNCTION to make host function definition easy-to-scanned for JIT-caging
        https://bugs.webkit.org/show_bug.cgi?id=216966

        Reviewed by Saam Barati.

        This patch introduces JSC_DECLARE_HOST_FUNCTION / JSC_DEFINE_HOST_FUNCTION and changes how to define host functions.
        In the new way, we declare a function like,

            JSC_DECLARE_HOST_FUNCTION(functionHelloWorld);

        And define the function like,

            JSC_DEFINE_HOST_FUNCTION(functionHelloWorld, (JSGlobalObject* globalObject, CallFrame* callFrame))
            {
                // function body.
            }

        This makes adding some meta information to each function easy, which helps JIT-caging to collect allowed function pointers.

        * API/JSAPIWrapperObject.mm:
        (JSC::JSCallbackObject<JSAPIWrapperObject>::getCallFunction):
        (JSC::JSCallbackObject<JSAPIWrapperObject>::getConstructFunction):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * API/JSCallbackConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSCallbackConstructor): Deleted.
        * API/JSCallbackFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callJSCallbackFunction): Deleted.
        * API/JSCallbackObject.cpp:
        (JSC::JSCallbackObject<JSNonFinalObject>::getCallFunction):
        (JSC::JSCallbackObject<JSNonFinalObject>::getConstructFunction):
        (JSC::JSCallbackObject<JSGlobalObject>::getCallFunction):
        (JSC::JSCallbackObject<JSGlobalObject>::getConstructFunction):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getConstructData):
        (JSC::JSCallbackObject<Parent>::constructImpl):
        (JSC::JSCallbackObject<Parent>::getCallData):
        (JSC::JSCallbackObject<Parent>::callImpl):
        (JSC::JSCallbackObject<Parent>::construct): Deleted.
        (JSC::JSCallbackObject<Parent>::call): Deleted.
        * API/ObjCCallbackFunction.mm:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callObjCCallbackFunction): Deleted.
        (JSC::constructObjCCallbackFunction): Deleted.
        * API/glib/JSAPIWrapperGlobalObject.cpp:
        (JSC::JSCallbackObject<JSAPIWrapperGlobalObject>::getCallFunction):
        (JSC::JSCallbackObject<JSAPIWrapperGlobalObject>::getConstructFunction):
        * API/glib/JSAPIWrapperObjectGLib.cpp:
        (JSC::JSCallbackObject<JSAPIWrapperObject>::getCallFunction):
        (JSC::JSCallbackObject<JSAPIWrapperObject>::getConstructFunction):
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        * API/glib/JSCCallbackFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callJSCCallbackFunction): Deleted.
        (JSC::constructJSCCallbackFunction): Deleted.
        * inspector/JSInjectedScriptHostPrototype.cpp:
        (Inspector::JSC_DEFINE_HOST_FUNCTION):
        (Inspector::jsInjectedScriptHostPrototypeAttributeEvaluate): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeAttributeSavedResultAlias): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionInternalConstructorName): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionIsHTMLAllCollection): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionIsPromiseRejectedWithNativeGetterTypeError): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionProxyTargetValue): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapSize): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakMapEntries): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetSize): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionWeakSetEntries): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionIteratorEntries): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionQueryInstances): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionQueryHolders): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionEvaluateWithScopeExtension): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionSubtype): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionFunctionDetails): Deleted.
        (Inspector::jsInjectedScriptHostPrototypeFunctionGetInternalProperties): Deleted.
        * inspector/JSJavaScriptCallFramePrototype.cpp:
        (Inspector::JSC_DEFINE_HOST_FUNCTION):
        (Inspector::jsJavaScriptCallFramePrototypeFunctionEvaluateWithScopeExtension): Deleted.
        (Inspector::jsJavaScriptCallFramePrototypeFunctionScopeDescriptions): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeCaller): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeSourceID): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeLine): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeColumn): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeFunctionName): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeScopeChain): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeThisObject): Deleted.
        (Inspector::jsJavaScriptCallFrameAttributeType): Deleted.
        (Inspector::jsJavaScriptCallFrameIsTailDeleted): Deleted.
        * jsc.cpp:
        (JSC_DEFINE_HOST_FUNCTION):
        (functionPrintStdOut): Deleted.
        (functionPrintStdErr): Deleted.
        (functionDebug): Deleted.
        (functionDescribe): Deleted.
        (functionDescribeArray): Deleted.
        (functionSleepSeconds): Deleted.
        (functionJSCStack): Deleted.
        (functionGCAndSweep): Deleted.
        (functionFullGC): Deleted.
        (functionEdenGC): Deleted.
        (functionHeapSize): Deleted.
        (functionResetMemoryPeak): Deleted.
        (functionAddressOf): Deleted.
        (functionVersion): Deleted.
        (functionRun): Deleted.
        (functionRunString): Deleted.
        (functionLoad): Deleted.
        (functionLoadString): Deleted.
        (functionReadFile): Deleted.
        (functionCheckSyntax): Deleted.
        (functionSetSamplingFlags): Deleted.
        (functionClearSamplingFlags): Deleted.
        (functionGetRandomSeed): Deleted.
        (functionSetRandomSeed): Deleted.
        (functionIsRope): Deleted.
        (functionCallerSourceOrigin): Deleted.
        (functionReadline): Deleted.
        (functionPreciseTime): Deleted.
        (functionNeverInlineFunction): Deleted.
        (functionNoDFG): Deleted.
        (functionNoFTL): Deleted.
        (functionNoOSRExitFuzzing): Deleted.
        (functionOptimizeNextInvocation): Deleted.
        (functionNumberOfDFGCompiles): Deleted.
        (functionCallerIsOMGCompiled): Deleted.
        (functionDollarCreateRealm): Deleted.
        (functionDollarEvalScript): Deleted.
        (functionDollarAgentStart): Deleted.
        (functionDollarAgentReceiveBroadcast): Deleted.
        (functionDollarAgentReport): Deleted.
        (functionDollarAgentSleep): Deleted.
        (functionDollarAgentBroadcast): Deleted.
        (functionDollarAgentGetReport): Deleted.
        (functionDollarAgentLeaving): Deleted.
        (functionDollarAgentMonotonicNow): Deleted.
        (functionWaitForReport): Deleted.
        (functionHeapCapacity): Deleted.
        (functionFlashHeapAccess): Deleted.
        (functionDisableRichSourceInfo): Deleted.
        (functionMallocInALoop): Deleted.
        (functionTotalCompileTime): Deleted.
        (functionJSCOptions): Deleted.
        (functionReoptimizationRetryCount): Deleted.
        (functionTransferArrayBuffer): Deleted.
        (functionFailNextNewCodeBlock): Deleted.
        (functionQuit): Deleted.
        (functionFalse): Deleted.
        (functionUndefined1): Deleted.
        (functionUndefined2): Deleted.
        (functionIsInt32): Deleted.
        (functionIsPureNaN): Deleted.
        (functionIdentity): Deleted.
        (functionEffectful42): Deleted.
        (functionMakeMasquerader): Deleted.
        (functionCallMasquerader): Deleted.
        (functionHasCustomProperties): Deleted.
        (functionDumpTypesForAllVariables): Deleted.
        (functionDrainMicrotasks): Deleted.
        (functionSetTimeout): Deleted.
        (functionReleaseWeakRefs): Deleted.
        (functionFinalizationRegistryLiveCount): Deleted.
        (functionFinalizationRegistryDeadCount): Deleted.
        (functionIs32BitPlatform): Deleted.
        (functionCreateGlobalObject): Deleted.
        (functionCreateHeapBigInt): Deleted.
        (functionCreateBigInt32): Deleted.
        (functionUseBigInt32): Deleted.
        (functionIsBigInt32): Deleted.
        (functionIsHeapBigInt): Deleted.
        (functionCheckModuleSyntax): Deleted.
        (functionPlatformSupportsSamplingProfiler): Deleted.
        (functionGenerateHeapSnapshot): Deleted.
        (functionGenerateHeapSnapshotForGCDebugging): Deleted.
        (functionResetSuperSamplerState): Deleted.
        (functionEnsureArrayStorage): Deleted.
        (functionStartSamplingProfiler): Deleted.
        (functionSamplingProfilerStackTraces): Deleted.
        (functionMaxArguments): Deleted.
        (functionAsyncTestStart): Deleted.
        (functionAsyncTestPassed): Deleted.
        (functionWebAssemblyMemoryMode): Deleted.
        (functionSetUnhandledRejectionCallback): Deleted.
        (functionAsDoubleNumber): Deleted.
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callAggregateErrorConstructor): Deleted.
        (JSC::constructAggregateErrorConstructor): Deleted.
        * runtime/ArrayConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructWithArrayConstructor): Deleted.
        (JSC::callArrayConstructor): Deleted.
        (JSC::arrayConstructorPrivateFuncIsArraySlow): Deleted.
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::arrayProtoFuncSpeciesCreate): Deleted.
        (JSC::arrayProtoFuncToString): Deleted.
        (JSC::arrayProtoFuncToLocaleString): Deleted.
        (JSC::arrayProtoFuncJoin): Deleted.
        (JSC::arrayProtoFuncValues): Deleted.
        (JSC::arrayProtoFuncEntries): Deleted.
        (JSC::arrayProtoFuncKeys): Deleted.
        (JSC::arrayProtoFuncPop): Deleted.
        (JSC::arrayProtoFuncPush): Deleted.
        (JSC::arrayProtoFuncReverse): Deleted.
        (JSC::arrayProtoFuncShift): Deleted.
        (JSC::arrayProtoFuncSlice): Deleted.
        (JSC::arrayProtoFuncSplice): Deleted.
        (JSC::arrayProtoFuncUnShift): Deleted.
        (JSC::arrayProtoFuncIndexOf): Deleted.
        (JSC::arrayProtoFuncLastIndexOf): Deleted.
        (JSC::arrayProtoPrivateFuncConcatMemcpy): Deleted.
        (JSC::arrayProtoPrivateFuncAppendMemcpy): Deleted.
        * runtime/ArrayPrototype.h:
        * runtime/AsyncFunctionConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callAsyncFunctionConstructor): Deleted.
        (JSC::constructAsyncFunctionConstructor): Deleted.
        * runtime/AsyncGeneratorFunctionConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callAsyncGeneratorFunctionConstructor): Deleted.
        (JSC::constructAsyncGeneratorFunctionConstructor): Deleted.
        * runtime/AtomicsObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::atomicsFuncAdd): Deleted.
        (JSC::atomicsFuncAnd): Deleted.
        (JSC::atomicsFuncCompareExchange): Deleted.
        (JSC::atomicsFuncExchange): Deleted.
        (JSC::atomicsFuncIsLockFree): Deleted.
        (JSC::atomicsFuncLoad): Deleted.
        (JSC::atomicsFuncOr): Deleted.
        (JSC::atomicsFuncStore): Deleted.
        (JSC::atomicsFuncSub): Deleted.
        (JSC::atomicsFuncWait): Deleted.
        (JSC::atomicsFuncWake): Deleted.
        (JSC::atomicsFuncXor): Deleted.
        * runtime/BigIntConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callBigIntConstructor): Deleted.
        (JSC::bigIntConstructorFuncAsUintN): Deleted.
        (JSC::bigIntConstructorFuncAsIntN): Deleted.
        * runtime/BigIntPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::bigIntProtoFuncToString): Deleted.
        (JSC::bigIntProtoFuncToLocaleString): Deleted.
        (JSC::bigIntProtoFuncValueOf): Deleted.
        * runtime/BooleanConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callBooleanConstructor): Deleted.
        (JSC::constructWithBooleanConstructor): Deleted.
        * runtime/BooleanPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::booleanProtoFuncToString): Deleted.
        (JSC::booleanProtoFuncValueOf): Deleted.
        * runtime/ConsoleObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::consoleProtoFuncDebug): Deleted.
        (JSC::consoleProtoFuncError): Deleted.
        (JSC::consoleProtoFuncLog): Deleted.
        (JSC::consoleProtoFuncInfo): Deleted.
        (JSC::consoleProtoFuncWarn): Deleted.
        (JSC::consoleProtoFuncClear): Deleted.
        (JSC::consoleProtoFuncDir): Deleted.
        (JSC::consoleProtoFuncDirXML): Deleted.
        (JSC::consoleProtoFuncTable): Deleted.
        (JSC::consoleProtoFuncTrace): Deleted.
        (JSC::consoleProtoFuncAssert): Deleted.
        (JSC::consoleProtoFuncCount): Deleted.
        (JSC::consoleProtoFuncCountReset): Deleted.
        (JSC::consoleProtoFuncProfile): Deleted.
        (JSC::consoleProtoFuncProfileEnd): Deleted.
        (JSC::consoleProtoFuncTakeHeapSnapshot): Deleted.
        (JSC::consoleProtoFuncTime): Deleted.
        (JSC::consoleProtoFuncTimeLog): Deleted.
        (JSC::consoleProtoFuncTimeEnd): Deleted.
        (JSC::consoleProtoFuncTimeStamp): Deleted.
        (JSC::consoleProtoFuncGroup): Deleted.
        (JSC::consoleProtoFuncGroupCollapsed): Deleted.
        (JSC::consoleProtoFuncGroupEnd): Deleted.
        (JSC::consoleProtoFuncRecord): Deleted.
        (JSC::consoleProtoFuncRecordEnd): Deleted.
        (JSC::consoleProtoFuncScreenshot): Deleted.
        * runtime/DateConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructWithDateConstructor): Deleted.
        (JSC::callDate): Deleted.
        (JSC::dateParse): Deleted.
        (JSC::dateNow): Deleted.
        (JSC::dateUTC): Deleted.
        * runtime/DatePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::dateProtoFuncToString): Deleted.
        (JSC::dateProtoFuncToUTCString): Deleted.
        (JSC::dateProtoFuncToISOString): Deleted.
        (JSC::dateProtoFuncToDateString): Deleted.
        (JSC::dateProtoFuncToTimeString): Deleted.
        (JSC::dateProtoFuncToPrimitiveSymbol): Deleted.
        (JSC::dateProtoFuncGetTime): Deleted.
        (JSC::dateProtoFuncGetFullYear): Deleted.
        (JSC::dateProtoFuncGetUTCFullYear): Deleted.
        (JSC::dateProtoFuncGetMonth): Deleted.
        (JSC::dateProtoFuncGetUTCMonth): Deleted.
        (JSC::dateProtoFuncGetDate): Deleted.
        (JSC::dateProtoFuncGetUTCDate): Deleted.
        (JSC::dateProtoFuncGetDay): Deleted.
        (JSC::dateProtoFuncGetUTCDay): Deleted.
        (JSC::dateProtoFuncGetHours): Deleted.
        (JSC::dateProtoFuncGetUTCHours): Deleted.
        (JSC::dateProtoFuncGetMinutes): Deleted.
        (JSC::dateProtoFuncGetUTCMinutes): Deleted.
        (JSC::dateProtoFuncGetSeconds): Deleted.
        (JSC::dateProtoFuncGetUTCSeconds): Deleted.
        (JSC::dateProtoFuncGetMilliSeconds): Deleted.
        (JSC::dateProtoFuncGetUTCMilliseconds): Deleted.
        (JSC::dateProtoFuncGetTimezoneOffset): Deleted.
        (JSC::dateProtoFuncSetTime): Deleted.
        (JSC::dateProtoFuncSetMilliSeconds): Deleted.
        (JSC::dateProtoFuncSetUTCMilliseconds): Deleted.
        (JSC::dateProtoFuncSetSeconds): Deleted.
        (JSC::dateProtoFuncSetUTCSeconds): Deleted.
        (JSC::dateProtoFuncSetMinutes): Deleted.
        (JSC::dateProtoFuncSetUTCMinutes): Deleted.
        (JSC::dateProtoFuncSetHours): Deleted.
        (JSC::dateProtoFuncSetUTCHours): Deleted.
        (JSC::dateProtoFuncSetDate): Deleted.
        (JSC::dateProtoFuncSetUTCDate): Deleted.
        (JSC::dateProtoFuncSetMonth): Deleted.
        (JSC::dateProtoFuncSetUTCMonth): Deleted.
        (JSC::dateProtoFuncSetFullYear): Deleted.
        (JSC::dateProtoFuncSetUTCFullYear): Deleted.
        (JSC::dateProtoFuncSetYear): Deleted.
        (JSC::dateProtoFuncGetYear): Deleted.
        (JSC::dateProtoFuncToJSON): Deleted.
        * runtime/DatePrototype.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructErrorConstructor): Deleted.
        (JSC::callErrorConstructor): Deleted.
        * runtime/ErrorPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::errorProtoFuncToString): Deleted.
        * runtime/FinalizationRegistryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callFinalizationRegistry): Deleted.
        (JSC::constructFinalizationRegistry): Deleted.
        * runtime/FinalizationRegistryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::protoFuncFinalizationRegistryRegister): Deleted.
        (JSC::protoFuncFinalizationRegistryUnregister): Deleted.
        * runtime/FunctionConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructWithFunctionConstructor): Deleted.
        (JSC::callFunctionConstructor): Deleted.
        * runtime/FunctionPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callFunctionPrototype): Deleted.
        (JSC::functionProtoFuncToString): Deleted.
        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callGeneratorFunctionConstructor): Deleted.
        (JSC::constructGeneratorFunctionConstructor): Deleted.
        * runtime/InspectorInstrumentationObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::inspectorInstrumentationObjectLog): Deleted.
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlCollator): Deleted.
        (JSC::callIntlCollator): Deleted.
        (JSC::IntlCollatorConstructorFuncSupportedLocalesOf): Deleted.
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlCollatorFuncCompare): Deleted.
        (JSC::IntlCollatorPrototypeGetterCompare): Deleted.
        (JSC::IntlCollatorPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlDateTimeFormat): Deleted.
        (JSC::callIntlDateTimeFormat): Deleted.
        (JSC::IntlDateTimeFormatConstructorFuncSupportedLocalesOf): Deleted.
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlDateTimeFormatFuncFormatDateTime): Deleted.
        (JSC::IntlDateTimeFormatPrototypeGetterFormat): Deleted.
        (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts): Deleted.
        (JSC::IntlDateTimeFormatPrototypeFuncFormatRange): Deleted.
        (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlDisplayNamesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlDisplayNames): Deleted.
        (JSC::callIntlDisplayNames): Deleted.
        (JSC::IntlDisplayNamesConstructorSupportedLocalesOf): Deleted.
        * runtime/IntlDisplayNamesPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlDisplayNamesPrototypeFuncOf): Deleted.
        (JSC::IntlDisplayNamesPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlLocaleConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlLocale): Deleted.
        (JSC::callIntlLocale): Deleted.
        * runtime/IntlLocalePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlLocalePrototypeFuncMaximize): Deleted.
        (JSC::IntlLocalePrototypeFuncMinimize): Deleted.
        (JSC::IntlLocalePrototypeFuncToString): Deleted.
        (JSC::IntlLocalePrototypeGetterBaseName): Deleted.
        (JSC::IntlLocalePrototypeGetterCalendar): Deleted.
        (JSC::IntlLocalePrototypeGetterCaseFirst): Deleted.
        (JSC::IntlLocalePrototypeGetterCollation): Deleted.
        (JSC::IntlLocalePrototypeGetterHourCycle): Deleted.
        (JSC::IntlLocalePrototypeGetterNumeric): Deleted.
        (JSC::IntlLocalePrototypeGetterNumberingSystem): Deleted.
        (JSC::IntlLocalePrototypeGetterLanguage): Deleted.
        (JSC::IntlLocalePrototypeGetterScript): Deleted.
        (JSC::IntlLocalePrototypeGetterRegion): Deleted.
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlNumberFormat): Deleted.
        (JSC::callIntlNumberFormat): Deleted.
        (JSC::IntlNumberFormatConstructorFuncSupportedLocalesOf): Deleted.
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlNumberFormatFuncFormat): Deleted.
        (JSC::IntlNumberFormatPrototypeGetterFormat): Deleted.
        (JSC::IntlNumberFormatPrototypeFuncFormatToParts): Deleted.
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::intlObjectFuncGetCanonicalLocales): Deleted.
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlPluralRules): Deleted.
        (JSC::callIntlPluralRules): Deleted.
        (JSC::IntlPluralRulesConstructorFuncSupportedLocalesOf): Deleted.
        * runtime/IntlPluralRulesPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlPluralRulesPrototypeFuncSelect): Deleted.
        (JSC::IntlPluralRulesPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlRelativeTimeFormat): Deleted.
        (JSC::callIntlRelativeTimeFormat): Deleted.
        (JSC::IntlRelativeTimeFormatConstructorFuncSupportedLocalesOf): Deleted.
        * runtime/IntlRelativeTimeFormatPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlRelativeTimeFormatPrototypeFuncFormat): Deleted.
        (JSC::IntlRelativeTimeFormatPrototypeFuncFormatToParts): Deleted.
        (JSC::IntlRelativeTimeFormatPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlSegmentIteratorPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlSegmentIteratorPrototypeFuncNext): Deleted.
        * runtime/IntlSegmenterConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructIntlSegmenter): Deleted.
        (JSC::callIntlSegmenter): Deleted.
        (JSC::IntlSegmenterConstructorSupportedLocalesOf): Deleted.
        * runtime/IntlSegmenterPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlSegmenterPrototypeFuncSegment): Deleted.
        (JSC::IntlSegmenterPrototypeFuncResolvedOptions): Deleted.
        * runtime/IntlSegmentsPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::IntlSegmentsPrototypeFuncContaining): Deleted.
        (JSC::IntlSegmentsPrototypeFuncIterator): Deleted.
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callArrayBuffer): Deleted.
        (JSC::constructArrayBuffer): Deleted.
        (JSC::constructSharedArrayBuffer): Deleted.
        (JSC::arrayBufferFuncIsView): Deleted.
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::arrayBufferProtoFuncSlice): Deleted.
        (JSC::arrayBufferProtoGetterFuncByteLength): Deleted.
        (JSC::sharedArrayBufferProtoGetterFuncByteLength): Deleted.
        * runtime/JSBoundFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::boundThisNoArgsFunctionCall): Deleted.
        (JSC::boundFunctionCall): Deleted.
        (JSC::boundThisNoArgsFunctionConstruct): Deleted.
        (JSC::boundFunctionConstruct): Deleted.
        (JSC::isBoundFunction): Deleted.
        (JSC::hasInstanceBoundFunction): Deleted.
        * runtime/JSBoundFunction.h:
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::customGetterSetterFunctionCall): Deleted.
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::dataViewProtoGetterBuffer): Deleted.
        (JSC::dataViewProtoGetterByteLength): Deleted.
        (JSC::dataViewProtoGetterByteOffset): Deleted.
        (JSC::dataViewProtoFuncGetInt8): Deleted.
        (JSC::dataViewProtoFuncGetInt16): Deleted.
        (JSC::dataViewProtoFuncGetInt32): Deleted.
        (JSC::dataViewProtoFuncGetUint8): Deleted.
        (JSC::dataViewProtoFuncGetUint16): Deleted.
        (JSC::dataViewProtoFuncGetUint32): Deleted.
        (JSC::dataViewProtoFuncGetFloat32): Deleted.
        (JSC::dataViewProtoFuncGetFloat64): Deleted.
        (JSC::dataViewProtoFuncSetInt8): Deleted.
        (JSC::dataViewProtoFuncSetInt16): Deleted.
        (JSC::dataViewProtoFuncSetInt32): Deleted.
        (JSC::dataViewProtoFuncSetUint8): Deleted.
        (JSC::dataViewProtoFuncSetUint16): Deleted.
        (JSC::dataViewProtoFuncSetUint32): Deleted.
        (JSC::dataViewProtoFuncSetFloat32): Deleted.
        (JSC::dataViewProtoFuncSetFloat64): Deleted.
        * runtime/JSFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::argumentsGetter):
        (JSC::callerGetter):
        (JSC::callHostFunctionAsConstructor): Deleted.
        (JSC::JSFunction::argumentsGetter): Deleted.
        (JSC::JSFunction::callerGetter): Deleted.
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayViewConstructor.h:
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::JSGenericTypedArrayViewConstructor):
        (JSC::constructGenericTypedArrayViewImpl):
        (JSC::callGenericTypedArrayViewImpl):
        (JSC::constructGenericTypedArrayView): Deleted.
        (JSC::callGenericTypedArrayView): Deleted.
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::genericTypedArrayViewProtoFuncSet): Deleted.
        (JSC::genericTypedArrayViewProtoFuncCopyWithin): Deleted.
        (JSC::genericTypedArrayViewProtoFuncIncludes): Deleted.
        (JSC::genericTypedArrayViewProtoFuncIndexOf): Deleted.
        (JSC::genericTypedArrayViewProtoFuncJoin): Deleted.
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf): Deleted.
        (JSC::genericTypedArrayViewProtoGetterFuncBuffer): Deleted.
        (JSC::genericTypedArrayViewProtoGetterFuncLength): Deleted.
        (JSC::genericTypedArrayViewProtoGetterFuncByteLength): Deleted.
        (JSC::genericTypedArrayViewProtoGetterFuncByteOffset): Deleted.
        (JSC::genericTypedArrayViewProtoFuncReverse): Deleted.
        (JSC::genericTypedArrayViewPrivateFuncSort): Deleted.
        (JSC::genericTypedArrayViewProtoFuncSlice): Deleted.
        (JSC::genericTypedArrayViewPrivateFuncSubarrayCreate): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::makeBoundFunction): Deleted.
        (JSC::hasOwnLengthProperty): Deleted.
        (JSC::createPrivateSymbol): Deleted.
        (JSC::assertCall): Deleted.
        (JSC::enableSamplingProfiler): Deleted.
        (JSC::disableSamplingProfiler): Deleted.
        (JSC::enableSuperSampler): Deleted.
        (JSC::disableSuperSampler): Deleted.
        (JSC::enqueueJob): Deleted.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::globalFuncEval): Deleted.
        (JSC::globalFuncParseInt): Deleted.
        (JSC::globalFuncParseFloat): Deleted.
        (JSC::globalFuncDecodeURI): Deleted.
        (JSC::globalFuncDecodeURIComponent): Deleted.
        (JSC::globalFuncEncodeURI): Deleted.
        (JSC::globalFuncEncodeURIComponent): Deleted.
        (JSC::globalFuncEscape): Deleted.
        (JSC::globalFuncUnescape): Deleted.
        (JSC::globalFuncThrowTypeError): Deleted.
        (JSC::globalFuncThrowTypeErrorArgumentsCalleeAndCaller): Deleted.
        (JSC::globalFuncMakeTypeError): Deleted.
        (JSC::globalFuncProtoGetter): Deleted.
        (JSC::globalFuncProtoSetter): Deleted.
        (JSC::globalFuncSetPrototypeDirect): Deleted.
        (JSC::globalFuncHostPromiseRejectionTracker): Deleted.
        (JSC::globalFuncBuiltinLog): Deleted.
        (JSC::globalFuncBuiltinDescribe): Deleted.
        (JSC::globalFuncImportModule): Deleted.
        (JSC::globalFuncPropertyIsEnumerable): Deleted.
        (JSC::globalFuncOwnKeys): Deleted.
        (JSC::globalFuncDateTimeFormat): Deleted.
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/JSModuleLoader.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::moduleLoaderParseModule): Deleted.
        (JSC::moduleLoaderRequestedModules): Deleted.
        (JSC::moduleLoaderModuleDeclarationInstantiation): Deleted.
        (JSC::moduleLoaderResolve): Deleted.
        (JSC::moduleLoaderResolveSync): Deleted.
        (JSC::moduleLoaderFetch): Deleted.
        (JSC::moduleLoaderGetModuleNamespaceObject): Deleted.
        (JSC::moduleLoaderEvaluate): Deleted.
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::runStdFunction): Deleted.
        * runtime/JSONObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSONProtoFuncParse): Deleted.
        (JSC::JSONProtoFuncStringify): Deleted.
        * runtime/JSObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::objectPrivateFuncInstanceOf): Deleted.
        * runtime/JSObject.h:
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructTypedArrayView): Deleted.
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::typedArrayViewPrivateFuncIsTypedArrayView): Deleted.
        (JSC::typedArrayViewPrivateFuncIsNeutered): Deleted.
        (JSC::typedArrayViewPrivateFuncLength): Deleted.
        (JSC::typedArrayViewPrivateFuncGetOriginalConstructor): Deleted.
        (JSC::typedArrayViewProtoFuncValues): Deleted.
        (JSC::typedArrayProtoViewFuncEntries): Deleted.
        (JSC::typedArrayViewProtoFuncKeys): Deleted.
        (JSC::typedArrayViewPrivateFuncSort): Deleted.
        (JSC::typedArrayViewProtoFuncSet): Deleted.
        (JSC::typedArrayViewProtoFuncCopyWithin): Deleted.
        (JSC::typedArrayViewProtoFuncIncludes): Deleted.
        (JSC::typedArrayViewProtoFuncLastIndexOf): Deleted.
        (JSC::typedArrayViewProtoFuncIndexOf): Deleted.
        (JSC::typedArrayViewProtoFuncJoin): Deleted.
        (JSC::typedArrayViewProtoGetterFuncBuffer): Deleted.
        (JSC::typedArrayViewProtoGetterFuncLength): Deleted.
        (JSC::typedArrayViewProtoGetterFuncByteLength): Deleted.
        (JSC::typedArrayViewProtoGetterFuncByteOffset): Deleted.
        (JSC::typedArrayViewProtoFuncReverse): Deleted.
        (JSC::typedArrayViewPrivateFuncSubarrayCreate): Deleted.
        (JSC::typedArrayViewProtoFuncSlice): Deleted.
        (JSC::typedArrayViewProtoGetterFuncToStringTag): Deleted.
        * runtime/JSTypedArrayViewPrototype.h:
        * runtime/JSTypedArrays.cpp:
        (JSC::createUint8TypedArray): Deleted.
        * runtime/MapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callMap): Deleted.
        (JSC::constructMap): Deleted.
        (JSC::mapPrivateFuncMapBucketHead): Deleted.
        (JSC::mapPrivateFuncMapBucketNext): Deleted.
        (JSC::mapPrivateFuncMapBucketKey): Deleted.
        (JSC::mapPrivateFuncMapBucketValue): Deleted.
        * runtime/MapConstructor.h:
        * runtime/MapPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::mapProtoFuncClear): Deleted.
        (JSC::mapProtoFuncDelete): Deleted.
        (JSC::mapProtoFuncGet): Deleted.
        (JSC::mapProtoFuncHas): Deleted.
        (JSC::mapProtoFuncSet): Deleted.
        (JSC::mapProtoFuncValues): Deleted.
        (JSC::mapProtoFuncKeys): Deleted.
        (JSC::mapProtoFuncEntries): Deleted.
        (JSC::mapProtoFuncSize): Deleted.
        * runtime/MathObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::mathProtoFuncAbs): Deleted.
        (JSC::mathProtoFuncACos): Deleted.
        (JSC::mathProtoFuncASin): Deleted.
        (JSC::mathProtoFuncATan): Deleted.
        (JSC::mathProtoFuncATan2): Deleted.
        (JSC::mathProtoFuncCeil): Deleted.
        (JSC::mathProtoFuncClz32): Deleted.
        (JSC::mathProtoFuncCos): Deleted.
        (JSC::mathProtoFuncExp): Deleted.
        (JSC::mathProtoFuncFloor): Deleted.
        (JSC::mathProtoFuncHypot): Deleted.
        (JSC::mathProtoFuncLog): Deleted.
        (JSC::mathProtoFuncMax): Deleted.
        (JSC::mathProtoFuncMin): Deleted.
        (JSC::mathProtoFuncPow): Deleted.
        (JSC::mathProtoFuncRandom): Deleted.
        (JSC::mathProtoFuncRound): Deleted.
        (JSC::mathProtoFuncSign): Deleted.
        (JSC::mathProtoFuncSin): Deleted.
        (JSC::mathProtoFuncSqrt): Deleted.
        (JSC::mathProtoFuncTan): Deleted.
        (JSC::mathProtoFuncIMul): Deleted.
        (JSC::mathProtoFuncACosh): Deleted.
        (JSC::mathProtoFuncASinh): Deleted.
        (JSC::mathProtoFuncATanh): Deleted.
        (JSC::mathProtoFuncCbrt): Deleted.
        (JSC::mathProtoFuncCosh): Deleted.
        (JSC::mathProtoFuncExpm1): Deleted.
        (JSC::mathProtoFuncFround): Deleted.
        (JSC::mathProtoFuncLog1p): Deleted.
        (JSC::mathProtoFuncLog10): Deleted.
        (JSC::mathProtoFuncLog2): Deleted.
        (JSC::mathProtoFuncSinh): Deleted.
        (JSC::mathProtoFuncTanh): Deleted.
        (JSC::mathProtoFuncTrunc): Deleted.
        * runtime/MathObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callEvalError): Deleted.
        (JSC::constructEvalError): Deleted.
        (JSC::callRangeError): Deleted.
        (JSC::constructRangeError): Deleted.
        (JSC::callReferenceError): Deleted.
        (JSC::constructReferenceError): Deleted.
        (JSC::callSyntaxError): Deleted.
        (JSC::constructSyntaxError): Deleted.
        (JSC::callTypeError): Deleted.
        (JSC::constructTypeError): Deleted.
        (JSC::callURIError): Deleted.
        (JSC::constructURIError): Deleted.
        * runtime/NativeFunction.h:
        * runtime/NullGetterFunction.cpp:
        (JSC::NullGetterFunctionInternal::JSC_DEFINE_HOST_FUNCTION):
        (JSC::NullGetterFunctionInternal::callReturnUndefined): Deleted.
        * runtime/NullSetterFunction.cpp:
        (JSC::NullSetterFunctionInternal::JSC_DEFINE_HOST_FUNCTION):
        (JSC::NullSetterFunctionInternal::callReturnUndefined): Deleted.
        (JSC::NullSetterFunctionInternal::callThrowError): Deleted.
        * runtime/NumberConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructNumberConstructor): Deleted.
        (JSC::callNumberConstructor): Deleted.
        (JSC::numberConstructorFuncIsInteger): Deleted.
        (JSC::numberConstructorFuncIsSafeInteger): Deleted.
        * runtime/NumberPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::numberProtoFuncToExponential): Deleted.
        (JSC::numberProtoFuncToFixed): Deleted.
        (JSC::numberProtoFuncToPrecision): Deleted.
        (JSC::numberProtoFuncToString): Deleted.
        (JSC::numberProtoFuncToLocaleString): Deleted.
        (JSC::numberProtoFuncValueOf): Deleted.
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructWithObjectConstructor): Deleted.
        (JSC::callObjectConstructor): Deleted.
        (JSC::objectConstructorGetPrototypeOf): Deleted.
        (JSC::objectConstructorSetPrototypeOf): Deleted.
        (JSC::objectConstructorGetOwnPropertyNames): Deleted.
        (JSC::objectConstructorGetOwnPropertySymbols): Deleted.
        (JSC::objectConstructorKeys): Deleted.
        (JSC::objectConstructorAssign): Deleted.
        (JSC::objectConstructorValues): Deleted.
        (JSC::objectConstructorDefineProperty): Deleted.
        (JSC::objectConstructorDefineProperties): Deleted.
        (JSC::objectConstructorCreate): Deleted.
        (JSC::objectConstructorPreventExtensions): Deleted.
        (JSC::objectConstructorIsSealed): Deleted.
        (JSC::objectConstructorIsFrozen): Deleted.
        (JSC::objectConstructorIsExtensible): Deleted.
        (JSC::objectConstructorIs): Deleted.
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::objectProtoFuncValueOf): Deleted.
        (JSC::objectProtoFuncHasOwnProperty): Deleted.
        (JSC::objectProtoFuncIsPrototypeOf): Deleted.
        (JSC::objectProtoFuncDefineGetter): Deleted.
        (JSC::objectProtoFuncDefineSetter): Deleted.
        (JSC::objectProtoFuncLookupGetter): Deleted.
        (JSC::objectProtoFuncLookupSetter): Deleted.
        (JSC::objectProtoFuncPropertyIsEnumerable): Deleted.
        (JSC::objectProtoFuncToLocaleString): Deleted.
        (JSC::objectProtoFuncToString): Deleted.
        * runtime/ObjectPrototype.h:
        * runtime/ProxyConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::makeRevocableProxy): Deleted.
        (JSC::constructProxyObject): Deleted.
        (JSC::callProxy): Deleted.
        * runtime/ProxyObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::performProxyCall): Deleted.
        (JSC::performProxyConstruct): Deleted.
        * runtime/ProxyRevoke.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::performProxyRevoke): Deleted.
        * runtime/ReflectObject.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::reflectObjectConstruct): Deleted.
        (JSC::reflectObjectDefineProperty): Deleted.
        (JSC::reflectObjectGet): Deleted.
        (JSC::reflectObjectGetOwnPropertyDescriptor): Deleted.
        (JSC::reflectObjectGetPrototypeOf): Deleted.
        (JSC::reflectObjectIsExtensible): Deleted.
        (JSC::reflectObjectOwnKeys): Deleted.
        (JSC::reflectObjectPreventExtensions): Deleted.
        (JSC::reflectObjectSet): Deleted.
        (JSC::reflectObjectSetPrototypeOf): Deleted.
        * runtime/RegExpConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::esSpecRegExpCreate): Deleted.
        (JSC::esSpecIsRegExp): Deleted.
        (JSC::constructWithRegExpConstructor): Deleted.
        (JSC::callRegExpConstructor): Deleted.
        * runtime/RegExpConstructor.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::regExpProtoFuncTestFast): Deleted.
        (JSC::regExpProtoFuncExec): Deleted.
        (JSC::regExpProtoFuncMatchFast): Deleted.
        (JSC::regExpProtoFuncCompile): Deleted.
        (JSC::regExpProtoFuncToString): Deleted.
        (JSC::regExpProtoGetterGlobal): Deleted.
        (JSC::regExpProtoGetterIgnoreCase): Deleted.
        (JSC::regExpProtoGetterMultiline): Deleted.
        (JSC::regExpProtoGetterDotAll): Deleted.
        (JSC::regExpProtoGetterSticky): Deleted.
        (JSC::regExpProtoGetterUnicode): Deleted.
        (JSC::regExpProtoGetterFlags): Deleted.
        (JSC::regExpProtoGetterSource): Deleted.
        (JSC::regExpProtoFuncSearchFast): Deleted.
        (JSC::regExpProtoFuncSplitFast): Deleted.
        * runtime/RegExpPrototype.h:
        * runtime/SetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callSet): Deleted.
        (JSC::constructSet): Deleted.
        (JSC::setPrivateFuncSetBucketHead): Deleted.
        (JSC::setPrivateFuncSetBucketNext): Deleted.
        (JSC::setPrivateFuncSetBucketKey): Deleted.
        * runtime/SetConstructor.h:
        * runtime/SetPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::setProtoFuncAdd): Deleted.
        (JSC::setProtoFuncClear): Deleted.
        (JSC::setProtoFuncDelete): Deleted.
        (JSC::setProtoFuncHas): Deleted.
        (JSC::setProtoFuncSize): Deleted.
        (JSC::setProtoFuncValues): Deleted.
        (JSC::setProtoFuncEntries): Deleted.
        * runtime/StringConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::stringFromCharCode):
        (JSC::stringFromCodePoint): Deleted.
        (JSC::constructWithStringConstructor): Deleted.
        (JSC::callStringConstructor): Deleted.
        * runtime/StringConstructor.h:
        * runtime/StringPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::stringProtoFuncRepeatCharacter): Deleted.
        (JSC::stringProtoFuncReplaceUsingRegExp): Deleted.
        (JSC::stringProtoFuncReplaceUsingStringSearch): Deleted.
        (JSC::stringProtoFuncReplaceAllUsingStringSearch): Deleted.
        (JSC::stringProtoFuncToString): Deleted.
        (JSC::stringProtoFuncCharAt): Deleted.
        (JSC::stringProtoFuncCharCodeAt): Deleted.
        (JSC::stringProtoFuncCodePointAt): Deleted.
        (JSC::stringProtoFuncIndexOf): Deleted.
        (JSC::builtinStringIndexOfInternal): Deleted.
        (JSC::stringProtoFuncLastIndexOf): Deleted.
        (JSC::stringProtoFuncSlice): Deleted.
        (JSC::stringProtoFuncSplitFast): Deleted.
        (JSC::stringProtoFuncSubstr): Deleted.
        (JSC::stringProtoFuncSubstring): Deleted.
        (JSC::builtinStringSubstringInternal): Deleted.
        (JSC::stringProtoFuncToLowerCase): Deleted.
        (JSC::stringProtoFuncToUpperCase): Deleted.
        (JSC::stringProtoFuncLocaleCompare): Deleted.
        (JSC::stringProtoFuncToLocaleLowerCase): Deleted.
        (JSC::stringProtoFuncToLocaleUpperCase): Deleted.
        (JSC::stringProtoFuncTrim): Deleted.
        (JSC::stringProtoFuncTrimStart): Deleted.
        (JSC::stringProtoFuncTrimEnd): Deleted.
        (JSC::stringProtoFuncStartsWith): Deleted.
        (JSC::stringProtoFuncEndsWith): Deleted.
        (JSC::stringProtoFuncIncludes): Deleted.
        (JSC::builtinStringIncludesInternal): Deleted.
        (JSC::stringProtoFuncIterator): Deleted.
        (JSC::stringProtoFuncNormalize): Deleted.
        * runtime/StringPrototype.h:
        * runtime/Structure.h:
        * runtime/SymbolConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callSymbol): Deleted.
        (JSC::constructSymbol): Deleted.
        (JSC::symbolConstructorFor): Deleted.
        (JSC::symbolConstructorKeyFor): Deleted.
        * runtime/SymbolPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::symbolProtoGetterDescription): Deleted.
        (JSC::symbolProtoFuncToString): Deleted.
        (JSC::symbolProtoFuncValueOf): Deleted.
        * runtime/WeakMapConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callWeakMap): Deleted.
        (JSC::constructWeakMap): Deleted.
        * runtime/WeakMapPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::protoFuncWeakMapDelete): Deleted.
        (JSC::protoFuncWeakMapGet): Deleted.
        (JSC::protoFuncWeakMapHas): Deleted.
        (JSC::protoFuncWeakMapSet): Deleted.
        * runtime/WeakObjectRefConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callWeakRef): Deleted.
        (JSC::constructWeakRef): Deleted.
        * runtime/WeakObjectRefPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::protoFuncWeakRefDeref): Deleted.
        * runtime/WeakSetConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callWeakSet): Deleted.
        (JSC::constructWeakSet): Deleted.
        * runtime/WeakSetPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::protoFuncWeakSetDelete): Deleted.
        (JSC::protoFuncWeakSetHas): Deleted.
        (JSC::protoFuncWeakSetAdd): Deleted.
        * tools/JSDollarVM.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::JSDollarVM::finishCreation):
        (JSC::functionCrash): Deleted.
        (JSC::functionBreakpoint): Deleted.
        (JSC::functionDFGTrue): Deleted.
        (JSC::functionFTLTrue): Deleted.
        (JSC::functionCpuMfence): Deleted.
        (JSC::functionCpuRdtsc): Deleted.
        (JSC::functionCpuCpuid): Deleted.
        (JSC::functionCpuPause): Deleted.
        (JSC::functionCpuClflush): Deleted.
        (JSC::functionLLintTrue): Deleted.
        (JSC::functionBaselineJITTrue): Deleted.
        (JSC::functionNoInline): Deleted.
        (JSC::functionGC): Deleted.
        (JSC::functionEdenGC): Deleted.
        (JSC::functionGCSweepAsynchronously): Deleted.
        (JSC::functionDumpSubspaceHashes): Deleted.
        (JSC::functionCallFrame): Deleted.
        (JSC::functionCodeBlockForFrame): Deleted.
        (JSC::functionCodeBlockFor): Deleted.
        (JSC::functionDumpSourceFor): Deleted.
        (JSC::functionDumpBytecodeFor): Deleted.
        (JSC::functionDataLog): Deleted.
        (JSC::functionPrint): Deleted.
        (JSC::functionDumpCallFrame): Deleted.
        (JSC::functionDumpStack): Deleted.
        (JSC::functionDumpRegisters): Deleted.
        (JSC::functionDumpCell): Deleted.
        (JSC::functionIndexingMode): Deleted.
        (JSC::functionInlineCapacity): Deleted.
        (JSC::functionValue): Deleted.
        (JSC::functionGetPID): Deleted.
        (JSC::functionHaveABadTime): Deleted.
        (JSC::functionIsHavingABadTime): Deleted.
        (JSC::functionCallWithStackSize): Deleted.
        (JSC::functionCreateGlobalObject): Deleted.
        (JSC::functionCreateProxy): Deleted.
        (JSC::functionCreateRuntimeArray): Deleted.
        (JSC::functionCreateNullRopeString): Deleted.
        (JSC::functionCreateImpureGetter): Deleted.
        (JSC::functionCreateCustomGetterObject): Deleted.
        (JSC::functionCreateDOMJITNodeObject): Deleted.
        (JSC::functionCreateDOMJITGetterObject): Deleted.
        (JSC::functionCreateDOMJITGetterNoEffectsObject): Deleted.
        (JSC::functionCreateDOMJITGetterComplexObject): Deleted.
        (JSC::functionCreateDOMJITFunctionObject): Deleted.
        (JSC::functionCreateDOMJITCheckJSCastObject): Deleted.
        (JSC::functionCreateDOMJITGetterBaseJSObject): Deleted.
        (JSC::functionCreateWasmStreamingParser): Deleted.
        (JSC::functionCreateStaticCustomAccessor): Deleted.
        (JSC::functionCreateStaticCustomValue): Deleted.
        (JSC::functionCreateObjectDoingSideEffectPutWithoutCorrectSlotStatus): Deleted.
        (JSC::functionCreateEmptyFunctionWithName): Deleted.
        (JSC::functionSetImpureGetterDelegate): Deleted.
        (JSC::functionCreateBuiltin): Deleted.
        (JSC::functionGetPrivateProperty): Deleted.
        (JSC::functionCreateRoot): Deleted.
        (JSC::functionCreateElement): Deleted.
        (JSC::functionGetElement): Deleted.
        (JSC::functionCreateSimpleObject): Deleted.
        (JSC::functionGetHiddenValue): Deleted.
        (JSC::functionSetHiddenValue): Deleted.
        (JSC::functionShadowChickenFunctionsOnStack): Deleted.
        (JSC::functionSetGlobalConstRedeclarationShouldNotThrow): Deleted.
        (JSC::functionFindTypeForExpression): Deleted.
        (JSC::functionReturnTypeFor): Deleted.
        (JSC::functionFlattenDictionaryObject): Deleted.
        (JSC::functionDumpBasicBlockExecutionRanges): Deleted.
        (JSC::functionHasBasicBlockExecuted): Deleted.
        (JSC::functionBasicBlockExecutionCount): Deleted.
        (JSC::functionEnableDebuggerModeWhenIdle): Deleted.
        (JSC::functionDisableDebuggerModeWhenIdle): Deleted.
        (JSC::functionDeleteAllCodeWhenIdle): Deleted.
        (JSC::functionGlobalObjectCount): Deleted.
        (JSC::functionGlobalObjectForObject): Deleted.
        (JSC::functionGetGetterSetter): Deleted.
        (JSC::functionLoadGetterFromGetterSetter): Deleted.
        (JSC::functionCreateCustomTestGetterSetter): Deleted.
        (JSC::functionDeltaBetweenButterflies): Deleted.
        (JSC::functionCurrentCPUTime): Deleted.
        (JSC::functionTotalGCTime): Deleted.
        (JSC::functionParseCount): Deleted.
        (JSC::functionIsWasmSupported): Deleted.
        (JSC::functionMake16BitStringIfPossible): Deleted.
        (JSC::JSDollarVMHelper::functionGetStructureTransitionList): Deleted.
        (JSC::functionGetConcurrently): Deleted.
        (JSC::functionHasOwnLengthProperty): Deleted.
        (JSC::functionRejectPromiseAsHandled): Deleted.
        (JSC::functionSetUserPreferredLanguages): Deleted.
        (JSC::functionICUVersion): Deleted.
        (JSC::functionICUHeaderVersion): Deleted.
        (JSC::functionAssertEnabled): Deleted.
        (JSC::functionIsMemoryLimited): Deleted.
        (JSC::functionUseJIT): Deleted.
        (JSC::functionIsGigacageEnabled): Deleted.
        (JSC::functionToUncacheableDictionary): Deleted.
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyCompileFunc): Deleted.
        (JSC::webAssemblyInstantiateFunc): Deleted.
        (JSC::webAssemblyValidateFunc): Deleted.
        (JSC::webAssemblyCompileStreamingInternal): Deleted.
        (JSC::webAssemblyInstantiateStreamingInternal): Deleted.
        * wasm/js/JSWebAssembly.h:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyCompileError): Deleted.
        (JSC::callJSWebAssemblyCompileError): Deleted.
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callWebAssemblyFunction): Deleted.
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyGlobal): Deleted.
        (JSC::callJSWebAssemblyGlobal): Deleted.
        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyGlobalProtoFuncValueOf): Deleted.
        (JSC::webAssemblyGlobalProtoGetterFuncValue): Deleted.
        (JSC::webAssemblyGlobalProtoSetterFuncValue): Deleted.
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyInstance): Deleted.
        (JSC::callJSWebAssemblyInstance): Deleted.
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyInstanceProtoFuncExports): Deleted.
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyLinkError): Deleted.
        (JSC::callJSWebAssemblyLinkError): Deleted.
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyMemory): Deleted.
        (JSC::callJSWebAssemblyMemory): Deleted.
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyMemoryProtoFuncGrow): Deleted.
        (JSC::webAssemblyMemoryProtoFuncBuffer): Deleted.
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyModuleCustomSections): Deleted.
        (JSC::webAssemblyModuleImports): Deleted.
        (JSC::webAssemblyModuleExports): Deleted.
        (JSC::constructJSWebAssemblyModule): Deleted.
        (JSC::callJSWebAssemblyModule): Deleted.
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyRuntimeError): Deleted.
        (JSC::callJSWebAssemblyRuntimeError): Deleted.
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::constructJSWebAssemblyTable): Deleted.
        (JSC::callJSWebAssemblyTable): Deleted.
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::webAssemblyTableProtoFuncLength): Deleted.
        (JSC::webAssemblyTableProtoFuncGrow): Deleted.
        (JSC::webAssemblyTableProtoFuncGet): Deleted.
        (JSC::webAssemblyTableProtoFuncSet): Deleted.
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::JSC_DEFINE_HOST_FUNCTION):
        (JSC::callWebAssemblyWrapperFunction): Deleted.

2020-09-25  Chris Dumez  <cdumez@apple.com>

        Get rid of AudioNode::RefType
        https://bugs.webkit.org/show_bug.cgi?id=216945

        Reviewed by Darin Adler.

        * runtime/CachedTypes.cpp:
        (JSC::CachedRefPtr::decode const):

2020-09-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        DataView instances should not have own "byteLength" and "byteOffset" properties
        https://bugs.webkit.org/show_bug.cgi?id=149906

        Reviewed by Ross Kirsling.

        Following JSDataView::getOwnPropertySlot() deletion in r266529, this patch
        removes related method overrides that incorrectly reported "byteLength" and
        "byteOffset" as own properties of DataView instances [1].

        This change brings DataView objects in compliance with invariants of internal
        methods [2] and aligns JSC with V8 and SpiderMonkey.
        DataView microbenchmarks are neutral.

        [1]: https://tc39.es/ecma262/#sec-properties-of-dataview-instances
        [2]: https://tc39.es/ecma262/#sec-invariants-of-the-essential-internal-methods

        * runtime/JSDataView.cpp:
        (JSC::JSDataView::put): Deleted.
        (JSC::JSDataView::defineOwnProperty): Deleted.
        (JSC::JSDataView::deleteProperty): Deleted.
        (JSC::JSDataView::getOwnNonIndexPropertyNames): Deleted.
        * runtime/JSDataView.h:

2020-09-25  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, late September 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=216950

        Unreviewed build fix.

        * inspector/agents/InspectorConsoleAgent.cpp: Add missing ScriptArguments.h include.

2020-09-24  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%.prototype.toLocaleString must make conscious use of @toString
        https://bugs.webkit.org/show_bug.cgi?id=216956

        Reviewed by Yusuke Suzuki.

        A fascinating bug: if we override Number.prototype.toLocaleString to return { valueOf() { ... } },
        then we can observe our %TypedArray%.prototype.toLocaleString resolving its element values in the wrong order.

        * builtins/TypedArrayPrototype.js:
        (toLocaleString):
        Wrap the toLocaleString call for each element in @toString(), as the spec indicates.

2020-09-24  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%.prototype.sort must throw if comparator is defined and uncallable
        https://bugs.webkit.org/show_bug.cgi?id=216952

        Reviewed by Yusuke Suzuki.

        * builtins/TypedArrayPrototype.js:
        (sort):

2020-09-24  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray% methods should perform TypedArraySpeciesCreate correctly
        https://bugs.webkit.org/show_bug.cgi?id=216938

        Reviewed by Yusuke Suzuki.

        map, filter, and slice are obliged to throw when:
        1. this.constructor is defined but not an object
        2. the species constructor produces a valid typed array which is shorter than the expected length

        * builtins/TypedArrayPrototype.js:
        (map):
        (filter):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSlice):

2020-09-24  Basuke Suzuki  <basuke.suzuki@sony.com>

        [PlayStation] Stop raising SIGPIPE when client side of RemoteInspector dies
        https://bugs.webkit.org/show_bug.cgi?id=216805

        Reviewed by Don Olmstead.

        When communication is stopped caused by peer crash or non-polite close, SIGPIPE will be
        raised on BSD (and maybe on Linux). We prefer to handle those events by returning error.

        On Windows, there's no such fancy feature from the beginning.

        * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp:
        (Inspector::Socket::read):
        (Inspector::Socket::write):

2020-09-24  Angelos Oikonomopoulos  <angelos@igalia.com>

        [MIPS] Broken build after r267371
        https://bugs.webkit.org/show_bug.cgi?id=216893

        Reviewed by Adrian Perez de Castro.

        This addresses two issues.

        First, the fix in https://bugs.webkit.org/show_bug.cgi?id=216772 was not
        getting exercised, because the LabelReference offset was always zero.

        The reason the offset was zero is that LabelReference.mapChildren would discard
        the offset when generating a new LabelReference to wrap the Label returned by
        the code block it yielded to.

        The reason this was only an issue on MIPS is because only MIPS was using the
        result of calls to LabelReference.mapChildren (in its lowering phase,
        assignRegistersToTemporaries -> replaceTemporariesWithRegisters ->
        mapChildren). Other archs, e.g. X86_64 only call mapChildren in earlier phases
        (specifically, subsequent to a call to isASTErroneous), in which the new
        LabelReferences returned by mapChildren are later discarded. Even though ARM
        32/64 contains indirect calls to mapChildren, those are made after the
        arm{,64}LowerLabelReferences transformation which doesn't leave any
        LabelReference nodes around for .mapChildren to be called on.

        So this is not an issue for architectures other than MIPS because
        (a) AddImmediates.fold correctly constructs a LabelReference with an offset by
        calling LabelReference.plusOffset and
        (b) they don't call (and therefore don't use the result of)
        LabelReference.mapChildren in their lowering code.

        Second, the code we generate needs to look up the /label/ in the GOT, not the
        computed address. After the lookup, we simply need to add the offset.

        * offlineasm/ast.rb:
        * offlineasm/mips.rb:

2020-09-24  Ross Kirsling  <ross.kirsling@sony.com>

        %TypedArray%.prototype.fill must only evaluate its argument once
        https://bugs.webkit.org/show_bug.cgi?id=216912

        Reviewed by Yusuke Suzuki.

        Currently, we evaluate the argument in `typedArray.fill({ valueOf() { ... } })` once per filled element,
        but it should only be evaluated once in total.

        * builtins/TypedArrayPrototype.js:
        (fill):

2020-09-23  Ross Kirsling  <ross.kirsling@sony.com>

        %ArrayIteratorPrototype%.next must check for detached buffers
        https://bugs.webkit.org/show_bug.cgi?id=216904

        Reviewed by Yusuke Suzuki.

        Per https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next:
          8. If a has a [[TypedArrayName]] internal slot, then
            a. If IsDetachedBuffer(a.[[ViewedArrayBuffer]]) is true, throw a TypeError exception.

        * builtins/ArrayIteratorPrototype.js:
        (next):
        * builtins/BuiltinNames.h:
        * bytecode/LinkTimeConstant.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::typedArrayViewPrivateFuncIsNeutered):
        * runtime/JSTypedArrayViewPrototype.h:

2020-09-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Simply some of template-specialized host functions by defining each function
        https://bugs.webkit.org/show_bug.cgi?id=216907

        Reviewed by Saam Barati.

        This makes automatically-registering these functions in JIT-caging easy.

        * API/APICallbackFunction.h:
        (JSC::APICallbackFunction::callImpl):
        (JSC::APICallbackFunction::constructImpl):
        (JSC::APICallbackFunction::call): Deleted.
        (JSC::APICallbackFunction::construct): Deleted.
        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallbackConstructor):
        (JSC::JSCallbackConstructor::getConstructData):
        * API/JSCallbackFunction.cpp:
        (JSC::callJSCallbackFunction):
        (JSC::JSCallbackFunction::JSCallbackFunction):
        * API/ObjCCallbackFunction.mm:
        (JSC::callObjCCallbackFunction):
        (JSC::constructObjCCallbackFunction):
        (JSC::ObjCCallbackFunction::ObjCCallbackFunction):
        * API/glib/JSCCallbackFunction.cpp:
        (JSC::callJSCCallbackFunction):
        (JSC::constructJSCCallbackFunction):
        (JSC::JSCCallbackFunction::JSCCallbackFunction):
        * dfg/DFGOperations.h:
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * jsc.cpp:
        (accessorMakeMasquerader):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::JSGenericArrayBufferConstructor):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructImpl):
        (JSC::constructArrayBuffer):
        (JSC::constructSharedArrayBuffer):
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructArrayBuffer): Deleted.
        * runtime/JSArrayBufferConstructor.h:
        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::customGetterSetterFunctionCall):
        (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall): Deleted.
        * runtime/JSCustomGetterSetterFunction.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructImpl):
        (JSC::NativeErrorConstructor<errorType>::callImpl):
        (JSC::callEvalError):
        (JSC::constructEvalError):
        (JSC::callRangeError):
        (JSC::constructRangeError):
        (JSC::callReferenceError):
        (JSC::constructReferenceError):
        (JSC::callSyntaxError):
        (JSC::constructSyntaxError):
        (JSC::callTypeError):
        (JSC::constructTypeError):
        (JSC::callURIError):
        (JSC::constructURIError):
        (JSC::callFunction):
        (JSC::constructFunction):
        (JSC::NativeErrorConstructor<errorType>::NativeErrorConstructor):
        (JSC::NativeErrorConstructorBase::finishCreation):
        (JSC::NativeErrorConstructor<errorType>::constructNativeErrorConstructor): Deleted.
        (JSC::NativeErrorConstructor<errorType>::callNativeErrorConstructor): Deleted.
        * runtime/NativeErrorConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::regExpConstructorDollarImpl):
        (JSC::regExpConstructorDollar1):
        (JSC::regExpConstructorDollar2):
        (JSC::regExpConstructorDollar3):
        (JSC::regExpConstructorDollar4):
        (JSC::regExpConstructorDollar5):
        (JSC::regExpConstructorDollar6):
        (JSC::regExpConstructorDollar7):
        (JSC::regExpConstructorDollar8):
        (JSC::regExpConstructorDollar9):
        (JSC::regExpConstructorInput):
        (JSC::regExpConstructorMultiline):
        (JSC::regExpConstructorLastMatch):
        (JSC::regExpConstructorLastParen):
        (JSC::regExpConstructorLeftContext):
        (JSC::regExpConstructorRightContext):
        (JSC::setRegExpConstructorInput):
        (JSC::setRegExpConstructorMultiline):
        (JSC::regExpConstructorDollar): Deleted.
        * tools/JSDollarVM.cpp:

2020-09-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        Update Array.prototype.sort to be consistent with tightened spec
        https://bugs.webkit.org/show_bug.cgi?id=202582

        Reviewed by Yusuke Suzuki and Keith Miller.

        This patch implements the spec change [1] that reduces amount of cases resulting
        in an implementation-defined sort order, aligning JSC with V8 and SpiderMonkey.

        To achieve this, we collect all existing non-undefined receiver elements to a
        temporary array, sort it, and write back sorted items, followed by `undefined`
        values and holes.

        This change is proven to be web-compatible (shipping since Chrome 76) and neutral
        on peak memory consumption in the wild.

        Although we can unobservably detect sparse receivers, we can't avoid creating a
        temporary array for common case since userland comparators may throw; string
        sorting won't measurably benefit from this, only increasing code complexity.

        This change uses @putByValDirect unless the spec requires [[Set]], avoids using
        closure variables, and adds a few drive-by optimizations, resulting in ~22%
        faster string sorting and 13% speed-up for userland comparators.
        Dromaeo/jslib is neutral.

        [1]: https://github.com/tc39/ecma262/pull/1585

        * builtins/ArrayPrototype.js:
        (sort.stringComparator):
        Optimization #1: replace char-by-char comparison loop with > operator, aligning
        JSC with V8 and SpiderMonkey. This semantically equivalent change alone is a ~15%
        progression for string sort.

        (sort.compact):
        (sort.commit):
        Optimization #2: copy large non-numeric arrays in a loop rather than @appendMemcpy.
        Using the latter unconditionally regresses provided microbenchmarks.

        (sort.merge):
        Optimization #3: replace `typeof` check and negation with strict equality.

        (sort.mergeSort):
        Optimization #4: always return sorted array instead of copying, even if it's the buffer.
        Tweak: create the buffer with correct length.

        (sort.bucketSort):
        Optimization #5: avoid emitting 2 extra get_by_val ops by saving bucket lookup to a variable.
        Tweak: create new bucket via array literal.

        (sort): Fix typo in error message.
        (sort.compactSparse): Deleted.
        (sort.compactSlow): Deleted.
        (sort.comparatorSort): Deleted.
        (sort.stringSort): Deleted.
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        Remove @Object.@getPrototypeOf as it's now unused and we have @getPrototypeOf intrinsic anyway.

2020-09-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl spec update: handle awkward rounding behavior
        https://bugs.webkit.org/show_bug.cgi?id=216760

        Reviewed by Ross Kirsling.

        This patch supports new spec change of "handle awkward rounding behavior"[1].
        This changes minimumFractionDigits / maximumFractionDigits calculation when the specified ones are less than currency-digits.

        [1]: https://github.com/tc39/ecma402/pull/471

        * runtime/CommonIdentifiers.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::resolvedOptions const):
        * runtime/IntlNumberFormatInlines.h:
        (JSC::setNumberFormatDigitOptions):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::resolvedOptions const):

2020-09-23  Caio Lima  <ticaiolima@gmail.com>

        [JSC][ESNext] Create a new opcode to handle private fields store/define
        https://bugs.webkit.org/show_bug.cgi?id=213372

        Reviewed by Yusuke Suzuki.

        This patch is adding a new opcode to handle private field storage.
        Before this change, we were using `put_by_val_direct` and including
        the information of `PutKind` into `PutByValFlags`. We initially decided
        to use `put_by_val_direct` to take advantage of all IC mechanism already
        implemented for this instruction, however the semantics of private field
        is different enough to complicate the understanding of
        `put_by_val_direct`.

        The new instruction is called `put_private_name` and has as its operands
        `baseObject` where the put is going to be placed, the `property`
        that's going to be installed (it is always a private symbol of a
        private field), the `value` we are going to store and the
        `PrivateFieldPutKind` that can be `Define` or `Set`.
        The difference of each `PrivateFieldPutKind` is the following:
        
        - Define: It defines a new private field. If this field is already
        present, it throws a `TypeError`.
        - Set: It sets the value of a private field. If the field is not
        present at the moment of set, it throws a `TypeError`.

        This patch includes support of IC for all tiers. For DFG and FTL, we
        are only emmiting IC when we are able to emit `CheckConstant`
        for subscript identifier during Bytecode parsing. We are adding a new
        DFG node called `PutPrivateNameById` that handles such cases when we
        have constant identifiers.
        We are also adding a new DFG node `PutPrivateName` that handles generic
        case of `put_private_name`. The strategy used to compile
        `put_private_name` is very similar with what we are using with
        `put_by_val[_direct]`. We first try to compile it as `[Multi]PutByOffset`
        using profiled information from LLInt and Baseline execution. If it
        is not possible, we then emit `PutPrivateName[ById]` node. We get another
        chance to transform `PutPrivateNameById` into `PutByOffset` if we can prove
        its structure set at constant folding phase.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::propagateTransitions):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * bytecode/Fits.h:
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        (JSC::PutByIdStatus::computeFor):
        * bytecode/PutByIdStatus.h:
        * bytecode/PutByValFlags.cpp: Removed.
        * bytecode/PutByValFlags.h: Removed.
        * bytecode/PutKind.h:
        (): Deleted.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDirectPutByVal):
        (JSC::BytecodeGenerator::emitDefinePrivateField):
        (JSC::BytecodeGenerator::emitPrivateFieldPut):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handlePutPrivateNameById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ecmaMode): Deleted.
        (JSC::DFG::ecmaMode<OpPutByValDirect>): Deleted.
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        (JSC::DFG::ConstantFoldingPhase::tryFoldAsPutByOffset):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToPutByOffset):
        (JSC::DFG::Node::convertToMultiPutByOffset):
        (JSC::DFG::Node::hasCacheableIdentifier):
        (JSC::DFG::Node::hasPrivateFieldPutKind):
        (JSC::DFG::Node::privateFieldPutKind):
        * dfg/DFGNodeType.h:
        * dfg/DFGOpInfo.h:
        (JSC::DFG::OpInfo::OpInfo):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutPrivateName):
        (JSC::DFG::SpeculativeJIT::compilePutPrivateNameById):
        (JSC::DFG::SpeculativeJIT::compilePutByIdFlush):
        (JSC::DFG::SpeculativeJIT::compilePutById):
        (JSC::DFG::SpeculativeJIT::compilePutByIdDirect):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateNameById):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutPrivateName):
        (JSC::FTL::DFG::LowerDFGToB3::cachedPutById):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutById):
        * generator/DSL.rb:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::link):
        * jit/JIT.h:
        (JSC::ByValCompilationInfo::ByValCompilationInfo):
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        (JSC::JITPutByIdGenerator::slowPathFunction):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        * jit/JITInlines.h:
        (JSC::JIT::ecmaMode<OpPutPrivateName>):
        (JSC::JIT::ecmaMode<OpPutByValDirect>): Deleted.
        (JSC::JIT::privateFieldAccessKind): Deleted.
        (JSC::JIT::privateFieldAccessKind<OpPutByValDirect>): Deleted.
        * jit/JITOperations.cpp:
        (JSC::setPrivateField):
        (JSC::putPrivateField): Deleted.
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitPutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutPrivateNameWithCachedId):
        (JSC::JIT::privateCompilePutByValWithCachedId):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_private_name):
        (JSC::JIT::emitSlow_op_put_private_name):
        (JSC::JIT::emit_op_put_by_id):
        * jit/Repatch.cpp:
        (JSC::appropriateGenericPutByIdFunction):
        (JSC::appropriateOptimizingPutByIdFunction):
        (JSC::tryCachePutByID):
        (JSC::resetPutByID):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::setPrivateField):
        (JSC::JSObject::putPrivateField): Deleted.
        * runtime/PrivateFieldPutKind.cpp: Added.
        (JSC::PrivateFieldPutKind::dump const):
        * runtime/PrivateFieldPutKind.h: Added.
        (JSC::PrivateFieldPutKind::fromByte):
        (JSC::PrivateFieldPutKind::none):
        (JSC::PrivateFieldPutKind::set):
        (JSC::PrivateFieldPutKind::define):
        (JSC::PrivateFieldPutKind::isNone const):
        (JSC::PrivateFieldPutKind::isSet const):
        (JSC::PrivateFieldPutKind::isDefine const):
        (JSC::PrivateFieldPutKind::value const):
        (JSC::PrivateFieldPutKind::PrivateFieldPutKind):

2020-09-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Intl.DateTimeFormat dayPeriod
        https://bugs.webkit.org/show_bug.cgi?id=216845

        Reviewed by Mark Lam.

        Since we already have consensus, let's enable it.
        For now, we keep this flag since it is possible that something
        happens before the change is integrated into the spec.

        * runtime/OptionsList.h:

2020-09-22  HyeockJin Kim  <kherootz@gmail.com>

        Coerce computed property before adding to |excludedList|
        https://bugs.webkit.org/show_bug.cgi?id=216437

        Reviewed by Yusuke Suzuki.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ObjectPatternNode::bindValue const):

2020-09-21  Paulo Matos  <pmatos@igalia.com>

        Fix MIPS leai,leap when offset is nonzero
        https://bugs.webkit.org/show_bug.cgi?id=216772

        Reviewed by Mark Lam.

        Fix required by change from webkit#216685
        * offlineasm/mips.rb:

2020-09-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt should work with Map / Set
        https://bugs.webkit.org/show_bug.cgi?id=216667

        Reviewed by Robin Morisset.

        This patch makes BigInt supported in Map / Set.

        1. In NormalizeMapKey, we always attempt to convert HeapBigInt to BigInt32 (if supported). So we ensure that,
            normalized BigInt has one unique form for BigInt32 range. This allows us to use hashing for BigInt32 bit pattern directly.
        2. In MapHash, for BigInt32, we directly has the JSValue bits. For HeapBigInt, we calculate hash via Hasher.
        3. In GetMapBucket, we consider HeapBigInt case correctly.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupNormalizeMapKey):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNormalizeMapKey):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
        (JSC::FTL::DFG::LowerDFGToB3::compileNormalizeMapKey):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
        * runtime/HashMapImpl.h:
        (JSC::normalizeMapKey):
        (JSC::jsMapHash):
        (JSC::concurrentJSMapHash):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::concurrentHash):
        * runtime/JSBigInt.h:
        (JSC::tryConvertToBigInt32):

2020-09-21  Mark Lam  <mark.lam@apple.com>

        Move some LLInt globals into JSC::Config.
        https://bugs.webkit.org/show_bug.cgi?id=216685
        rdar://68964544

        Reviewed by Keith Miller.

        1. Moved the following into g_jscConfig:

           Data::s_exceptionInstructions ==> g_jscConfig.llint.exceptionInstructions
           Data::s_wasmExceptionInstructions ==> g_jscConfig.llint.wasmExceptionInstructions
           g_opcodeMap ==> g_jscConfig.llint.opcodeMap
           g_opcodeMapWide16 ==> g_jscConfig.llint.opcodeMapWide16
           g_opcodeMapWide32 ==> g_jscConfig.llint.opcodeMapWide32

        2. Fixed cloop.rb so that it can take an offset for the leap offlineasm instruction.
        3. Fixed x86.rb so that it can take an offset for the leap offlineasm instruction.
        4. Fixed arm.rb so that it can take an offset for the leap offlineasm instruction.

           Note: arm64.rb already does this right.

        5. Added JSC::Config::singleton() to return a reference to g_jscConfig.
           This is useful when debugging with lldb since g_jscConfig is not an actual
           label, but is a macro that computes the address of the Config record.

        This patch has been smoke tested on arm64e, x86_64, and cloop (on x86_64 and armv7k).

        * llint/LLIntData.cpp:
        (JSC::LLInt::LLIntInitializeAssertScope::LLIntInitializeAssertScope):
        (JSC::LLInt::LLIntInitializeAssertScope::~LLIntInitializeAssertScope):
        (JSC::LLInt::LLIntInitializeAssertScope::assertInitializationIsAllowed):
        (JSC::LLInt::initialize):
        * llint/LLIntData.h:
        (JSC::LLInt::exceptionInstructions):
        (JSC::LLInt::wasmExceptionInstructions):
        (JSC::LLInt::opcodeMap):
        (JSC::LLInt::opcodeMapWide16):
        (JSC::LLInt::opcodeMapWide32):
        (JSC::LLInt::getOpcode):
        (JSC::LLInt::getOpcodeWide16):
        (JSC::LLInt::getOpcodeWide32):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter.cpp:
        * llint/LowLevelInterpreter64.asm:
        * llint/WebAssembly.asm:
        * offlineasm/arm.rb:
        * offlineasm/cloop.rb:
        * offlineasm/x86.rb:
        * runtime/JSCConfig.cpp:
        (JSC::Config::singleton):
        * runtime/JSCConfig.h:

2020-09-21  Basuke Suzuki  <basuke.suzuki@sony.com>

        [WinCairo][PlayStation] Support different instances of listener client.
        https://bugs.webkit.org/show_bug.cgi?id=216733

        Reviewed by Don Olmstead.

        Currently RemoteInspectorSocketEndpoint support one client instance for all
        listeners. This patch allows listeners to create its own listener client on
        accept timing.

        * inspector/remote/RemoteControllableTarget.h:
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::didReceive):
        * inspector/remote/socket/RemoteInspectorConnectionClient.h:
        * inspector/remote/socket/RemoteInspectorServer.cpp:
        (Inspector::RemoteInspectorServer::start):
        (Inspector::RemoteInspectorServer::doAccept):
        * inspector/remote/socket/RemoteInspectorServer.h:
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::didClose):
        * inspector/remote/socket/RemoteInspectorSocket.h:
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::RemoteInspectorSocketEndpoint):
        (Inspector::RemoteInspectorSocketEndpoint::~RemoteInspectorSocketEndpoint):
        (Inspector::RemoteInspectorSocketEndpoint::listenInet):
        (Inspector::RemoteInspectorSocketEndpoint::workerThread):
        (Inspector::RemoteInspectorSocketEndpoint::generateConnectionID):
        (Inspector::RemoteInspectorSocketEndpoint::createClient):
        (Inspector::RemoteInspectorSocketEndpoint::disconnect):
        (Inspector::RemoteInspectorSocketEndpoint::createListener):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateClient):
        (Inspector::RemoteInspectorSocketEndpoint::invalidateListener):
        (Inspector::RemoteInspectorSocketEndpoint::getPort const):
        (Inspector::RemoteInspectorSocketEndpoint::recvIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::sendIfEnabled):
        (Inspector::RemoteInspectorSocketEndpoint::send):
        (Inspector::RemoteInspectorSocketEndpoint::acceptInetSocketIfEnabled):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.h:

2020-09-21  Keith Miller  <keith_miller@apple.com>

        Functions should consistently enumerate length before name
        https://bugs.webkit.org/show_bug.cgi?id=216789

        Reviewed by Yusuke Suzuki.

        In https://github.com/tc39/ecma262/pull/2116, which has been
        approved to be merged into the main JS spec, it's expected that
        all functions should have their length property enumerated before
        the name property. To ensure this invariant, this patch moves the
        length set into InternalFunction::finishCreation.

        There are no new tests since tests will be added to test262 when
        the spec PR is merged. Adding tests to stress just means we will
        have the same test twice, which seems like a waste.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::finishCreation):
        * API/ObjCCallbackFunction.mm:
        (JSC::ObjCCallbackFunction::create):
        * API/glib/JSCCallbackFunction.cpp:
        (JSC::JSCCallbackFunction::create):
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::AggregateErrorConstructor::finishCreation):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::finishCreation):
        * runtime/AsyncFunctionConstructor.cpp:
        (JSC::AsyncFunctionConstructor::finishCreation):
        * runtime/AsyncGeneratorFunctionConstructor.cpp:
        (JSC::AsyncGeneratorFunctionConstructor::finishCreation):
        * runtime/BigIntConstructor.cpp:
        (JSC::BigIntConstructor::finishCreation):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::finishCreation):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::finishCreation):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        * runtime/FinalizationRegistryConstructor.cpp:
        (JSC::FinalizationRegistryConstructor::finishCreation):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::finishCreation):
        * runtime/GeneratorFunctionConstructor.cpp:
        (JSC::GeneratorFunctionConstructor::finishCreation):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        (JSC::InternalFunction::createFunctionThatMasqueradesAsUndefined):
        * runtime/InternalFunction.h:
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::IntlCollatorConstructor::finishCreation):
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructor::finishCreation):
        * runtime/IntlDisplayNamesConstructor.cpp:
        (JSC::IntlDisplayNamesConstructor::finishCreation):
        * runtime/IntlLocaleConstructor.cpp:
        (JSC::IntlLocaleConstructor::finishCreation):
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructor::finishCreation):
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::IntlPluralRulesConstructor::finishCreation):
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        (JSC::IntlRelativeTimeFormatConstructor::finishCreation):
        * runtime/IntlSegmenterConstructor.cpp:
        (JSC::IntlSegmenterConstructor::finishCreation):
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::finishCreation):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):
        * runtime/JSTypedArrayViewConstructor.cpp:
        (JSC::JSTypedArrayViewConstructor::finishCreation):
        * runtime/MapConstructor.cpp:
        (JSC::MapConstructor::finishCreation):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructorBase::finishCreation):
        * runtime/NullGetterFunction.h:
        * runtime/NullSetterFunction.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::finishCreation):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        * runtime/ProxyConstructor.cpp:
        (JSC::ProxyConstructor::finishCreation):
        * runtime/ProxyRevoke.cpp:
        (JSC::ProxyRevoke::finishCreation):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::finishCreation):
        * runtime/SetConstructor.cpp:
        (JSC::SetConstructor::finishCreation):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::finishCreation):
        * runtime/SymbolConstructor.cpp:
        (JSC::SymbolConstructor::finishCreation):
        * runtime/WeakMapConstructor.cpp:
        (JSC::WeakMapConstructor::finishCreation):
        * runtime/WeakObjectRefConstructor.cpp:
        (JSC::WeakObjectRefConstructor::finishCreation):
        * runtime/WeakSetConstructor.cpp:
        (JSC::WeakSetConstructor::finishCreation):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::WebAssemblyCompileErrorConstructor::finishCreation):
        * wasm/js/WebAssemblyGlobalConstructor.cpp:
        (JSC::WebAssemblyGlobalConstructor::finishCreation):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::WebAssemblyInstanceConstructor::finishCreation):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::WebAssemblyLinkErrorConstructor::finishCreation):
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        (JSC::WebAssemblyMemoryConstructor::finishCreation):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::WebAssemblyRuntimeErrorConstructor::finishCreation):
        * wasm/js/WebAssemblyTableConstructor.cpp:
        (JSC::WebAssemblyTableConstructor::finishCreation):

2020-09-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Proxy should be trapped if base value is primitive
        https://bugs.webkit.org/show_bug.cgi?id=216764

        Reviewed by Darin Adler.

        While we have special care in JSObject::putInline etc., we missed it in JSValue::putToPrimitive.
        So, if proxy exists in the prototype chain for the primitive values (e.g. StringPrototype -> Proxy chain),
        we miss the Proxy trap. We should have ProxyObject special check in JSValue::putToPrimitive too.

        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::putToPrimitive):

2020-09-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Drop Options::useBigInt
        https://bugs.webkit.org/show_bug.cgi?id=216743

        Reviewed by Darin Adler.

        Now BigInt is shipped. Let's just remove Options::useBigInt.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::parseHex):
        (JSC::Lexer<T>::parseBinary):
        (JSC::Lexer<T>::parseOctal):
        (JSC::Lexer<T>::parseDecimal):
        * runtime/JSGlobalObject.h:
        * runtime/OptionsList.h:

2020-09-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, use RELEASE_AND_RETURN to suppress exception verification failure
        https://bugs.webkit.org/show_bug.cgi?id=216686
        <rdar://problem/69157632>

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::defineOwnProperty):

2020-09-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Generator declaration should not be allowed in single statement context
        https://bugs.webkit.org/show_bug.cgi?id=216720

        Reviewed by Ross Kirsling.

        Generator declaration in single statement context (like the following code) should be syntax error.
        We already made async function / async generator function syntax error. We should apply the same rule
        to generator declaration too.

            if (false)
                function * gen() { }

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseSingleFunction):
        (JSC::Parser<LexerType>::parseStatement):
        (JSC::Parser<LexerType>::parseFunctionDeclarationStatement):
        (JSC::Parser<LexerType>::parseFunctionDeclaration):
        (JSC::Parser<LexerType>::parseExportDeclaration):
        * parser/Parser.h:

2020-09-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] PreciseAllocation's isNewlyAllocated flag should be propagated from isMarked at GC begin phase to make isLive correct
        https://bugs.webkit.org/show_bug.cgi?id=216717

        Reviewed by Mark Lam.

        When starting full GC, at beginMarking, PreciseAllocation's mark bit is cleared to be usable for upcoming marking.
        However, this means that HeapCell::isLive will see this object as dead until it is marked.
        Let's consider that this object is not newly allocated one. Then, its isNewlyAllocated is false. And now mark bit
        is also cleared. Since PreciseAllocation::isLive is isNewlyAllocated || isMarked, then it looks dead, while it is live.
        This confuses HeapCell:isLive function and makes some of watchpoints perform wrong decisions (e.g. this condition is
        no longer valid, let's just discard it).
        At the beginning of full collection, we should propagate the old mark bit to isNewlyAllocated so that it looks live
        during marking. This is similar trick to MarkedBlock::aboutToMark.

        * heap/PreciseAllocation.cpp:
        (JSC::PreciseAllocation::flip):

2020-09-18  Saam Barati  <sbarati@apple.com>

        console APIs shouldn't crash making a string that's too long for a console warning when using user provided labels
        https://bugs.webkit.org/show_bug.cgi?id=216709
        <rdar://problem/68275357>

        Reviewed by Mark Lam and Devin Rousso.

        Various console APIs send warnings when a label can't be found. These warnings
        include the label itself. If this label has a long enough length, when we make
        these warning strings, we can crash, because we exceed max string length.
        This patch fixes this by truncating the label everywhere it's used if it
        exceeds a length of 10000.

        * inspector/JSGlobalObjectConsoleClient.cpp:
        (Inspector::JSGlobalObjectConsoleClient::profile):
        * inspector/ScriptArguments.h:
        * inspector/agents/InspectorConsoleAgent.cpp:
        (Inspector::InspectorConsoleAgent::startTiming):
        (Inspector::InspectorConsoleAgent::logTiming):
        (Inspector::InspectorConsoleAgent::stopTiming):
        (Inspector::InspectorConsoleAgent::count):
        (Inspector::InspectorConsoleAgent::countReset):

2020-09-18  Keith Miller  <keith_miller@apple.com>

        DFG should ensure there are PhantomLocals for the taken block of op_jneq_ptr
        https://bugs.webkit.org/show_bug.cgi?id=216669

        Reviewed by Saam Barati.

        Right now, if there is a local that is live on the taken branch but dead on
        not-taken branch then nothing will preserve it for OSR exit. This patch simply
        adds a PhantomLocal for each live operand for the first bytecode of the taken block.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2020-09-18  Paulo Matos  <pmatos@igalia.com>

        Unified build fixes from ARMv7 build failures
        https://bugs.webkit.org/show_bug.cgi?id=216698

        Reviewed by Adrian Perez de Castro.

        * llint/LLIntThunks.cpp:
        * runtime/FileBasedFuzzerAgent.cpp:
        * runtime/FunctionExecutableDump.cpp:
        * runtime/NativeExecutable.cpp:
        * runtime/WeakMapImpl.cpp:

2020-09-17  Mark Lam  <mark.lam@apple.com>

        Use OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) in speculationFromCell()'s isSanePointer().
        https://bugs.webkit.org/show_bug.cgi?id=216638

        Reviewed by Saam Barati.

        We should be using OS_CONSTANT(EFFECTIVE_ADDRESS_WIDTH) instead of assuming the
        width of the pointer address bits.

        * bytecode/SpeculatedType.cpp:
        (JSC::isSanePointer):

2020-09-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r266885): fix open source build
        https://bugs.webkit.org/show_bug.cgi?id=216675

        Reviewed by Timothy Hatcher.

        Add back methods used by `WebInspector.framework`.

        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::getInteger): Added.
        (Inspector::BackendDispatcher::getDouble): Added.
        (Inspector::BackendDispatcher::getString): Added.

2020-09-17  Tadeu Zagallo  <tzagallo@apple.com>

        Inconsistent loop exit assertion in B3ReduceLoopStrength
        https://bugs.webkit.org/show_bug.cgi?id=216274
        <rdar://problem/68513573>

        Reviewed by Keith Miller.

        On B3ReduceLoopStrength, we first calculate where the loop exits to, and ensure there's only
        one exit target. Later on, we compute how many places within the loop exit to that single exit
        target. Currently, we assume that having a single target implies that we'll only ever have one
        exit point, which is incorrect. To fix it, instead of asserting there should only be one exit
        point, we just bail if we find more than one.

        * b3/B3ReduceLoopStrength.cpp:
        (JSC::B3::ReduceLoopStrength::reduceByteCopyLoopsToMemcpy):

2020-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Async generator default-export is not handled
        https://bugs.webkit.org/show_bug.cgi?id=216643

        Reviewed by Ross Kirsling.

        `export default async function * test() { }` syntax should be correctly handled.
        This patch adds the code retrieving "test" name from the above declaration correctly.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseExportDeclaration):

2020-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Update JSModuleNamespaceObject::defineOwnProperty
        https://bugs.webkit.org/show_bug.cgi?id=216640

        Reviewed by Ross Kirsling.

        This patch implements spec update of JSModuleNamespaceObject::defineOwnProperty.
        We implement https://tc39.es/ecma262/#sec-module-namespace-exotic-objects-defineownproperty-p-desc precisely.

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):
        (JSC::JSModuleNamespaceObject::deleteProperty):
        (JSC::JSModuleNamespaceObject::getOwnPropertyNames):
        (JSC::JSModuleNamespaceObject::defineOwnProperty):

2020-09-17  Mark Lam  <mark.lam@apple.com>

        Add some pointer sanity checks to speculationFromCell().
        https://bugs.webkit.org/show_bug.cgi?id=216638
        rdar://23226333

        Reviewed by Yusuke Suzuki.

        Add some sanity checks to mitigate against some potential pointer corruptions
        from profiling data.  The goal here is not to exhaustively filter out all possible
        bad pointers, but simply to filter out as many as possible to reduce crashes from
        such bad pointers, and to do so with the least possible performance impact.

        It is OK to do such filtering here because we're only trying to compute a
        SpeculatedType from the pointer.  If the pointer is bad, we can just return
        SpecNone indicating that we don't have any info to speculate on.

        * bytecode/SpeculatedType.cpp:
        (JSC::isSanePointer):
        (JSC::speculationFromCell):
        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::tryGet):
        * runtime/VM.h:
        (JSC::VM::tryGetStructure):

2020-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Support export namespace `export * as ns`
        https://bugs.webkit.org/show_bug.cgi?id=214379

        Reviewed by Ross Kirsling.

        This patch supports `export * as ns from "module"` syntax. If it is used, we expose "module"'s namespace object as "ns".
        For each module environment, we create *namespace* (starNamespace) private symbol scope variable. And we fill it later
        with module namespace object. This way allows us to use module namespace object IC and super fast imported module binding
        lookup though environment variable lookup mechanism.

        * builtins/BuiltinNames.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * parser/NodesAnalyzeModule.cpp:
        (JSC::ExportNamedDeclarationNode::analyzeModule):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseExportDeclaration):
        * runtime/AbstractModuleRecord.cpp:
        (JSC::AbstractModuleRecord::ExportEntry::createNamespace):
        (JSC::AbstractModuleRecord::resolveExportImpl):
        (JSC::AbstractModuleRecord::getModuleNamespace):
        (JSC::AbstractModuleRecord::setModuleEnvironment):
        (JSC::AbstractModuleRecord::dump):
        * runtime/AbstractModuleRecord.h:
        * runtime/CommonIdentifiers.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::name):
        (JSC::JSFunction::reifyName):
        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):
        * runtime/JSModuleRecord.cpp:
        (JSC::JSModuleRecord::instantiateDeclarations):
        (JSC::JSModuleRecord::evaluate):
        * wasm/js/JSWebAssemblyModule.cpp:
        (JSC::JSWebAssemblyModule::finishCreation):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):

2020-09-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Optimize Promise#finally by avoiding creating multiple environments
        https://bugs.webkit.org/show_bug.cgi?id=216637

        Reviewed by Ross Kirsling.

        Let's just create functions inside Promise#finally. This avoids creating
        multiple lexical environments that are captured by each function.

        * builtins/PromisePrototype.js:
        (finally):
        (globalPrivate.getThenFinally): Deleted.
        (globalPrivate.getCatchFinally): Deleted.

2020-09-16  Saam Barati  <sbarati@apple.com>

        Don't IC a null custom accessor/value setter
        https://bugs.webkit.org/show_bug.cgi?id=216620
        <rdar://problem/68976066>

        Reviewed by Mark Lam.

        Our runtime allows CustomGetterSetter objects setter field to not contain an
        actual C function to call. In such a scenario, the runtime just does nothing
        except return false to the ::put code (which may result in throwing an
        exception in strict mode code). 
        
        However, our IC code never considered whether this function could be nullptr.
        The fix here is simple: don't IC such custom accessor/value setters.

        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::isCacheableCustom const):

2020-09-16  Philippe Normand  <pnormand@igalia.com>

        [Flatpak SDK][WPE] Launching the remote inspector kills MB
        https://bugs.webkit.org/show_bug.cgi?id=213899

        Reviewed by Adrian Perez de Castro.

        Load inspector resources from developer build artefacts, when the inspector server is
        running in this configuration. Fall back to system libraries loading mechanism otherwise.

        * inspector/remote/glib/RemoteInspectorUtils.cpp:
        (Inspector::backendCommands):

2020-09-16  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early September 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=216599

        Unreviewed build fix.

        Largely based on a patch by Lauro Moura <lmoura@igalia.com>

        * runtime/IntlCache.cpp: Add missing wtf/Vector.h include.
        * runtime/IntlCache.h: Add missing wtf/text/CString.h include.
        * runtime/IntlNumberFormatPrototype.cpp: Replace IntlNumberFormat.h
        include with IntlNumberFormatInlines.h to fix linking.

2020-09-15  Saam Barati  <sbarati@apple.com>

        JSImmutableButterfly::get needs to return jsDoubleNumber for double arrays
        https://bugs.webkit.org/show_bug.cgi?id=216589
        <rdar://problem/68061245>

        Reviewed by Yusuke Suzuki.

        We are using JSImmutableButterfly::get in AI to constant fold GetByVal,
        but we were failing to always return a boxed double value for double loads.
        We were calling jsNumber instead of jsDooubleNumber. This is in contrast to
        the runtime, which always returns a double boxed value. This would lead AI
        to disagree with the runtime, and miscompile code.

        * runtime/JSImmutableButterfly.h:
        (JSC::JSImmutableButterfly::get const):

2020-09-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Cache UDateTimePatternGenerator
        https://bugs.webkit.org/show_bug.cgi?id=213454

        Reviewed by Ross Kirsling.

        ICU udatpg_open function is particularly slow. As a result, 80~% of time is used by this function when calling Date#toLocaleString.
        We should have last-used cache in VM, which covers major cases like, "One locale (possibly default locale) is used and continuously
        use toLocaleString with that locale".

        This significantly improves toLocaleString / toLocaleDateString / toLocaleTimeString performance.

                                                   ToT                     Patched

            date-to-locale-string           392.0092+-0.6811     ^     87.3196+-3.1598        ^ definitely 4.4894x faster
            date-to-locale-date-string      377.9117+-7.8701     ^     70.4155+-3.6661        ^ definitely 5.3669x faster
            date-to-locale-time-string      373.1970+-3.0142     ^     67.3790+-2.8952        ^ definitely 5.5388x faster


        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/IntlCache.cpp: Added.
        (JSC::IntlCache::cacheSharedPatternGenerator):
        (JSC::IntlCache::getBestDateTimePattern):
        * runtime/IntlCache.h: Added.
        (JSC::IntlCache::getSharedPatternGenerator):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        (JSC::VM::intlCache):

2020-09-15  HyeockJin Kim  <kherootz@gmail.com>

        Check whether the iterator is callable in spread
        https://bugs.webkit.org/show_bug.cgi?id=215974

        Reviewed by Darin Adler.

        * builtins/IteratorHelpers.js:
        (performIteration):

2020-09-15  Tadeu Zagallo  <tzagallo@apple.com>

        Object allocation sinking forgets escaped nodes when structure changes
        https://bugs.webkit.org/show_bug.cgi?id=216214
        <rdar://problem/68518460>

        Reviewed by Saam Barati.

        Consider the following program:
            bb0:
                a: NewObject
                b: CreateActivation()
                _: Branch(bb2, bb1)
            bb1:
                _: PutByOffset(a, 'x', 42)
                _: PutStrucute(a, {x: 0})
                _: Branch(bb2, bb1)
            bb2:
                _: CheckStructure(a, {x: 0})
                _: PutClosureVar(b, 0, Kill:a)
                _: Branch(bb3, bb2)
            bb3:
                c: GetClosureVar(b, 0)
                _: PutByOffset(global, 'y', c)
                _: Return

        Due to the order we visit the program, we'll visit bb2 before bb1. The first time we visit bb2, heapAtHead will be:
            #@a: ObjectAllocation({})
            #@b: ActivationAllocation()
            @a => #@a
            @b => #@b

        Now CheckStructure would always fail, so it will escape @a and heapAtTail will be:
            #@a: EscapedAllocation()
            #@b: ActivationAllocation()
            @a => #@a
            @b => #@b

        And after pruning:
            #@b: ActivationAllocation()
            @b => #@b

        Now, we'll visit bb3 and then bb1. When we visit bb1 we'll set the structure {x: 0} for the #@a and eventually visit bb2 again. This time around CheckStructure will no longer escape @a, since the allocation has the right structure, and heapAtTail will be:
            #@a: ObjectAllocation({x: 0})
            #@b: ActivationAllocation(0: #@a)
            @b => #@b

        However, we now have to merge into bb3, which has heapAtHead:
            #@b: ActivationAllocation()
            @b => #@b

        Since we can't add the extra field to the activation, we'll end up escaping @a at the edge and therefore pruning #@b, which will leave the heap for bb3 unchanged.
        That's a problem, since PutClosureVar didn't see the escaped object, but GetClosureVar thinks it's escaped. The materialization for @a will be placed after the
        PutClosureVar, at end of bb2, when the node is already dead. When computing the SSA defs, the PutByOffset at bb3 will then see @a (which at this point will be a
        PhantomNewObject) instead of its materialization.

        The issue happens because we don't allow allocations to add extra fields while merging, but we do allow adding new structures. This results in different decisions
        being made about what escapes in CheckStructure and MultiGetByOffset. To avoid this problem, we track two sets of structures: structures and structuresForMaterialization.
        The first is used for checks and should never grow while the second is used for materialization and is allowed to grow.

        * dfg/DFGObjectAllocationSinkingPhase.cpp:

2020-09-15  Saam Barati  <sbarati@apple.com>

        CustomFunctionEquivalence PropertyCondition needs to check if the structure has the property
        https://bugs.webkit.org/show_bug.cgi?id=216575
        <rdar://problem/68286930>

        Reviewed by Yusuke Suzuki.

        The CustomFunctionEquivalence PropertyCondition would only return false to
        isStillValidAssumingImpurePropertyWatchpoint if the Structure's static
        property table was reified or if the static property table did not contain the
        property. However, this missed the obvious case of where we store to this
        property in normal object storage without reifying the static property table.
        The fix here is simple: we first check if the Structure's property table
        has this property, and if so, return false.
        
        This patch also renames CustomFunctionEquivalence to HasStaticProperty to
        better capture what we're doing.

        * bytecode/ObjectPropertyCondition.h:
        (JSC::ObjectPropertyCondition::hasStaticProperty):
        (JSC::ObjectPropertyCondition::customFunctionEquivalence): Deleted.
        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::ObjectPropertyConditionSet::hasOneSlotBaseCondition const):
        (JSC::ObjectPropertyConditionSet::slotBaseCondition const):
        (JSC::generateConditionsForPrototypePropertyHitCustom):
        * bytecode/PropertyCondition.cpp:
        (JSC::PropertyCondition::dumpInContext const):
        (JSC::PropertyCondition::isStillValidAssumingImpurePropertyWatchpoint const):
        (JSC::PropertyCondition::validityRequiresImpurePropertyWatchpoint const):
        (JSC::PropertyCondition::isStillValid const):
        (JSC::PropertyCondition::isWatchableWhenValid const):
        (WTF::printInternal):
        * bytecode/PropertyCondition.h:
        (JSC::PropertyCondition::hasStaticProperty):
        (JSC::PropertyCondition::hash const):
        (JSC::PropertyCondition::operator== const):
        (JSC::PropertyCondition::customFunctionEquivalence): Deleted.
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateStaticCustomValue):
        (JSC::JSDollarVM::finishCreation):

2020-09-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Apply Intl.DateTimeFormat hour-cycle correctly when timeStyle is used
        https://bugs.webkit.org/show_bug.cgi?id=216521

        Reviewed by Ross Kirsling.

        When specifying timeStyle in Intl.DateTimeFormat, we need to check that the generated format also follows to the hourCycle / hour12 options
        specified in the constructor. Because dayPeriod can be included automatically, just replacing symbols after generating a pattern can dump strange result.
        For example, the generated one is something like "02:12:47 PM Coordinated Universal Time". And we adjust the pattern to make it "14:12:47 PM Coordinated Universal Time"
        when hourCycle H23 / H24 is specified. But this looks strange since dayPeriod "PM" should not exist when using H23 / H24.

        In this patch, we revise our hour-cycle handling in Intl.DateTimeFormat. We align our behavior to SpiderMonkey's one[1] rather than the spec's one: when hour12 is specified,
        we will just use 'H' or 'h' skeleton and do not enforce hour-cycle after generating pattern in hour12 case. If hour12 is not specified, then we use 'h' or 'H' skeleton
        symbols based on hour-cycle, and later we modify the pattern based on hour-cycle. If both are not offered, we use 'j' which allows ICU to pick preferable one.
        This is slightly different behavior to the spec (hcDefault etc.) but the spec's behavior can cause a bit surprising result[2,3], and SpiderMonkey like behavior will be
        integrated into the spec eventually[4].

        [1]: https://github.com/tc39/ecma402/issues/402#issuecomment-623628320
        [2]: https://github.com/tc39/ecma402/issues/402
        [3]: https://bugs.chromium.org/p/chromium/issues/detail?id=1045791
        [4]: https://github.com/tc39/ecma402/pull/436

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        (JSC::IntlDateTimeFormat::parseHourCycle):
        (JSC::IntlDateTimeFormat::hourCycleFromPattern):
        (JSC::IntlDateTimeFormat::replaceHourCycleInSkeleton):
        (JSC::IntlDateTimeFormat::replaceHourCycleInPattern):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::hourCycleString):
        (JSC::IntlDateTimeFormat::resolvedOptions const):
        (JSC::IntlDateTimeFormat::createDateIntervalFormatIfNecessary):
        * runtime/IntlDateTimeFormat.h:

2020-09-14  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl.Collator should take collation option
        https://bugs.webkit.org/show_bug.cgi?id=216529

        Reviewed by Ross Kirsling.

        This patch adds "collation" option to Intl.Collator. We are already getting consensus[1], and will be integrated into the spec.
        Previously, passing "collation" is only available through "-u-co-" unicode extension in the passed locale. The proposal exposes
        collation option as an option to Intl.Collator so that we can set it easily.
        "collation" is used only when "usage" is "sort". "search" usage will filter out collation options since "search" itself is one of
        the "collation" option.

        [1]: https://github.com/tc39/ecma402/pull/459

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::sortLocaleData):
        (JSC::IntlCollator::initializeCollator):

2020-09-15  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r228533.
        warning: ‘%40s’ directive argument is null [-Wformat-overflow=]

        Since gcc which has version >= 9 is stricter about passing null string
        pointers to printf-like functions, add null string pointer check
        to fix the warning proactively.

        * jsc.cpp:
        (runJSC):

2020-09-14  Keith Miller  <keith_miller@apple.com>

        BytecodeParser should GetLocal op_ret's value even if it's unused by the caller
        https://bugs.webkit.org/show_bug.cgi?id=216506

        Reviewed by Mark Lam.

        We have to unconditionally GetLocal operands each bytecode claims to use
        regardless of true liveness. This is important to keep OSRAvailability simple.
        However, op_ret would only GetLocal the return value if we knew the value
        was going to be used by an inline caller.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2020-09-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        Proxy's "ownKeys" trap result should not be sorted
        https://bugs.webkit.org/show_bug.cgi?id=216227

        Reviewed by Yusuke Suzuki.

        Given that we can't know whether ownPropertyKeys() received property names from
        userland Proxy's "ownKeys" trap, this patch moves symbols after strings sorting [1]
        to Structure::getPropertyNamesFromStructure(), aligning observed property order
        (via Proxy's "getOwnPropertyDescriptor" trap) with V8 and SpiderMonkey.

        Also, removes sorting logic duplication in objectConstructorAssign().

        This change is neutral on provided Reflect.ownKeys microbenchmark. Although property
        name collection besides PropertyNameMode::StringsAndSymbols cases is unaffected,
        Object.{keys,getOwnPropertySymbols} microbenchmarks regress by 6-12% due to
        increased Structure::getPropertyNamesFromStructure() code size.

        [1]: https://tc39.es/ecma262/#sec-ordinaryownpropertykeys (steps 3-4)

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorAssign):
        (JSC::ownPropertyKeys):
        * runtime/Structure.cpp:
        (JSC::Structure::getPropertyNamesFromStructure):

2020-09-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        ArraySetLength should coerce [[Value]] before descriptor validation
        https://bugs.webkit.org/show_bug.cgi?id=158791

        Reviewed by Darin Adler.

        This patch:

        1. Moves [[Value]] coercion before descriptor validation as per spec [1],
           which fixes ASSERT() failure and aligns JSC with V8 & SpiderMonkey.

        2. Prevents JSArray::setLengthWithArrayStorage() from throwing if the length
           is unchanged, even if it's read-only [2].

        3. Refactors JSArray::defineOwnProperty() leveraging #2 to always perform
           setLength(), which greatly reduces the number of checks, branches,
           and setLengthWritable() calls.

        Following the ArraySetLength spec steps precisely [1] would result in
        more difficult-to-follow code because descriptor validation [2] is inlined
        and [[Delete]] failures are handled in setLength().

        This change is performance-neutral as it doesn't affect JSArray::put(),
        which was vetted to be spec-correct and is covered by test262 suite.

        [1]: https://tc39.es/ecma262/#sec-arraysetlength (steps 3-4)
        [2]: https://tc39.es/ecma262/#sec-validateandapplypropertydescriptor (step 7.a.ii)

        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::setLengthWithArrayStorage):

2020-09-14  Saam Barati  <sbarati@apple.com>

        Remove bogus asserts in FTLLower that assume programs are compiled with sensible speculations
        https://bugs.webkit.org/show_bug.cgi?id=216485
        <rdar://problem/68562804>

        Reviewed by Keith Miller.

        We had an assert inside lowCell that if a value was not part of the JSValue
        hashmap of values, then the type must not conform to being a cell. However,
        consider a program like this:
        
        ```
        x = ArithAdd(i32, i32) <-- x is an i32 here
        if (b) {
            Check(Cell:@x)
            ArrayifyToStructure(@x, thingy)
        }
        <-- HERE
        ```
        
        @x will live in FTLLower's i32 hashmap, but because of the AI rule for
        ArrayifyToStructure, it will also have SpecCell in its type. This is totally
        valid, and asserting that this isn't possible is wrong. (Obviously the above
        speculation is stupid, as we will always exit at the Check, but it's valid IR.)
        
        This patch removes this assertion from lowCell, and removes similar assertions
        from other low* functions.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lowInt32):
        (JSC::FTL::DFG::LowerDFGToB3::lowInt52):
        (JSC::FTL::DFG::LowerDFGToB3::lowCell):
        (JSC::FTL::DFG::LowerDFGToB3::lowBoolean):
        (JSC::FTL::DFG::LowerDFGToB3::lowDouble):

2020-09-14  Alexey Shvayka  <shvaikalesh@gmail.com>

        Make a few built-in methods throw if called as top-level functions
        https://bugs.webkit.org/show_bug.cgi?id=216467

        Reviewed by Darin Adler.

        Non-strict userland functions substitute undefined & null `this` values
        with the global object [1], while built-in functions do not [2].

        This patch adds 5 missing toThis(globalObject, ECMAMode::strict()) calls,
        preventing built-in methods from being called as top-level functions:

        ```
        let {toString} = Error.prototype;
        toString(); // now throws TypeError
        ```

        Aligns JSC with V8 and SpiderMonkey.
        This change is performance-neutral due to DFG inlining of OpToThis.
        All other callFrame->thisValue() usages were vetted to be spec-correct.

        [1]: https://tc39.es/ecma262/#sec-ordinarycallbindthis (step 6.a.iii)
        [2]: https://tc39.es/ecma262/#sec-built-in-function-objects-call-thisargument-argumentslist (step 10)

        * runtime/ArrayPrototype.cpp:
        (JSC::createArrayIteratorObject):
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToPrimitiveSymbol):
        (JSC::dateProtoFuncToJSON):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

2020-09-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r266885): dyld: Symbol not found: __ZN9Inspector17BackendDispatcher12sendResponseElON3WTF6RefPtrINS1_8JSONImpl6ObjectENS1_13DumbPtrTraitsIS4_EEEEb
        https://bugs.webkit.org/show_bug.cgi?id=216486

        Reviewed by Joseph Pecoraro.

        * inspector/InspectorBackendDispatcher.h:
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::sendResponse):
        Add back overloads removed in r266885 so that the symbols exist.

2020-09-14  Saam Barati  <sbarati@apple.com>

        Don't assume byte code operands are uint32 JSValues
        https://bugs.webkit.org/show_bug.cgi?id=216386

        Reviewed by Yusuke Suzuki.

        The slow path for enumerator_generic_pname was assuming that its input index operand
        would always be a UInt32 JSValue boxed as int32. However, this assumption isn't true
        because that value can have double format in the DFG, and remain in that format when
        we exit from the DFG to baseline/LLInt code.
        
        This was found via the widening number fuzzing agent.
        
        I also audited two more places that seem like they suffer from the same issue,
        and also switched them to using the asUInt32AsAnyInt function:
        - enumerator_structure_pname
        - create_rest

        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2020-09-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Canonicalize "true" unicode extension type value to ""
        https://bugs.webkit.org/show_bug.cgi?id=216224

        Reviewed by Ross Kirsling.

        Unicode Technical Standard #35 defines that unicode extension type's "true" should be converged to "".
        This patch implements it by extracting unicode extension subtags and replacing "true" to "".

        * runtime/IntlLocale.cpp:
        (JSC::LocaleIDBuilder::toCanonical):
        (JSC::IntlLocale::keywordValue const):
        (JSC::IntlLocale::calendar):
        (JSC::IntlLocale::caseFirst):
        (JSC::IntlLocale::collation):
        (JSC::IntlLocale::hourCycle):
        (JSC::IntlLocale::numberingSystem):
        (JSC::IntlLocale::numeric):
        * runtime/IntlLocale.h:
        * runtime/IntlLocalePrototype.cpp:
        (JSC::IntlLocalePrototypeGetterCalendar):
        (JSC::IntlLocalePrototypeGetterCaseFirst):
        (JSC::IntlLocalePrototypeGetterCollation):
        (JSC::IntlLocalePrototypeGetterHourCycle):
        (JSC::IntlLocalePrototypeGetterNumberingSystem):
        * runtime/IntlObject.cpp:
        (JSC::unicodeExtensionSubTags):
        (JSC::canonicalizeUnicodeExtensionsAfterICULocaleCanonicalization):
        (JSC::languageTagForLocaleID):
        (JSC::resolveLocale):
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::computeTwoCharacters16Code):
        * runtime/StringPrototype.cpp:
        (JSC::computeTwoCharacters16Code): Deleted.

2020-09-11  Yusuke Suzuki  <yusukesuzuki@slowstart.org>

        [JSC] attribute-change transition should not pin Structure
        https://bugs.webkit.org/show_bug.cgi?id=215528

        Reviewed by Saam Barati.

        This patch avoids using pin in attribute-change transition. To achieve this, attribute-change transition is now fully supported
        transition chain in forEachPropertyConcurrently etc.: we can retrieve properties with changed attributes correctly via traversing
        transition chain. And we also support attribute-change transition in materializePropertyTable, so we do not need to pin structure.

        The design largely mimics existing removePropertyTransition and addPropertyTransition. This patch also adds `hasBeenDictionary()`
        check before adding structure to the transition so that we can avoid adding unnecessary structure entry to the transition table.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
        * jit/Repatch.cpp:
        (JSC::tryCacheDeleteBy):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::removePropertyTransitionFromExistingStructureImpl):
        (JSC::Structure::removeNewPropertyTransition):
        (JSC::Structure::attributeChangeTransitionToExistingStructure):
        (JSC::Structure::attributeChangeTransition):
        (JSC::Structure::nonPropertyTransitionSlow):
        (JSC::Structure::attributeChange):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::forEachPropertyConcurrently):
        (JSC::Structure::attributeChange):
        (JSC::Structure::attributeChangeWithoutTransition):
        * tools/JSDollarVM.cpp:
        (JSC::JSDollarVMHelper::functionGetStructureTransitionList):

2020-09-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] customGetterSetterFunctionCall should have proper exception checking
        https://bugs.webkit.org/show_bug.cgi?id=216391
        <rdar://problem/68631643>

        Reviewed by Mark Lam.

        Add appropriate exception checking to customGetterSetterFunctionCall.

        * runtime/JSCustomGetterSetterFunction.cpp:
        (JSC::JSCustomGetterSetterFunction::customGetterSetterFunctionCall):

2020-09-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add exception checks to JSCallbackObject
        https://bugs.webkit.org/show_bug.cgi?id=216384
        <rdar://problem/68632190>

        Reviewed by Saam Barati.

        This patch adds necessary exception checks to JSCallbackObject to suppress exception verifier crash in Debug build.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getOwnPropertySlot):
        (JSC::JSCallbackObject<Parent>::defaultValue):
        (JSC::JSCallbackObject<Parent>::put):
        (JSC::JSCallbackObject<Parent>::putByIndex):
        (JSC::JSCallbackObject<Parent>::deleteProperty):
        (JSC::JSCallbackObject<Parent>::staticFunctionGetter):

2020-09-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] agent start function should move isolated copy of source
        https://bugs.webkit.org/show_bug.cgi?id=216383
        <rdar://problem/66371008>

        Reviewed by Saam Barati.

        We are calling `isolatedCopy()` and setting it to variable in caller thread. And we are copying it to the thread.
        This means that ref-count will happen in caller thread and callee thread, this is wrong.
        We should pass isolatedCopy string directly to the callee thread.

        * jsc.cpp:
        (functionDollarAgentStart):

2020-09-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] unshift / shift should take structure lock
        https://bugs.webkit.org/show_bug.cgi?id=216378
        <rdar://problem/68496096>

        Reviewed by Mark Lam.

        When unshifting / shifting butterfly, we need to move property storage values too.
        If property storage values are moved while concurrent JIT compiler is accessing it, it could include garbage value.

        For example, concurrent JIT compiler is accessing [2] property storage.

                            1          2         3
                       [ JSValue ][ JSValue ][ Header ]

        But unshift moved it like this.

                            1          2         3
            [ JSValue ][ JSValue ][ Header ]

        Since butterfly pointer held by JSObject is not updated yet, concurrent JIT compiler will read [ Header ] as JSValue and crash.
        In this patch, we take structure lock when shifting existing butterfly since this affect on property storage. Since JSObject::getDirectConcurrently
        takes a structure lock, this locking prevents concurrent compilers from getting an invalid value.

        * runtime/JSArray.cpp:
        (JSC::JSArray::unshiftCountSlowCase):
        (JSC::JSArray::shiftCountWithArrayStorage):
        (JSC::JSArray::unshiftCountWithArrayStorage):

2020-09-10  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r266885.
        warning: redundant move in return statement [-Wredundant-move]

        Because return statement already returns rvalue reference,
        we don't need WTFMove at return.

        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::getRuntimeTypesForVariablesAtOffsets):
        (Inspector::InspectorRuntimeAgent::getBasicBlocks):

2020-09-10  Alexey Shvayka  <shvaikalesh@gmail.com>

        Promise.prototype.finally should perform PromiseResolve
        https://bugs.webkit.org/show_bug.cgi?id=176006

        Reviewed by Yusuke Suzuki.

        This patch extracts @promiseResolve global private function and utilizes it in
        Promise.prototype.finally then/catch functions [1] to avoid creating an extra
        Promise Capability. Aligns JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-thenfinallyfunctions (step 7)

        * builtins/PromiseConstructor.js:
        (resolve):
        * builtins/PromiseOperations.js:
        (globalPrivate.promiseResolve):
        * builtins/PromisePrototype.js:
        (globalPrivate.getThenFinally):
        (globalPrivate.getCatchFinally):

2020-09-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: modernize generated backend protocol code
        https://bugs.webkit.org/show_bug.cgi?id=216302
        <rdar://problem/68547649>

        Reviewed by Brian Burg.

        Previously, the inspector protocol was expressed in code in a somewhat confusing way:
         - the error string was the first argument
         - required parameters were `T` or `const T&`
         - optional parameters were `const T*`
         - enum parameters were the underlying type requiring the backend dispatcher handler to
           process it instead of it being preprocessed
         - required returns were `T&`
         - optional returns were `T*`
        This doesn't really make for easy/obvious reading of code since the order of arguments is
        not weird (e.g. error string first), and that there are references/pointers to primitive
        types.

        This patch cleans up the generated inspector protocol code to be:
         - required parameters are `T` or `Ref<T>&&`
         - optional parameters are `Optional<T>&&` or `RefPtr<T>&&`
         - enum parameters are preprocessed and passed to the backend dispatcher handler if valid
         - synchronous commands return `Expected<X, ErrorString>` using the same types/rules above
           where `X` is either a single return or a `std::tuple` of multiple returns

        The one exception to the above is `String`, which is already a tri-state of `nullString()`,
        `emptyString()`, and something set, so there's no need to use `Optional<String>`.

        Also use `Protocol` objects/`typedefs` wherever possible to further relate the protocol
        JSON and the actual backend dispatcher handler implementation.

        * inspector/scripts/codegen/generator.py:
        (Generator.generate_includes_from_entries):
        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/cpp_generator.py:
        (CppGenerator.helpers_namespace):
        (CppGenerator.cpp_getter_method_for_type):
        (CppGenerator.cpp_setter_method_for_type):
        (CppGenerator.cpp_protocol_type_for_type):
        (CppGenerator.cpp_type_for_type_member_argument): Added.
        (CppGenerator.cpp_type_for_command_parameter): Added.
        (CppGenerator.cpp_type_for_command_return_declaration): Added.
        (CppGenerator.cpp_type_for_command_return_argument): Added.
        (CppGenerator.cpp_type_for_event_parameter): Added.
        (CppGenerator.cpp_type_for_enum): Added.
        (CppGenerator.should_move_argument): Added.
        (CppGenerator.should_release_argument): Added.
        (CppGenerator.should_dereference_argument): Added.
        (CppGenerator.cpp_protocol_type_for_type_member): Deleted.
        (CppGenerator.cpp_type_for_unchecked_formal_in_parameter): Deleted.
        (CppGenerator.cpp_type_for_checked_formal_event_parameter): Deleted.
        (CppGenerator.cpp_type_for_type_member): Deleted.
        (CppGenerator.cpp_type_for_type_with_name): Deleted.
        (CppGenerator.cpp_type_for_formal_out_parameter): Deleted.
        (CppGenerator.cpp_type_for_formal_async_parameter): Deleted.
        (CppGenerator.cpp_type_for_stack_in_parameter): Deleted.
        (CppGenerator.cpp_type_for_stack_out_parameter): Deleted.
        (CppGenerator.cpp_assertion_method_for_type_member): Deleted.
        (CppGenerator.cpp_assertion_method_for_type_member.assertion_method_for_type): Deleted.
        (CppGenerator.should_use_wrapper_for_return_type): Deleted.
        (CppGenerator.should_use_references_for_type): Deleted.
        (CppGenerator.should_pass_by_copy_for_return_type): Deleted.
        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator._generate_secondary_header_includes):
        (CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declaration_for_command):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator.generate_output):
        (CppBackendDispatcherHeaderGenerator._generate_secondary_header_includes):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declaration_for_command):
        (CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declaration_for_command):
        (CppBackendDispatcherHeaderGenerator._generate_anonymous_enum_for_parameter): Deleted.
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator._generate_secondary_header_includes):
        (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator._generate_secondary_header_includes):
        (CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declaration_for_event):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator._generate_secondary_header_includes):
        (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_event):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator._generate_secondary_header_includes):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_secondary_header_includes):
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        (CppProtocolTypesImplementationGenerator._generate_assertion_for_enum):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declaration_for_command):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_implementation_for_command):
        (ObjCBackendDispatcherImplementationGenerator._generate_success_block_for_command):
        (ObjCBackendDispatcherImplementationGenerator._generate_success_block_for_command.and):
        (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command.in_param_expression):
        (ObjCBackendDispatcherImplementationGenerator._generate_conversions_for_command):
        (ObjCBackendDispatcherImplementationGenerator._generate_invocation_for_command):
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator._generate_event):
        (ObjCFrontendDispatcherImplementationGenerator._generate_event_out_parameters):
        * inspector/scripts/codegen/objc_generator_templates.py:
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.protocol_type_for_type):
        (ObjCGenerator.objc_type_for_param_internal):
        (ObjCGenerator.objc_protocol_import_expression_for_parameter):

        * inspector/protocol/Page.json:
        Now that enums are processed before being passed to backend dispacher handlers, the
        `appearance` parameter of `Page.setForcedAppearance` must be marked `optional` as
        there's no way for it to accept an empty string, as that's not possible for an enum.

        * inspector/agents/InspectorAgent.h:
        * inspector/agents/InspectorAgent.cpp:
        * inspector/agents/InspectorAuditAgent.h:
        * inspector/agents/InspectorAuditAgent.cpp:
        * inspector/agents/InspectorConsoleAgent.h:
        * inspector/agents/InspectorConsoleAgent.cpp:
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        * inspector/agents/InspectorHeapAgent.h:
        * inspector/agents/InspectorHeapAgent.cpp:
        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        * inspector/agents/InspectorTargetAgent.h:
        * inspector/agents/InspectorTargetAgent.cpp:
        * inspector/agents/JSGlobalObjectAuditAgent.h:
        * inspector/agents/JSGlobalObjectAuditAgent.cpp:
        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
        * inspector/agents/JSGlobalObjectDebuggerAgent.cpp:
        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
        * inspector/agents/JSGlobalObjectRuntimeAgent.cpp:
        * inspector/JSGlobalObjectConsoleClient.cpp:
        * inspector/JSGlobalObjectInspectorController.cpp:
        Elided backend dispatcher handler changes describe above.

        * bindings/ScriptValue.cpp:
        (Inspector::jsToInspectorValue):
        * inspector/AsyncStackTrace.h:
        * inspector/AsyncStackTrace.cpp:
        (Inspector::AsyncStackTrace::buildInspectorObject const):
        * inspector/ConsoleMessage.cpp:
        (Inspector::ConsoleMessage::addToFrontend):
        * inspector/InjectedScriptBase.h:
        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeEvalCall):
        (Inspector::InjectedScriptBase::checkCallResult):
        (Inspector::InjectedScriptBase::checkAsyncCallResult):
        * inspector/InjectedScript.h:
        * inspector/InjectedScript.cpp:
        (Inspector::InjectedScript::execute):
        (Inspector::InjectedScript::evaluate):
        (Inspector::InjectedScript::callFunctionOn):
        (Inspector::InjectedScript::evaluateOnCallFrame):
        (Inspector::InjectedScript::getFunctionDetails):
        (Inspector::InjectedScript::functionDetails):
        (Inspector::InjectedScript::getPreview):
        (Inspector::InjectedScript::getProperties):
        (Inspector::InjectedScript::getDisplayableProperties):
        (Inspector::InjectedScript::getInternalProperties):
        (Inspector::InjectedScript::getCollectionEntries):
        (Inspector::InjectedScript::saveResult):
        (Inspector::InjectedScript::wrapCallFrames const):
        (Inspector::InjectedScript::wrapObject const):
        (Inspector::InjectedScript::wrapJSONString const):
        (Inspector::InjectedScript::wrapTable const):
        (Inspector::InjectedScript::previewValue const):
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::injectedScriptForObjectId):
        * inspector/InspectorBackendDispatcher.h:
        * inspector/InspectorBackendDispatcher.cpp:
        (Inspector::BackendDispatcher::CallbackBase::sendSuccess):
        (Inspector::BackendDispatcher::dispatch):
        (Inspector::BackendDispatcher::sendResponse):
        (Inspector::BackendDispatcher::getPropertyValue):
        (Inspector::BackendDispatcher::getBoolean):
        (Inspector::BackendDispatcher::getInteger):
        (Inspector::BackendDispatcher::getDouble):
        (Inspector::BackendDispatcher::getString):
        (Inspector::BackendDispatcher::getValue):
        (Inspector::BackendDispatcher::getObject):
        (Inspector::BackendDispatcher::getArray):
        (Inspector::castToInteger): Deleted.
        (Inspector::castToNumber): Deleted.
        * inspector/InspectorProtocolTypes.h:
        (Inspector::Protocol::BindingTraits<JSON::ArrayOf<T>>::runtimeCast):
        (Inspector::Protocol::BindingTraits<JSON::ArrayOf<T>>::assertValueHasExpectedType):
        * inspector/remote/socket/RemoteInspectorConnectionClient.cpp:
        (Inspector::RemoteInspectorConnectionClient::extractEvent):
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::pushListingsNow):
        * runtime/TypeSet.cpp:
        (JSC::StructureShape::inspectorRepresentation):
        `JSON` classes now use `Ref&&` wherever possible and `Optional` instead of an out parameter
        for `get*`/`as*` so that values can be more easily manipulated and can be confidently known
        to exist.

        * inspector/scripts/tests/enum-values.json:
        * inspector/scripts/tests/expected/command-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/expected/domain-debuggableTypes.json-result:
        * inspector/scripts/tests/expected/domain-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/domain-targetTypes.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/event-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result:
        * inspector/scripts/tests/expected/should-strip-comments.json-result:
        * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * inspector/scripts/tests/expected/type-with-open-parameters.json-result:
        * inspector/scripts/tests/expected/version.json-result:

2020-09-09  Saam Barati  <sbarati@apple.com>

        OutOfBoundsSaneChain operations should use their own heap locations
        https://bugs.webkit.org/show_bug.cgi?id=216328
        <rdar://problem/68568039>

        Reviewed by Keith Miller.

        There is code in local CSE that does some basic bounds check elimination
        for PutByVal. It does this analysis by seeing if a particular heap location
        is already defined, and if so, it eliminates the bounds check for the
        PutByVal. This doesn't work for OutOfBoundsSaneChain for the obvious reason
        that these GetByVals are not proven to be in bounds. So GetByVal's in the
        OutOfBoundsSaneChain mode reusing non OutOfBoundsSaneChain heap locations
        can lead to a bug where we mistakenly remove a bounds check. The fix is to
        have all OutOfBoundsSaneChain operations use distinct heaps, and for CSE to
        not query those heaps.

        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::isAnySaneChain const): Deleted.
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGHeapLocation.h:

2020-09-09  Keith Miller  <keith_miller@apple.com>

        BigInt should PACCage its data pointer
        https://bugs.webkit.org/show_bug.cgi?id=216319

        Reviewed by Yusuke Suzuki.

        * runtime/JSBigInt.h:

2020-09-09  Alexey Shvayka  <shvaikalesh@gmail.com>

        Don't emitDirectBinding() if there is a [...rest] element binding
        https://bugs.webkit.org/show_bug.cgi?id=216228

        Reviewed by Darin Adler.

        emitDirectBinding() is up for removal due to not respecting overriden or removed
        Array.prototype[Symbol.iterator]. However, dropping it slows down popular swap pattern
        `[a, b] = [b, a]` by 40% with DFG/FTL, and by a factor of 6 with baseline JIT only.

        Until we figure out the best way to preserve common case performance, this patch
        prevents `let [...rest] = [1]` from ending up as a number instead of an array,
        aligning JSC with V8 and SpiderMonkey.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayPatternNode::emitDirectBinding):

2020-09-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] returnEarlyFromInfiniteLoopsForFuzzing should return object
        https://bugs.webkit.org/show_bug.cgi?id=216289
        <rdar://problem/68496533>

        Reviewed by Saam Barati.

        When returning early with returnEarlyFromInfiniteLoopsForFuzzing, we are returning with undefined.
        But this is wrong when the callee is constructor since constructor is strongly assumed that it returns an object.
        We should return some object from returnEarlyFromInfiniteLoopsForFuzzing. In this patch, we return global object
        associated to this callee instead of undefined

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::~CodeBlock):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_hint):
        * llint/LowLevelInterpreter64.asm:

2020-09-08  Saam Barati  <sbarati@apple.com>

        re-enable TCSM on all OSs
        https://bugs.webkit.org/show_bug.cgi?id=216281

        Reviewed by Tadeu Zagallo.

        * runtime/Options.cpp:
        (JSC::defaultTCSMValue):

2020-09-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Special property caching should check Structure's cacheability
        https://bugs.webkit.org/show_bug.cgi?id=216222

        Reviewed by Saam Barati.

        While StructureRareData::cacheSpecialPropertySlow caches properties, the way it takes is incomplete.
        It is not checking Structure's cacheability. We were caching miss condition even if structure is !propertyAccessesAreCacheableForAbsence.
        We should perform the same check done in IC case. Strictly speaking, we can cache value for uncacheable-dictionary because we are setting
        property change watchpoint (which will fire). But it sounds not so profitable if this structure is uncacheable.

        * runtime/JSObject.cpp:
        (JSC::JSObject::convertToUncacheableDictionary):
        * runtime/JSObject.h:
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::cacheSpecialPropertySlow):
        * tools/JSDollarVM.cpp:
        (JSC::functionToUncacheableDictionary):
        (JSC::JSDollarVM::finishCreation):

2020-09-07  Joonghun Park  <jh718.park@samsung.com>

        Unreviewed. Remove the build warning below since r266567.
        warning: parameter ‘hint’ set but not used [-Wunused-but-set-parameter]

        * runtime/JSObject.cpp:
        (JSC::callToPrimitiveFunction):

2020-09-06  Darin Adler  <darin@apple.com>

        TextCodec refinements
        https://bugs.webkit.org/show_bug.cgi?id=216219

        Reviewed by Sam Weinig.

        * parser/Lexer.h:
        (JSC::Lexer<UChar>::isWhiteSpace): Use byteOrderMark constant.

2020-09-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, suppress exception checking after unwrapForOldFunctions
        https://bugs.webkit.org/show_bug.cgi?id=216193

        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):

2020-09-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow DOM breakpoints to be configured
        https://bugs.webkit.org/show_bug.cgi?id=215795

        Reviewed by Brian Burg.

        * inspector/protocol/DOMDebugger.json:
        Add an `options` parameter to `DOMDebugger.setDOMBreakpoint` to allow configuration.

2020-09-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Align legacy Intl constructor behavior to spec
        https://bugs.webkit.org/show_bug.cgi?id=216193

        Reviewed by Darin Adler.

        Legacy Intl constructors (Intl.DateTimeFormat and Intl.NumberFormat) have special handling when it is called via `Intl.DateTimeFormat()` form.
        This allowed legacy Intl constructors to be used with prototype-based inheritance without using class syntax. This legacy behavior is later specified
        explicitly in the spec. So we should align our implementation to the spec's one.

            1. When defining fallback formats, we need to put them into the property which is visible via Symbol("IntlLegacyConstructedSymbol").
            2. Even if the provided thisValue is IntlDateTimeFormat* / IntlNumberFormat*, we should create another instance and put it to Symbol("IntlLegacyConstructedSymbol") field.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * builtins/BuiltinNames.cpp:
        (JSC::BuiltinNames::BuiltinNames):
        * builtins/BuiltinNames.h:
        (JSC::BuiltinNames::intlLegacyConstructedSymbol const):
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::IntlDateTimeFormatConstructor::finishCreation):
        (JSC::callIntlDateTimeFormat):
        * runtime/IntlDateTimeFormatInlines.h: Added.
        (JSC::IntlDateTimeFormat::unwrapForOldFunctions):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototypeGetterFormat):
        (JSC::IntlDateTimeFormatPrototypeFuncFormatToParts):
        (JSC::IntlDateTimeFormatPrototypeFuncFormatRange):
        (JSC::IntlDateTimeFormatPrototypeFuncResolvedOptions):
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::IntlNumberFormatConstructor::finishCreation):
        (JSC::callIntlNumberFormat):
        * runtime/IntlNumberFormatInlines.h:
        (JSC::IntlNumberFormat::unwrapForOldFunctions):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        (JSC::IntlNumberFormatPrototypeFuncFormatToParts):
        (JSC::IntlNumberFormatPrototypeFuncResolvedOptions):
        * runtime/IntlObject.cpp:
        (JSC::createDateTimeFormatConstructor):
        (JSC::createNumberFormatConstructor):
        * runtime/IntlObjectInlines.h:
        (JSC::constructIntlInstanceWithWorkaroundForLegacyIntlConstructor):
        (JSC::unwrapForLegacyIntlConstructor):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::dateTimeFormatConstructor):
        (JSC::JSGlobalObject::dateTimeFormatPrototype):
        (JSC::JSGlobalObject::numberFormatConstructor):
        (JSC::JSGlobalObject::numberFormatPrototype):

2020-09-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array.prototype.push should always perform [[Set]] in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=216121

        Unreviewed, address Darin's feedback on r266581.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPush): Remove unnecessary static_cast<uint64_t>.

2020-09-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array.prototype.push should always perform [[Set]] in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=216121

        Reviewed by Darin Adler.

        This patch fixes arrayProtoFuncPush() to throw a TypeError if putting an
        index beyond UINT32_MAX has failed, aligning JSC with the spec [1], V8,
        and SpiderMonkey. Also, refactors the method leveraging putByIndexInline().

        Array.prototype.push microbenchmarks, including varargs tests, are neutral.

        [1]: https://tc39.es/ecma262/#sec-array.prototype.push (step 5.b)

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPush):

2020-09-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. [GLIB] Add missing return

        There's no change in behavior because jsObjectCall() returns undefined in case of failure, but fixes a memory leak.

        * API/glib/JSCValue.cpp:
        (jsc_value_object_invoke_methodv):

2020-09-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Cache toString / valueOf / @@toPrimitive for major cases
        https://bugs.webkit.org/show_bug.cgi?id=216061

        Reviewed by Saam Barati.

        When toPrimitive is called, we need to look-up three properties at most to perform operation. And these special properties do not have caching mechanism at all.
        We found that Speedometer2/EmberJS-Debug-TodoMVC is using very much time for this property look-up. We should have caching mechanism in StructureRareData, which
        should be similar to @@toStringTag & Object#toString caching mechanism.

        This patch generalizes @@toStringTag & Object#toString caching mechanism as SpecialPropertyCache. And we accelerate toString / valueOf / @@toPrimitive look-ups in
        toPrimitive with this caching mechanism.

        This patch improved Speedometer2/EmberJS-Debug-TodoMVC by 10%.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/Watchpoint.cpp:
        * bytecode/Watchpoint.h:
        * runtime/CachedSpecialPropertyAdaptiveStructureWatchpoint.cpp: Renamed from Source/JavaScriptCore/runtime/ObjectToStringAdaptiveStructureWatchpoint.cpp.
        (JSC::CachedSpecialPropertyAdaptiveStructureWatchpoint::CachedSpecialPropertyAdaptiveStructureWatchpoint):
        (JSC::CachedSpecialPropertyAdaptiveStructureWatchpoint::install):
        (JSC::CachedSpecialPropertyAdaptiveStructureWatchpoint::fireInternal):
        * runtime/CachedSpecialPropertyAdaptiveStructureWatchpoint.h: Renamed from Source/JavaScriptCore/runtime/ObjectToStringAdaptiveStructureWatchpoint.h.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::objectProtoToStringFunction const):
        * runtime/JSObject.cpp:
        (JSC::callToPrimitiveFunction):
        (JSC::JSObject::ordinaryToPrimitive const):
        (JSC::JSObject::toPrimitive const):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::finishCreation):
        (JSC::objectProtoFuncToString):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::cacheSpecialProperty):
        (JSC::Structure::setObjectToStringValue): Deleted.
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):
        (JSC::StructureRareData::ensureSpecialPropertyCacheSlow):
        (JSC::StructureRareData::giveUpOnSpecialPropertyCache):
        (JSC::StructureRareData::cacheSpecialPropertySlow):
        (JSC::StructureRareData::clearCachedSpecialProperty):
        (JSC::StructureRareData::finalizeUnconditionally):
        (JSC::CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint::CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint):
        (JSC::CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint::isValid const):
        (JSC::CachedSpecialPropertyAdaptiveInferredPropertyValueWatchpoint::handleFire):
        (JSC::StructureRareData::setObjectToStringValue): Deleted.
        (JSC::StructureRareData::clearObjectToStringValue): Deleted.
        (JSC::ObjectToStringAdaptiveInferredPropertyValueWatchpoint::ObjectToStringAdaptiveInferredPropertyValueWatchpoint): Deleted.
        (JSC::ObjectToStringAdaptiveInferredPropertyValueWatchpoint::isValid const): Deleted.
        (JSC::ObjectToStringAdaptiveInferredPropertyValueWatchpoint::handleFire): Deleted.
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedSpecialProperty const):
        (JSC::StructureRareData::canCacheSpecialProperty):
        (JSC::StructureRareData::ensureSpecialPropertyCache):
        (JSC::StructureRareData::cacheSpecialProperty):
        (JSC::StructureRareData::objectToStringValue const): Deleted.

2020-09-03  Saam Barati  <sbarati@apple.com>

        Sampling profiler should dump hash as part of the top function key to prevent incorrectly grouping nameless functions together
        https://bugs.webkit.org/show_bug.cgi?id=216087

        Reviewed by Tadeu Zagallo.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::reportTopFunctions):

2020-09-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow url breakpoints to be configured
        https://bugs.webkit.org/show_bug.cgi?id=215793

        Reviewed by Brian Burg.

        * inspector/protocol/DOMDebugger.json:
        Add an `options` parameter to `DOMDebugger.setURLBreakpoint` to allow configuration.
        Add an `isRegex` parameter to `DOMDebugger.removeURLBreakpoint` so that we know what
        type of URL breakpoint is being removed.

2020-09-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow special JavaScript breakpoints to be configured
        https://bugs.webkit.org/show_bug.cgi?id=215794

        Reviewed by Brian Burg.

        * inspector/protocol/Debugger.json:
        Add an `options` parameter to the following commands for configuring the related breakpoint:
         - `Debugger.setPauseOnDebuggerStatements`
         - `Debugger.setPauseOnExceptions`
         - `Debugger.setPauseOnAssertions`
         - `Debugger.setPauseOnMicrotasks`

        * debugger/Debugger.h:
        (JSC::Debugger::needsExceptionCallbacks const):
        (JSC::Debugger::pauseOnAllExceptionsBreakpoint const): Added.
        (JSC::Debugger::setPauseOnAllExceptionsBreakpoint): Added.
        (JSC::Debugger::pauseOnUncaughtExceptionsBreakpoint const): Added.
        (JSC::Debugger::setPauseOnUncaughtExceptionsBreakpoint): Added.
        (JSC::Debugger::setPauseOnDebuggerStatementsBreakpoint): Added.
        (JSC::Debugger::pauseOnExceptionsState const): Deleted.
        (JSC::Debugger::setPauseOnDebuggerStatements): Deleted.
        * debugger/Debugger.cpp:
        (JSC::Debugger::TemporarilyDisableExceptionBreakpoints::TemporarilyDisableExceptionBreakpoints): Added.
        (JSC::Debugger::TemporarilyDisableExceptionBreakpoints::~TemporarilyDisableExceptionBreakpoints): Added.
        (JSC::Debugger::TemporarilyDisableExceptionBreakpoints::replace): Added.
        (JSC::Debugger::TemporarilyDisableExceptionBreakpoints::restore): Added.
        (JSC::Debugger::Debugger):
        (JSC::Debugger::breakProgram):
        (JSC::Debugger::exception):
        (JSC::Debugger::didReachDebuggerStatement):
        (JSC::Debugger::setPauseOnExceptionsState): Deleted.
        Add `JSC::Breakpoint` member variables for the Debugger Statements and Exceptions
        breakpoints. Split the Exceptions breakpoint into two `JSC::Breakpoint` now that
        All Exceptions and Uncaught Exceptions can be independently configured (the All
        Exceptions breakpoint still takes precedence).

        * debugger/DebuggerCallFrame.h:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluateWithScopeExtension):
        If there is no `CallFrame`, climb the backtrace until the first valid `CallFrame` is reached.
        This is needed when pausing in native code, such as for assertions/exceptions.

        * debugger/Breakpoint.h:
        Export `JSC::Breakpoint::create` so that other parts of WebKit can create breakpoints.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::disable):
        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
        (Inspector::InspectorDebuggerAgent::setPauseOnDebuggerStatements):
        (Inspector::InspectorDebuggerAgent::setPauseOnExceptions):
        (Inspector::InspectorDebuggerAgent::setPauseOnAssertions):
        (Inspector::InspectorDebuggerAgent::setPauseOnMicrotasks):
        (Inspector::InspectorDebuggerAgent::evaluateOnCallFrame):
        (Inspector::InspectorDebuggerAgent::scriptExecutionBlockedByCSP):
        (Inspector::InspectorDebuggerAgent::willRunMicrotask):
        (Inspector::InspectorDebuggerAgent::didRunMicrotask):
        (Inspector::InspectorDebuggerAgent::breakProgram):
        Add `JSC::Breakpoint` member variables for the Assertion Failures and All Microtasks
        breakpoints. Pass them to the `JSC::Debugger` when they are hit.

        * inspector/agents/InspectorAuditAgent.cpp:
        (Inspector::InspectorAuditAgent::run):
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::InspectorRuntimeAgent::evaluate):
        (Inspector::InspectorRuntimeAgent::callFunctionOn):
        (Inspector::InspectorRuntimeAgent::getPreview):
        (Inspector::InspectorRuntimeAgent::getProperties):
        (Inspector::InspectorRuntimeAgent::getDisplayableProperties):
        (Inspector::setPauseOnExceptionsState): Deleted.
        Use `TemporarilyDisableExceptionBreakpoints` to save, override, and restore the exceptions
        breakpoints now that they've been separated into two `JSC::Breakpoint` instead of an `enum`.

2020-09-03  Keith Miller  <keith_miller@apple.com>

        Finish comment describing the various *Stack SSA nodes in DFG
        https://bugs.webkit.org/show_bug.cgi?id=216110

        Reviewed by Sam Weinig.

        * dfg/DFGNodeType.h:

2020-09-03  David Kilzer  <ddkilzer@apple.com>

        AbstractMacroAssembler::Jump class has uninitialized instance variables
        <https://webkit.org/b/216082>

        Reviewed by Michael Saboff.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Jump):
        - Switch to default constructor syntax.
        - Provide defaults for instance variables.

2020-09-03  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Add missing detached buffer errors for DataView
        https://bugs.webkit.org/show_bug.cgi?id=216062

        Reviewed by Yusuke Suzuki.

        DataView methods are often expected to throw a TypeError if the underlying ArrayBuffer is detached
        (or neutered, in older terminology) -- this patch adds a slew of missing cases from the following spec section:
          - https://tc39.es/ecma262/#sec-properties-of-the-dataview-prototype-object

        At the same time:
         - get rid of JSDataView::getOwnPropertySlot, which was turning dataViewProtoGetterByte{Length,Offset}
           into mostly unreachable code and erroneously causing byte{Length,Offset} to have property descriptors
         - perform some simple cleanup of neighboring error calls / messages
         - fix value of DataView.length (our only other DataView spec bug)

        * runtime/JSDataView.cpp:
        (JSC::JSDataView::create):
        (JSC::JSDataView::getOwnPropertySlot): Deleted.
        * runtime/JSDataView.h:
        * runtime/JSDataViewPrototype.cpp:
        (JSC::getData):
        (JSC::setData):
        (JSC::dataViewProtoGetterByteLength):
        (JSC::dataViewProtoGetterByteOffset):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::JSGenericTypedArrayViewConstructor<ViewClass>::finishCreation):

2020-09-02  Michael Saboff  <msaboff@apple.com>

        ASSERTION FAILED: value.isCell() && value.asCell()->type() == CustomGetterSetterType ./bytecode/ObjectPropertyConditionSet.cpp
        https://bugs.webkit.org/show_bug.cgi?id=216103

        Reviewed by Saam Barati.

        Changed the ASSERT to an if statement.  This checks to see if, the likely newly changed,
        property is still a custom getter setter before caching its access as such.

        * bytecode/ObjectPropertyConditionSet.cpp:
        (JSC::generateConditionsForPrototypePropertyHitCustom):
        * tools/JSDollarVM.cpp: Added test helper function.

2020-09-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Skip fast/css-custom-paint/out-of-memory-while-adding-worklet-module.html if Gigacage is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=216043
        <rdar://problem/66394369>

        Reviewed by Mark Lam.

        * tools/JSDollarVM.cpp:
        (JSC::functionIsGigacageEnabled):
        (JSC::JSDollarVM::finishCreation):

2020-08-31  Mark Lam  <mark.lam@apple.com>

        Remove some PtrTag debugging code from release builds.
        https://bugs.webkit.org/show_bug.cgi?id=216025
        <rdar://problem/68098263>

        Reviewed by Saam Barati.

        Removed PtrTag name lookup debugging utility from release builds.

        * runtime/JSCPtrTag.cpp:
        * runtime/JSCPtrTag.h:

2020-09-01  Carlos Garcia Campos  <cgarcia@igalia.com>

        [Linux] Web Inspector: show per thread cpu usage
        https://bugs.webkit.org/show_bug.cgi?id=215883

        Reviewed by Adrian Perez de Castro.

        Remove platform specific getter machThread() and add thread() to return the Thread instead. The caller knows how
        to get the machThread or id from a Thread.

        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::reportTopBytecodes):
        (JSC::SamplingProfiler::machThread): Deleted.
        * runtime/SamplingProfiler.h:
        (JSC::SamplingProfiler::thread):

2020-08-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] StructureStubInfo / CallLinkInfo / ByValInfo should set CodeOrigin or BytecodeIndex at construction
        https://bugs.webkit.org/show_bug.cgi?id=215987
        <rdar://problem/66370323>

        Reviewed by Mark Lam.

        We had race condition during construction of StructureStubInfo and CodeOrigin field setting.

            1. The thread creates StructureStubInfo by calling CodeBlock::addStubInfo. This is guarded by the lock. But at this point we are not setting StructureStubInfo::codeOrigin.
            2. Then (1)'s thread attempts to set StructureStubInfo::codeOrigin. But at this point, it is not guarded by the lock.
            3. Before (2) is executed, DFG ByteCodeParser calls CodeBlock::getICStatusMap. It creates HashMap<CodeOrigin, StructureStubInfo*>.
            4. Since StructureStubInfo*'s codeOrigin is not configured yet, (3) sees invalid CodeOrigin. And storing invalid CodeOrigin as a HashMap key is not correct.

        We should configure CodeOrigin at construction of StructureStubInfo, which is guarded by the lock. We have the same problem for CallLinkInfo and ByValInfo. This patch fixes them.
        To reproduce this, we need to execute a script 2~ days repeatedly. So it is difficult to add a test.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/ByValInfo.h:
        (JSC::ByValInfo::ByValInfo):
        (JSC::ByValInfo::setUp):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::CallLinkInfo):
        * bytecode/CallLinkInfo.h:
        (JSC::CallLinkInfo::setUpCall):
        (JSC::CallLinkInfo::setCodeOrigin): Deleted.
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::addStubInfo):
        (JSC::CodeBlock::addByValInfo):
        (JSC::CodeBlock::addCallLinkInfo):
        * bytecode/CodeBlock.h:
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::StructureStubInfo):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        * jit/JIT.cpp:
        (JSC::JIT::link):
        * jit/JITCall.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::garbageStubInfo):
        (JSC::JITInlineCacheGenerator::JITInlineCacheGenerator):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):

2020-08-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] @defaultPromiseThen fast path should check species constructor
        https://bugs.webkit.org/show_bug.cgi?id=215996

        Reviewed by Ross Kirsling.

        When executing @defaultPromiseThen fast path, we assumed that this execution is not observable.
        This is wrong only for species constructor part: this @@species access & derived constructor calls
        can be observable. In this patch,

            1. We extract part of Promise#then as @performPromiseThen, which corresponds to the spec's PerformPromiseThen.
            2. In promise fast path, we check @speciesConstructor is @Promise or @InternalPromise. If it is not, then we go to the slow path.

        This fixes Promise#finally failures in test262.

        * builtins/PromiseOperations.js:
        (globalPrivate.promiseResolveThenableJobFast):
        (globalPrivate.promiseResolveThenableJobWithoutPromiseFast):
        (globalPrivate.promiseResolveThenableJobWithDerivedPromise):
        (onFulfilled):
        (onRejected):
        (globalPrivate.performPromiseThen):
        * builtins/PromisePrototype.js:
        (then):
        (onFulfilled): Deleted.
        (onRejected): Deleted.

2020-08-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use -2 for grouping options in IntlRelativeTimeFormat
        https://bugs.webkit.org/show_bug.cgi?id=215984

        Reviewed by Ross Kirsling.

        Several test262 tests are failing after ICU 67. This is because Intl.RelativeTimeFormat is not using locale-sensitive grouping option.
        There are hidden option -2 for UNumberFormat. It is supported so long, but it is not explicitly documented. After ICU 68, it is exposed as a constant,
        we should pass -2 to UNumberFormat's grouping options to use locale-sensitive grouping option here.

        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):

2020-08-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] async function cannot appear in single-statement context
        https://bugs.webkit.org/show_bug.cgi?id=215993

        Reviewed by Darin Adler.

        The following code is syntax error[1] because ExpressionStatement has `async [no LineTerminator here] function` lookahead.

            if (false)
                async function t() { }

        [1]: https://tc39.es/ecma262/#sec-expression-statement

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseStatement):
        (JSC::Parser<LexerType>::maybeParseAsyncFunctionDeclarationStatement): Deleted.
        * parser/Parser.h:

2020-08-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] `let [` sequence cannot appear in ExpressionStatement context
        https://bugs.webkit.org/show_bug.cgi?id=215977

        Reviewed by Ross Kirsling.

        Because of ambiguity between destructuring assignment and member access (let IDENTIFIER), ECMA262 does not allow `let [` sequence in ExpressionStatement context[1].
        We should throw SyntaxError when we see something like this.

            if (false)
                let [ok] = [42];

        [1]: https://tc39.es/ecma262/#sec-expression-statement

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseStatement):

2020-08-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] for-of uses AssignmentExpression while for-in uses Expression
        https://bugs.webkit.org/show_bug.cgi?id=215975

        Reviewed by Ross Kirsling.

        While for-in uses Expression, for-of and for-await-of use AssignmentExpression which does not accept comma-expression.
        We should align our implementation to that.

            for (LeftHandSideExpression in Expression) Statement
            for (LeftHandSideExpression of AssignmentExpression) Statement
            for await(LeftHandSideExpression of AssignmentExpression) Statement

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseForStatement):

2020-08-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] for-of / for-in left-hand-side target should be simple-assignment-target
        https://bugs.webkit.org/show_bug.cgi?id=215969

        Reviewed by Ross Kirsling.

        Left-hand-side of `for-in`, `for-of`, and `for-await-of` should be simple assignment target[1]
        if the target is not declaration and not destructuring pattern.

        [1]: https://tc39.es/ecma262/#sec-for-in-and-for-of-statements-static-semantics-early-errors

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseForStatement):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createCommaExpr): Should return CommaExpr to align it to ASTBuilder.
        (JSC::SyntaxChecker::appendToCommaExpr):
        (JSC::SyntaxChecker::appendStatement):
        (JSC::SyntaxChecker::combineCommaNodes): Deleted since it is not used.

2020-08-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Intl.DateTimeFormat dayPeriod
        https://bugs.webkit.org/show_bug.cgi?id=215839

        Reviewed by Ross Kirsling.

        This patch implements Intl.DateTimeFormat dayPeriod option[1]. We can use "narrow", "short", or "long" for dayPeriod,
        and it determines how "AM" etc. is represented.

        [1]: https://github.com/tc39/ecma402/pull/346

        * builtins/DatePrototype.js:
        (toLocaleString.toDateTimeOptionsAnyAll):
        (toLocaleString):
        (toLocaleTimeString.toDateTimeOptionsTimeTime):
        (toLocaleTimeString):
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate):
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::dayPeriodString):
        (JSC::IntlDateTimeFormat::resolvedOptions const):
        * runtime/IntlDateTimeFormat.h:
        * runtime/OptionsList.h:

2020-08-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] super property with new should be accepted
        https://bugs.webkit.org/show_bug.cgi?id=215966

        Reviewed by Ross Kirsling.

        While we should reject `new super` / `new super()`, we should accept `new super.property`.
        https://tc39.es/ecma262/#prod-SuperProperty is a child production of https://tc39.es/ecma262/#prod-MemberExpression,
        unlike https://tc39.es/ecma262/#prod-SuperCall. So `new` should accept SuperProperty (e.g. `super.xxx`).

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseMemberExpression):

2020-08-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] `new import.meta()` is acceptable
        https://bugs.webkit.org/show_bug.cgi?id=215915

        Reviewed by Ross Kirsling.

        `new import.meta()` is valid in terms of syntax while it throws runtime error.
        We should accept this code, while `new import()` is not correct syntax.

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseMemberExpression):

2020-08-27  Alexey Shvayka  <shvaikalesh@gmail.com>

        __proto__ in object literal should perform [[SetPrototypeOf]] directly
        https://bugs.webkit.org/show_bug.cgi?id=215769

        Reviewed by Ross Kirsling.

        To fix __proto__ usage in object literals if Object.prototype.__proto__ is overridden
        or removed, this patch sets the [[Prototype]] directly, aligning JSC with V8 and
        SpiderMonkey. We are safe to skip method table lookups and cycle checks, as the
        spec [1] calls [[SetPrototypeOf]] on newly created (unreferenced) ordinary objects.

        This change removes PropertyNode::PutType because its only purpose was to accomodate
        __proto__ in object literals. Since emitPutConstantProperty() handles static public
        class fields, which don't need `super` binding, PropertyNode::isUnderscoreProtoSetter()
        is extended to reject class properties.

        This patch speeds up creating object literals with __proto__ by 25%.

        [1]: https://tc39.es/ecma262/#sec-__proto__-property-names-in-object-initializers (step 7.a)

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitDirectSetPrototypeOf):
        1. Remove unused `dst` parameter to align with other `put` methods.
        2. Remove `divot*` parameters as it's cumbersome to pass them through,
           and globalFuncSetPrototypeDirect() never throws anyway.

        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirect):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_putByIdDirectPrivate):
        (JSC::ClassExprNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::isUnderscoreProtoSetter const):
        * parser/NodeConstructors.h:
        (JSC::PropertyNode::PropertyNode):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createProperty):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncSetPrototypeDirect):
        1. Ignore a prototype value of incorrect type as per spec [1],
           which is unobservable for call sites in ClassExprNode::emitBytecode().
        2. Assert that JSObject::setPrototypeDirect() doesn't throw.

2020-08-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] setLength in Array#push could get very large length
        https://bugs.webkit.org/show_bug.cgi?id=215897
        <rdar://problem/67859149>

        Reviewed by Keith Miller.

        Array#push can get length larger than UINT32_MAX. And in this case, we should throw a RangeError.
        Before r266215, it was using putLength which throws an error. But it was replaced with setLength,
        and JSC::setLength assumes that it never gets a length greater than UINT32_MAX by asserting. We
        should fix it so that Array#push should thrown an error correctly.

        * runtime/ArrayPrototype.cpp:
        (JSC::setLength):

2020-08-27  Saam Barati  <sbarati@apple.com>

        GetByVal constant folding over a Double OutOfBoundsSaneChain array with no BytecodeUsesAsOther should constant fold to PNaN, not undefined
        https://bugs.webkit.org/show_bug.cgi?id=215894
        <rdar://problem/67669696>

        Reviewed by Michael Saboff and Keith Miller.

        GetByVals of the form { OutOfBoundsSaneChain, Double } where there are no
        BytecodeUsesAsOther return PNaN for holes and OOB accesses, not jsUndefined().
        The constant folding for this though was folding to jsUndefined(). I forgot
        to update that code to constant fold to PNaN when I wrote the OutOfBoundsSaneChain
        implementation.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-08-27  Keith Miller  <keith_miller@apple.com>

        structureOrNull should take VM instead of getting it from the marked block
        https://bugs.webkit.org/show_bug.cgi?id=215899

        Reviewed by Yusuke Suzuki.

        It's slightly faster use an existing VM over recomputing the address. It probably doesn't
        happen to matter here for performance but it's good hygiene.

        * API/tests/JSWrapperMapTests.mm:
        (+[JSWrapperMapTests testStructureIdentity]):
        * jit/JITOperations.cpp:
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::structureOrNull const):
        (JSC::JSValue::structureOrUndefined const): Deleted.

2020-08-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use auxiliary memory for JSBigInt storage
        https://bugs.webkit.org/show_bug.cgi?id=215876

        Reviewed by Mark Lam.

        This makes JSBigInt non-destructible cell. And it makes allocating JSBigInt from JIT easy.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::JSBigInt):
        (JSC::JSBigInt::visitChildren):
        (JSC::JSBigInt::createWithLength):
        (JSC::JSBigInt::destroy): Deleted.
        * runtime/JSBigInt.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):

2020-08-27  Keith Miller  <keith_miller@apple.com>

        OSR availability validation should run for any node with exitOK
        https://bugs.webkit.org/show_bug.cgi?id=215672

        Reviewed by Saam Barati.

        Currently we only validate OSR exit availability if a node would
        say `mayExit(graph, node) != DoesNotExit` and the node is marked
        as exitOK. However, it would be perfectly valid to insert a node
        that exits anywhere we have a node marked exitOK. So with this
        patch we now validate all places where it would ever be possible
        to OSR exit.

        Relaxing our criteria revealed a number of bugs however. Which I
        will describe below in, IMO, increasing complexity/subtly.

        First, we currently don't mark arity fixup during inlining as not
        exitOK. However, since our arity code says its code origin is
        OpEnter, we assume arity fixup has already happened.

        Second, OpGetScope, should not mark its first argument as used
        since it's not actually used. This is problematic because we could
        have a loop where OpGetScope is the first bytecode, namely when
        doing tail recursive inlining. If we were in that position, there
        could be a local that was used at a merge point at the loop
        backedge that had two MovHint defs from both predecessors. In DFG
        IR this would look like:

        BB#1:
        @1: MovHint(Undefined, loc1)
        ...
        Jump(#2)

        BB#2:
        ... // loc1 is live here in bytecode
        @2: MovHint(@scopeObject, loc1)
        @3: SetLocal(@scopeObject, loc1)
        Branch(#3, #4) // #4 is the successor of the tail call loop

        BB#3:
        @4 MovHint(Undefined, loc1)
        ...
        Jump(#2)

        When we do CPS conversion the MovHints at @1 and @4 will be seen
        as different variables (there's no GetLocal). Then, after, during
        SSA conversion we won't insert a phi connecting them, making the
        argument to OpGetScope, in this case loc1, unrecoverable there are
        conflicting nodes and the value isn't saved on the stack.

        There were also issues with MovHintRemoval Phase but rather than
        fix them we opted to just remove the phase as it didn't show any
        performance impact. I'll describe the issues I found below for
        completeness, however.

        Third, MovHint removal phase had a bug where it would not mark
        sections where a zombied MovHint has yet to be killed as not
        exitOK. So in theory another phase could come along and insert an
        exiting node there.

        Fourth, MovHint removal phase had a second bug where a MovHint
        that was not killed in the current block would be zombied, which
        is wrong for SSA. It's wrong because the MovHinted value could
        still be live for OSR exit in a successor block.

        Lastly, this patch adds some new verbose options as well as the ability to
        dump a DFG::BasicBlock without dereferencing it.

        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        * dfg/DFGBasicBlock.cpp:
        (WTF::printInternal):
        * dfg/DFGBasicBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::inlineCall):
        * dfg/DFGCPSRethreadingPhase.cpp:
        (JSC::DFG::CPSRethreadingPhase::propagatePhis):
        * dfg/DFGEpoch.h:
        (JSC::DFG::Epoch::operator bool const):
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
        * dfg/DFGSSACalculator.cpp:
        (JSC::DFG::SSACalculator::dump const):

2020-08-27  Keith Miller  <keith_miller@apple.com>

        JSClassRef should work with JS class syntax.
        https://bugs.webkit.org/show_bug.cgi?id=215047

        Reviewed by Darin Adler.

        This is done by checking if value returned by the
        callAsConstructor parameter to JSObjectMakeConstructor returns an
        object allocated as the jsClass parameter. When that happens we
        replace the prototype of the returned object with the prototype of
        the new.target. Ideally we would have passed the derived classes
        constructor from the beginning of our support for JS subclassing
        but at this point that's probably not compatible with too many
        applications.

        * API/APICallbackFunction.h:
        (JSC::APICallbackFunction::construct):
        * API/JSObjectRef.h:
        * API/tests/testapi.cpp:
        (APIString::APIString):
        (TestAPI::markedJSValueArrayAndGC):
        (TestAPI::classDefinitionWithJSSubclass):
        (testCAPIViaCpp):
        * API/tests/testapi.mm:
        (testObjectiveCAPI):

2020-08-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use jsTypeofIsObject() in DFG AI and operationTypeOfIsObject()
        https://bugs.webkit.org/show_bug.cgi?id=144457

        Reviewed by Saam Barati.

        This patch refactors jsTypeofIsObject(), leveraging fast path of isCallable(),
        moves it to the header, and utilizes it in operationTypeOfIsObject() & DFG AI
        (minding concurrency) to eliminate code duplication.

        Also, removes orphaned slow_path_is_object declaration.

        No behavior change, `typeof` microbenchmarks are neutral.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeofIsObject): Deleted.
        * runtime/Operations.h:
        (JSC::jsTypeofIsObjectWithConcurrency):
        (JSC::jsTypeofIsObject):

2020-08-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        Merge putLength() into setLength()
        https://bugs.webkit.org/show_bug.cgi?id=211279

        Reviewed by Darin Adler and Saam Barati.

        This patch:

        1. Replaces all putLength() call sites with setLength(), saving two JSValue
           instantiations in arrayProtoFuncPop() and two in arrayProtoFuncShift().

        2. Merges putLength() into setLength(), removing superfluous put() call for
           JSArray. Also, performs put() in strict mode to preserve the original
           error messages, like ones in ProxyObject::performPut().

        3. Inlines performPop(), which avoided an extra index check and Identifier
           creation, as it was on the slow path anyway (note JSArray::pop() call).

        This change advances provided setLength()-heavy microbenchmark by ~40%,
        while existing Array tests are neutral.

        * runtime/ArrayPrototype.cpp:
        (JSC::setLength):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncUnShift):
        (JSC::putLength): Deleted.

2020-08-26  Saam Barati  <sbarati@apple.com>

        Make isIndex use MAX_ARRAY_INDEX
        https://bugs.webkit.org/show_bug.cgi?id=215872

        Reviewed by Darin Adler.

        It's already written in such a way where it relies on what MAX_ARRAY_INDEX
        is defined as. But instead of MAX_ARRAY_INDEX, the function was hardcoding
        MAX_ARRAY_INDEX + 1.

        * runtime/Identifier.h:
        (JSC::isIndex):

2020-08-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use unsigned type for `length` of JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=215870

        Reviewed by Darin Adler.

        Since the `length` value of a built-in function is its arity,
        we can communicate it's always non-negative via method signatures.

        No behavior change: `length` values redefined by user code are unaffected.

        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createFunctionThatMasqueradesAsUndefined):
        * runtime/InternalFunction.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        (JSC::JSFunction::finishCreation):
        * runtime/JSFunction.h:
        * runtime/JSNativeStdFunction.cpp:
        (JSC::JSNativeStdFunction::finishCreation):
        (JSC::JSNativeStdFunction::create):
        * runtime/JSNativeStdFunction.h:

2020-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Intl.Segmenter
        https://bugs.webkit.org/show_bug.cgi?id=215854

        Reviewed by Ross Kirsling.

        This is already stage-3 and all the features are implemented. Let's just enable it.

        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        * runtime/OptionsList.h:

2020-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add ASCII comparison fast path for IntlCollator
        https://bugs.webkit.org/show_bug.cgi?id=215798

        Reviewed by Darin Adler, Ross Kirsling, and Saam Barati.

        The idea behind this change is the following: ICU Collator's comparison is too slow. We should have fast path for ASCII strings when we know this equals to ICU Collator's result.
        The problem is that even for ASCII strings, collation is super complicated!

            1. Unicode defines Unicode Collation Algorithm (UCA). To perform collation, it uses collation element tables which defines weights on various levels per code point. UCA also offers
               the Default Unicode Collation Element Table (DUCET). This UCA with DUCET is used when using ICU Root Collator.
            2. UCA collation consists of rules, which defines how collation works. And ICU locales define customized collations by adding special rules to that.
            3. UCA behaves differently by using different options.

        Based on that, our observation is that some of major locales are not defining additional rules in (2). This means that they behaves the same to UCA with DUCET.
        This patch implements a simplified version of comparison which generates the same results for ASCII strings (excluding control characters) to UCA with DUCET. This fast path can be usable only when the following conditions are met.

            1. The collator does not have additional rules to ICU Root Colator.
            2. The collator is using default options.

        These checks are very important since there are a lot of edge-case locales. For example,

            1. th (Thai language) ignores punctuations (even including ASCII punctuations) by default. This is defined as ignore-punctuations option is enabled by default, so without (2)'s check, th comparison becomes wrong.
            2. There are contraction concept (multiple letters behave as a single letter). "ch" letters are ordered interestingly in Czech language. So even in ASCII, Czech shows very interesting collation behavior.

        So we cannot safely take this fast path without carefully querying the information to ICU.

        This shows 37% improvement in JetStream2/cdjs in en-US environment.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        (JSC::IntlCollator::compareStrings const):
        (JSC::canDoASCIIUCADUCETComparisonWithUCollator):
        (JSC::IntlCollator::updateCanDoASCIIUCADUCETComparison const):
        (JSC::IntlCollator::checkICULocaleInvariants):
        * runtime/IntlCollator.h:
        * runtime/IntlObject.cpp:
        (JSC::intlCollatorAvailableLocales):
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::canUseASCIIUCADUCETComparison):
        (JSC::compareASCIIWithUCADUCET):

2020-08-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Intl.DateTimeFormat fractionalSecondDigits
        https://bugs.webkit.org/show_bug.cgi?id=215840

        Reviewed by Ross Kirsling.

        This patch implements fractionalSecondDigits option for Intl.DateTimeFormat. If it is
        specified, milliseconds in N digits are represented in the formatted output.
        This extension is about to be merged into the spec[1]. SpiderMonkey and V8 support it,
        and V8 shipped it without flags.

        [1]: https://github.com/tc39/ecma402/pull/347

        * builtins/DatePrototype.js:
        (toLocaleString.toDateTimeOptionsAnyAll):
        (toLocaleString):
        (toLocaleTimeString.toDateTimeOptionsTimeTime):
        (toLocaleTimeString):
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate):
        (JSC::IntlDateTimeFormat::setFormatsFromPattern):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::resolvedOptions const):
        (JSC::partTypeString):
        * runtime/IntlDateTimeFormat.h:

2020-08-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] FTL should use m_origin instead of m_node->origin since m_node can be nullptr
        https://bugs.webkit.org/show_bug.cgi?id=215833

        Reviewed by Mark Lam.

        While we are using m_node->origin, m_node can be nullptr (at the entry of the FTL function).
        m_origin is always pointing appropriate origin. We should use it instead.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileToObjectOrCallObjectConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::compileToThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileStrCat):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAddOrSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithClz32):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMod):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithAbs):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithUnary):
        (JSC::FTL::DFG::LowerDFGToB3::compileValuePow):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithRandom):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithRound):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithFloor):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithCeil):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithTrunc):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithSqrt):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithFRound):
        (JSC::FTL::DFG::LowerDFGToB3::compileIncOrDec):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueNegate):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitAnd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitOr):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetById):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByValWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByValWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsReadModifyWrite):
        (JSC::FTL::DFG::LowerDFGToB3::compileAtomicsIsLockFree):
        (JSC::FTL::DFG::LowerDFGToB3::compileDefineDataProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileDefineAccessorProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetIndexedPropertyStorage):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetPrototypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorById):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutGetterSetterById):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutAccessorByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileDeleteById):
        (JSC::FTL::DFG::LowerDFGToB3::compileDeleteByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayPush):
        (JSC::FTL::DFG::LowerDFGToB3::compileArraySlice):
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop):
        (JSC::FTL::DFG::LowerDFGToB3::compilePushWithScope):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewFunction):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateDirectArguments):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateScopedArguments):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateClonedArguments):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateArgumentsButterfly):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateRest):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeysOrObjectGetOwnPropertyNames):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectCreate):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewSymbol):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayBuffer):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSize):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewTypedArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileToNumber):
        (JSC::FTL::DFG::LowerDFGToB3::compileToNumeric):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallNumberConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::compileToStringOrCallStringConstructorOrStringValueOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileToPrimitive):
        (JSC::FTL::DFG::LowerDFGToB3::compileToPropertyKey):
        (JSC::FTL::DFG::LowerDFGToB3::compileMakeRope):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringFromCharCode):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiPutByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetGlobalThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetArgument):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileSameValue):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        (JSC::FTL::DFG::LowerDFGToB3::compileVarargsLength):
        (JSC::FTL::DFG::LowerDFGToB3::compileLoadVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileForwardVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileSwitch):
        (JSC::FTL::DFG::LowerDFGToB3::compileThrow):
        (JSC::FTL::DFG::LowerDFGToB3::compileThrowStaticError):
        (JSC::FTL::DFG::LowerDFGToB3::mapHashString):
        (JSC::FTL::DFG::LowerDFGToB3::compileMapHash):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetMapBucket):
        (JSC::FTL::DFG::LowerDFGToB3::compileSetAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileMapSet):
        (JSC::FTL::DFG::LowerDFGToB3::compileTypeOfIsObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsCallable):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsConstructor):
        (JSC::FTL::DFG::LowerDFGToB3::compileInByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileParseInt):
        (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOfCustom):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasGenericProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasStructurePropertyImpl):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetDirectPname):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetPropertyEnumerator):
        (JSC::FTL::DFG::LowerDFGToB3::compileToIndexString):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeCreateActivation):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckTraps):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewRegexp):
        (JSC::FTL::DFG::LowerDFGToB3::compileSetFunctionName):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringReplace):
        (JSC::FTL::DFG::LowerDFGToB3::compileLogShadowChickenTail):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsLength):
        (JSC::FTL::DFG::LowerDFGToB3::getCurrentCallee):
        (JSC::FTL::DFG::LowerDFGToB3::getArgumentsStart):
        (JSC::FTL::DFG::LowerDFGToB3::compare):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringSlice):
        (JSC::FTL::DFG::LowerDFGToB3::compileToLowerCase):
        (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithRadix):
        (JSC::FTL::DFG::LowerDFGToB3::compileNumberToStringWithValidRadixConstant):
        (JSC::FTL::DFG::LowerDFGToB3::compileResolveScopeForHoistingFuncDeclInEval):
        (JSC::FTL::DFG::LowerDFGToB3::compileResolveScope):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetDynamicVar):
        (JSC::FTL::DFG::LowerDFGToB3::compilePutDynamicVar):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOM):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallDOMGetter):
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):
        (JSC::FTL::DFG::LowerDFGToB3::genericJSValueCompare):
        (JSC::FTL::DFG::LowerDFGToB3::stringsEqual):
        (JSC::FTL::DFG::LowerDFGToB3::allocateJSArray):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::equalNullOrUndefined):
        (JSC::FTL::DFG::LowerDFGToB3::contiguousPutByValOutOfBounds):
        (JSC::FTL::DFG::LowerDFGToB3::switchStringSlow):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath):
        (JSC::FTL::DFG::LowerDFGToB3::masqueradesAsUndefinedWatchpointIsStillValid):
        (JSC::FTL::DFG::LowerDFGToB3::codeOriginDescriptionOfCallSite const):
        (JSC::FTL::DFG::LowerDFGToB3::callCheck):
        (JSC::FTL::DFG::LowerDFGToB3::appendOSRExit):
        * jsc.cpp:
        (runJSC):
        * runtime/OptionsList.h:

2020-08-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: breakpoint condition should be evaluated before the ignore count
        https://bugs.webkit.org/show_bug.cgi?id=215364
        <rdar://problem/67310703>

        Reviewed by Joseph Pecoraro.

        Previously, when pausing, `JSC::Breakpoint` would check that it's `ignoreCount` before it
        would even attempt to evaluate it's `condition`. This meant that a `JSC::Breakpoint` with
        a `condition` of `foo === 42` and an `ignoreCount` of `3` would ignore the first three
        pauses and then only pause if `foo === 42`. This is likely contrary to the expectation of
        most users (especially since the `condition` input is before the `ignoreCount` input in
        the Web Inspector frontend UI) in that they would probably expect to ignore the first
        three pauses if `foo === 42`.

        * debugger/Breakpoint.cpp:
        (JSC::Breakpoint::shouldPause):

2020-08-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        Invalid early error for object literal method named "__proto__"
        https://bugs.webkit.org/show_bug.cgi?id=215760

        Reviewed by Ross Kirsling.

        According to Annex B [1], `{ __proto__: null, __proto__() {} }` is a valid object literal as the second
        `__proto__` wasn't obtained from `PropertyDefinition : PropertyName : AssignmentExpression` production.
        Currently, JSC throws an early SyntaxError, unlike V8 and SpiderMonkey.

        Since a method needs `super` binding, the most straightforward fix would be adding SuperBinding field
        to SyntaxChecker::Property and exposing it via an accessor. However, given that Property is a very
        common structure, this approach would noticeably increase memory pressure during parsing.

        Instead, this patch reworks SyntaxChecker::Property to accept `isUnderscoreProtoSetter` parameter,
        removing optional `name` field, its accessor, and shouldCheckPropertyForUnderscoreProtoDuplicate(),
        which reduces sizeof(SyntaxChecker::Property) by a factor of 8: from 16 to 2 bytes.
        Also, this change avoids two extra makeNumericIdentifier() calls, speeding up numeric keys parsing.

        This approach is feasible because "__proto__" is the only identifier-based early error for object
        literals [2], with no such errors being added in upcoming stage 2-4 proposals.

        Additionally, this patch removes `strict` / `complete` bool parameter from {parse,create}Property()
        signatures as a) it was always `true`, b) is now unused, and c) strict mode can be checked via scope.

        [1]: https://tc39.es/ecma262/#sec-__proto__-property-names-in-object-initializers
        [2]: https://tc39.es/ecma262/#sec-object-initializer-static-semantics-early-errors

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::isUnderscoreProtoSetter const):
        (JSC::ASTBuilder::getName const): Deleted.
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseProperty):
        (JSC::Parser<LexerType>::parseGetterSetter):
        (JSC::Parser<LexerType>::parseObjectLiteral):
        (JSC::Parser<LexerType>::shouldCheckPropertyForUnderscoreProtoDuplicate): Deleted.
        * parser/Parser.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::SyntaxChecker):
        (JSC::SyntaxChecker::Property::Property):
        (JSC::SyntaxChecker::Property::operator!):
        (JSC::SyntaxChecker::createProperty):
        (JSC::SyntaxChecker::createGetterOrSetterProperty):
        (JSC::SyntaxChecker::operatorStackPop):

2020-08-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add concurrency-aware version of isCallable / isConstructor to make it usable in DFG compiler
        https://bugs.webkit.org/show_bug.cgi?id=215746

        Reviewed by Saam Barati.

        This patch adds isCallableWithConcurrency and isConstructorWithConcurrency to JSCell, JSValue etc.
        This can work even if it is called from concurrent compiler threads. We also add jsTypeStringForValueWithConcurrency
        and jsTypeofIsFunctionWithConcurrency which are using the above WithConcurrency functionalities.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * runtime/Concurrency.h: Added.
        (WTF::printInternal):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        (JSC::InternalFunction::getCallData):
        (JSC::InternalFunction::getConstructData):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::isCallableWithConcurrency const):
        (JSC::JSValue::isConstructorWithConcurrency const):
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isCallableWithConcurrency):
        (JSC::JSCell::isConstructorWithConcurrency):
        (JSC::JSCell::isCallable):
        (JSC::JSCell::isConstructor):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::getConstructData):
        * runtime/NumberPrototype.cpp:
        (JSC::throwVMToThisNumberError):
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValueWithConcurrency):
        (JSC::jsTypeStringForValue): Deleted.
        * runtime/Operations.h:
        (JSC::jsTypeofIsFunctionWithConcurrency):
        (JSC::jsTypeStringForValue):
        (JSC::jsTypeofIsFunction):

2020-08-25  Alexey Shvayka  <shvaikalesh@gmail.com>

        Implementation of the class "extends" clause incorrectly uses __proto__ for setting prototypes
        https://bugs.webkit.org/show_bug.cgi?id=205848

        Reviewed by Keith Miller.

        To prevent `class extends` from breaking if Object.prototype.__proto__ is overridden
        or removed, this patch replaces OpPutById bytecodes in ClassExprNode::emitBytecode()
        with JSObject::setPrototypeDirect() invocations via OpCall.

        Since the spec sets [[Prototype]] values directly [1], we are safe to skip method
        table lookups and cycle checks.

        Although this approach adds 4 `mov` ops to emitted bytecode for `class extends` creation,
        increasing instruction count to 35, I prefer it over introducing a slow path only op.
        To avoid emitting 2 extra `mov` ops, globalFuncSetPrototypeDirect() uses thisRegister().

        Aligns JSC with V8 and SpiderMonkey. Derived class creation microbenchmark is neutral.

        [1]: https://tc39.es/ecma262/#sec-createbuiltinfunction (step 7)

        * builtins/BuiltinNames.h:
        * bytecode/BytecodeDumper.cpp:
        (JSC::CodeBlockBytecodeDumper<Block>::dumpConstants): Fix typo.
        * bytecode/LinkTimeConstant.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitSetPrototypeOf):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):
        * parser/Nodes.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-08-24  Keith Miller  <keith_miller@apple.com>

        DFG should always run CFG Simplification after Constant Folding.
        https://bugs.webkit.org/show_bug.cgi?id=215286

        Reviewed by Robin Morisset.

        We didn't do this originally because LICM, many years ago, was
        unsound if the CFG didn't have exactly the right shape around
        loops. This is no longer true so we don't have to worry about
        changing the CFG anymore. While, this doesn't appear to be a
        speedup on JetStream 2 CFG, probably because we'd eventually
        simplify the graph in B3, CFG Simplification is very cheap and
        make other DFG optimizations easier in the future.

        Also, remove unecessary validation rule that no exitOKs can come
        before any Phi nodes in DFG. This isn't required and fails after
        merging two basic blocks where the latter block has a Phi.

        * dfg/DFGCFGSimplificationPhase.cpp:
        (JSC::DFG::CFGSimplificationPhase::run):
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGValidate.cpp:

2020-08-24  Keith Miller  <keith_miller@apple.com>

        Remove MovHintRemoval phase
        https://bugs.webkit.org/show_bug.cgi?id=215785

        Reviewed by Saam Barati.

        The MovHintRemoval phase doesn't play nicely with our OSR
        Availability. Specifically, it needs to do a tricky dance where it
        marks all the live ranges of the ZombieHints as not
        exitOK. There's also an issue because we treated unused locals as
        kill in this block, which is wrong for SSA when a MovHint is
        used in another block. Since removing MovHintRemoval isn't a
        performance regression, we are removing it rather than fixing bugs
        related to it. Relatedly, since the only place we produce
        ZombieHints is MovHintRemoval this patch also removes that node
        type.

        * Sources.txt:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGMovHintRemovalPhase.cpp: Removed.
        * dfg/DFGMovHintRemovalPhase.h: Removed.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::containsMovHint):
        (JSC::DFG::Node::hasUnlinkedOperand):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGPhantomInsertionPhase.cpp:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::compileInThreadImpl):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileMovHint):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVarargsForwardingPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * runtime/OptionsList.h:

2020-08-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename `ScriptDebugServer` subclasses/methods
        https://bugs.webkit.org/show_bug.cgi?id=215363
        <rdar://problem/67310441>

        Reviewed by Brian Burg.

        r266074 merged `Inspector::ScriptDebugServer` into `JSC::Debugger`. All subclasses and
        functions should be renamed to match this change.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * inspector/InspectorEnvironment.h:
        * inspector/JSGlobalObjectDebugger.h: Renamed from Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.h.
        * inspector/JSGlobalObjectDebugger.cpp: Renamed from Source/JavaScriptCore/inspector/JSGlobalObjectScriptDebugServer.cpp.
        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        * inspector/agents/InspectorAuditAgent.h:
        * inspector/agents/InspectorAuditAgent.cpp:
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        * inspector/agents/JSGlobalObjectDebuggerAgent.cpp:
        * inspector/remote/RemoteInspectionTarget.cpp:
        * inspector/remote/cocoa/RemoteConnectionToTargetCocoa.mm:

2020-08-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow event breakpoints to be configured
        https://bugs.webkit.org/show_bug.cgi?id=215362
        <rdar://problem/66932921>

        Reviewed by Brian Burg.

        This allows developers to do things like:
         - only pause when `window.event.type` is a certain value
         - ignore the first N pauses
         - evaluate JavaScript whenever an event listener is invoked without pausing

        * inspector/protocol/DOM.json:
        Add an `options` paramater to `DOM.setBreakpointForEventListener` to allow configuration.

        * inspector/protocol/DOMDebugger.json:
        Add an `options` paramater to `DOMDebugger.setEventBreakpoint` to allow configuration.

        * debugger/Breakpoint.h:
        (JSC::Breakpoint::id const): Added.
        (JSC::Breakpoint::sourceID const): Added.
        (JSC::Breakpoint::lineNumber const): Added.
        (JSC::Breakpoint::columnNumber const): Added.
        (JSC::Breakpoint::condition const): Added.
        (JSC::Breakpoint::actions const): Added.
        (JSC::Breakpoint::isAutoContinue const): Added.
        (JSC::Breakpoint::resetHitCount): Added.
        (JSC::Breakpoint::isLinked const): Added.
        (JSC::Breakpoint::isResolved const): Added.
        (JSC::BreakpointsList::~BreakpointsList): Deleted.
        * debugger/Breakpoint.cpp: Added.
        (JSC::Breakpoint::Action::Action): Added.
        (JSC::Breakpoint::create): Added.
        (JSC::Breakpoint::Breakpoint): Added.
        (JSC::Breakpoint::link): Added.
        (JSC::Breakpoint::resolve): Added.
        (JSC::Breakpoint::shouldPause): Added.
        Unify `JSC::Breakpoint` and `Inspector::ScriptBreakpoint`.

        * debugger/DebuggerPrimitives.h:
        * debugger/Debugger.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::Debugger):
        (JSC::Debugger::addObserver): Added.
        (JSC::Debugger::removeObserver): Added.
        (JSC::Debugger::canDispatchFunctionToObservers const): Added.
        (JSC::Debugger::dispatchFunctionToObservers): Added.
        (JSC::Debugger::sourceParsed): Added.
        (JSC::Debugger::toggleBreakpoint):
        (JSC::Debugger::applyBreakpoints):
        (JSC::Debugger::resolveBreakpoint):
        (JSC::Debugger::setBreakpoint):
        (JSC::Debugger::removeBreakpoint):
        (JSC::Debugger::didHitBreakpoint): Added.
        (JSC::Debugger::clearBreakpoints):
        (JSC::Debugger::evaluateBreakpointCondition): Added.
        (JSC::Debugger::evaluateBreakpointActions): Added.
        (JSC::Debugger::schedulePauseAtNextOpportunity): Added.
        (JSC::Debugger::cancelPauseAtNextOpportunity): Added.
        (JSC::Debugger::schedulePauseForSpecialBreakpoint): Added.
        (JSC::Debugger::cancelPauseForSpecialBreakpoint): Added.
        (JSC::Debugger::continueProgram):
        (JSC::Debugger::stepNextExpression):
        (JSC::Debugger::stepIntoStatement):
        (JSC::Debugger::stepOverStatement):
        (JSC::Debugger::stepOutOfFunction):
        (JSC::Debugger::pauseIfNeeded):
        (JSC::Debugger::handlePause): Added.
        (JSC::Debugger::exceptionOrCaughtValue): Added.
        (JSC::Debugger::atExpression):
        (JSC::Debugger::clearNextPauseState):
        (JSC::Debugger::willRunMicrotask): Added.
        (JSC::Debugger::didRunMicrotask): Added.
        (JSC::Debugger::hasBreakpoint): Deleted.
        (JSC::Debugger::setPauseOnNextStatement): Deleted.
        Unify `JSC::Debugger` and `Inspector::ScriptDebugServer` to simplify breakpoint logic.
        Introduce the concept of a "special breakpoint", which is essentially a `JSC::Breakpoint`
        that is expected to pause at the next opportunity but isn't tied to a particular location.
        As an example, whenever an event breakpoint is hit, instead of just pausing at the next
        opportunity, the newly managed `JSC::Breakpoint` is used as a "special breakpoint", allowing
        for it's configuration (ie.g. condition, ignore count, actions, auto-continue) to be used.

        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::objectGroupForBreakpointAction):
        (Inspector::breakpointActionTypeForString): Added.
        (Inspector::parseBreakpointOptions): Added.
        (Inspector::InspectorDebuggerAgent::ProtocolBreakpoint::fromPayload): Added.
        (Inspector::InspectorDebuggerAgent::ProtocolBreakpoint::ProtocolBreakpoint): Added.
        (Inspector::InspectorDebuggerAgent::ProtocolBreakpoint::createDebuggerBreakpoint const): Added.
        (Inspector::InspectorDebuggerAgent::ProtocolBreakpoint::matchesScriptURL const): Added.
        (Inspector::InspectorDebuggerAgent::debuggerBreakpointFromPayload): Added.
        (Inspector::InspectorDebuggerAgent::enable):
        (Inspector::InspectorDebuggerAgent::disable):
        (Inspector::InspectorDebuggerAgent::buildBreakpointPauseReason):
        (Inspector::InspectorDebuggerAgent::handleConsoleAssert):
        (Inspector::InspectorDebuggerAgent::didScheduleAsyncCall):
        (Inspector::buildDebuggerLocation):
        (Inspector::InspectorDebuggerAgent::setBreakpointByUrl):
        (Inspector::InspectorDebuggerAgent::setBreakpoint):
        (Inspector::InspectorDebuggerAgent::didSetBreakpoint):
        (Inspector::InspectorDebuggerAgent::resolveBreakpoint):
        (Inspector::InspectorDebuggerAgent::removeBreakpoint):
        (Inspector::InspectorDebuggerAgent::continueToLocation):
        (Inspector::InspectorDebuggerAgent::schedulePauseAtNextOpportunity): Added.
        (Inspector::InspectorDebuggerAgent::cancelPauseAtNextOpportunity): Added.
        (Inspector::InspectorDebuggerAgent::schedulePauseForSpecialBreakpoint): Added.
        (Inspector::InspectorDebuggerAgent::cancelPauseForSpecialBreakpoint): Added.
        (Inspector::InspectorDebuggerAgent::pause):
        (Inspector::InspectorDebuggerAgent::resume):
        (Inspector::InspectorDebuggerAgent::didBecomeIdle):
        (Inspector::InspectorDebuggerAgent::sourceMapURLForScript):
        (Inspector::InspectorDebuggerAgent::didParseSource):
        (Inspector::InspectorDebuggerAgent::willRunMicrotask):
        (Inspector::InspectorDebuggerAgent::didRunMicrotask):
        (Inspector::InspectorDebuggerAgent::didPause):
        (Inspector::InspectorDebuggerAgent::breakpointActionSound):
        (Inspector::InspectorDebuggerAgent::breakpointActionProbe):
        (Inspector::InspectorDebuggerAgent::clearInspectorBreakpointState):
        (Inspector::InspectorDebuggerAgent::clearDebuggerBreakpointState):
        (Inspector::matches): Deleted.
        (Inspector::buildObjectForBreakpointCookie): Deleted.
        (Inspector::InspectorDebuggerAgent::breakpointActionsFromProtocol): Deleted.
        (Inspector::InspectorDebuggerAgent::schedulePauseOnNextStatement): Deleted.
        (Inspector::InspectorDebuggerAgent::cancelPauseOnNextStatement): Deleted.
        Create a private `ProtocolBreakpoint` class that holds the data sent by the frontend. This
        is necessary because breakpoints in the frontend have a potentially one-to-many relationship
        with breakpoints in the backend, as the same script can be loaded many times on a page. Each
        of those scripts is independent, however, and can execute differently, meaning that the same
        breakpoint for each script also needs a different state (e.g. ignore count). As such, the
        `ProtocolBreakpoint` is effectively a template that is actualized whenever a new script is
        parsed that matches the URL of the `ProtocolBreakpoint` to create a `JSC::Breakpoint` that
        is used by the `JSC::Debugger`. `ProtocolBreakpoint` also parses breakpoint configurations.

        * inspector/InspectorEnvironment.h:
        * inspector/JSGlobalObjectScriptDebugServer.h:
        * inspector/JSGlobalObjectScriptDebugServer.cpp:
        (Inspector::JSGlobalObjectScriptDebugServer::JSGlobalObjectScriptDebugServer):
        (Inspector::JSGlobalObjectScriptDebugServer::attachDebugger):
        (Inspector::JSGlobalObjectScriptDebugServer::detachDebugger):
        (Inspector::JSGlobalObjectScriptDebugServer::runEventLoopWhilePaused):
        * inspector/agents/InspectorAuditAgent.h:
        * inspector/agents/InspectorAuditAgent.cpp:
        (Inspector::InspectorAuditAgent::run):
        * inspector/agents/InspectorRuntimeAgent.h:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        (Inspector::setPauseOnExceptionsState):
        (Inspector::InspectorRuntimeAgent::evaluate):
        (Inspector::InspectorRuntimeAgent::callFunctionOn):
        (Inspector::InspectorRuntimeAgent::getPreview):
        (Inspector::InspectorRuntimeAgent::getProperties):
        (Inspector::InspectorRuntimeAgent::getDisplayableProperties):
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
        Replace `Inspector::ScriptDebugServer` with `JSC::Debugger`.

        * runtime/JSMicrotask.cpp:
        (JSC::JSMicrotask::run):
        Drive-by: r248894 mistakenly omitted the call to notify the debugger that the microtask ran.

        * inspector/ScriptBreakpoint.h: Removed.
        * inspector/ScriptDebugListener.h: Removed.
        * inspector/ScriptDebugServer.h: Removed.
        * inspector/ScriptDebugServer.cpp: Removed.
        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:

2020-08-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove "extra domains" concept now that domains can be added based on the debuggable type
        https://bugs.webkit.org/show_bug.cgi?id=201150
        <rdar://problem/56545911>

        Reviewed by Brian Burg.

        * inspector/scripts/codegen/objc_generator_templates.py:
        * inspector/augmentable/AugmentableInspectorController.h:

        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
        (Inspector::JSGlobalObjectInspectorController::registerAlternateAgent): Added.
        (Inspector::JSGlobalObjectInspectorController::appendExtraAgent): Deleted.

        * inspector/InspectorAgentRegistry.h:
        * inspector/InspectorAgentRegistry.cpp:
        (Inspector::AgentRegistry::appendExtraAgent): Deleted.

        * inspector/protocol/Inspector.json:
        * inspector/agents/InspectorAgent.h:
        * inspector/agents/InspectorAgent.cpp:
        (Inspector::InspectorAgent::activateExtraDomain): Deleted.
        (Inspector::InspectorAgent::activateExtraDomains): Deleted.

        * inspector/scripts/tests/expected/command-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/expected/domain-debuggableTypes.json-result:
        * inspector/scripts/tests/expected/domain-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/domain-targetTypes.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/event-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result:
        Rebase protocol tests.

2020-08-23  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, wrong merge resolution between r266031 and r263837
        https://bugs.webkit.org/show_bug.cgi?id=209774

        r263837 is landed after r266031 is configured. OSS buildbots didn't catch this since they are using old ICU headers.

        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, assertion was opposite
        https://bugs.webkit.org/show_bug.cgi?id=215058

        We should ensure that this is *not* zero.

        * runtime/IntlObject.cpp:
        (JSC::parseVariantCode):

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement Intl Language Tag Parser
        https://bugs.webkit.org/show_bug.cgi?id=215058

        Reviewed by Ross Kirsling and Darin Adler.

        This patch adds LanguageTagParser which performs isStructurallyValidLanguageTag[1] validation precisely.
        The spec strictly defines acceptable format as language-tag and this is not the same to ICU's one and this
        is even tested in test262. We should have LanguageTagParser to validate the input.

        [1]: https://tc39.es/ecma402/#sec-isstructurallyvalidlanguagetag

        * runtime/IntlLocale.cpp:
        (JSC::LocaleIDBuilder::initialize):
        (JSC::IntlLocale::initializeLocale):
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList):
        (JSC::parseVariantCode):
        (JSC::convertToUnicodeSingletonIndex):
        (JSC::isUnicodeExtensionAttribute):
        (JSC::isUnicodeExtensionKey):
        (JSC::isUnicodeExtensionTypeComponent):
        (JSC::isUnicodePUExtensionValue):
        (JSC::isUnicodeOtherExtensionValue):
        (JSC::isUnicodeTKey):
        (JSC::isUnicodeTValueComponent):
        (JSC::LanguageTagParser::LanguageTagParser):
        (JSC::LanguageTagParser::isEOS):
        (JSC::LanguageTagParser::next):
        (JSC::LanguageTagParser::parseUnicodeLocaleId):
        (JSC::LanguageTagParser::parseUnicodeLanguageId):
        (JSC::LanguageTagParser::parseUnicodeExtensionAfterPrefix):
        (JSC::LanguageTagParser::parseTransformedExtensionAfterPrefix):
        (JSC::LanguageTagParser::parseOtherExtensionAfterPrefix):
        (JSC::LanguageTagParser::parsePUExtensionAfterPrefix):
        (JSC::LanguageTagParser::parseExtensionsAndPUExtensions):
        (JSC::isStructurallyValidLanguageTag):
        (JSC::isUnicodeLanguageId):
        * runtime/IntlObject.h:

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, workaround for old ICU headers in macOS Catalina bots
        https://bugs.webkit.org/show_bug.cgi?id=209774

        EWS and Catalina bots are inconsistent in terms of ICU header versions.
        This patch adds a workaround which checks ICU header version too at runtime.

        * tools/JSDollarVM.cpp:
        (JSC::functionICUHeaderVersion):
        (JSC::JSDollarVM::finishCreation):

2020-08-22  Alexey Shvayka  <shvaikalesh@gmail.com>

        The [[ThrowTypeError]] function object must not be extensible
        https://bugs.webkit.org/show_bug.cgi?id=108873

        Reviewed by Yusuke Suzuki.

        This patch:

        1. Sets the value of %ThrowTypeError% "name" property to the empty string,
           as required [1] for anonymous built-in functions.

        2. Calls JSObject::freeze() on %ThrowTypeError%, making it non-extensible and
           its "name" and "length" properties non-configurable to match the spec [2].

        Both changes align JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-ecmascript-standard-built-in-objects
        [2]: https://tc39.es/ecma262/#sec-%throwtypeerror%

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [ECMA-402] Intl.DateTimeFormat dateStyle/timeStyle missing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=209776

        Reviewed by Darin Adler and Ross Kirsling.

        This patch implements Intl.DateTimeFormat dateStyle and timeStyle options. When it is specified,
        we query the best date-time format with these options to ICU instead of configuring each date-time
        formats.

        Since ECMA402 requires enforcement of hourCycle specified from the option, even if ICU ignores that.
        So, after getting the appropriate pattern from ICU, we modify this pattern and re-create UDateFormat
        from the modified pattern.

        * builtins/DatePrototype.js:
        (toLocaleString.toDateTimeOptionsAnyAll):
        (toLocaleString):
        (toLocaleDateString.toDateTimeOptionsDateDate):
        (toLocaleDateString):
        (toLocaleTimeString.toDateTimeOptionsTimeTime):
        (toLocaleTimeString):
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::toDateTimeOptionsAnyDate):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::formatStyleString):
        (JSC::IntlDateTimeFormat::resolvedOptions const):
        * runtime/IntlDateTimeFormat.h:

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [ECMA-402] Implement Intl.DateTimeFormat.prototype.formatRange
        https://bugs.webkit.org/show_bug.cgi?id=209778

        Reviewed by Ross Kirsling.

        This patch adds Intl.DateTimeFormat#formatRange. It takes two dates, and
        generates formatted text which represents interval between these two dates.
        We skip the implementation of Intl.DateTimeFormat#formatRangeToParts since
        ICU udtitvfmt_formatToResult API is not getting stable state yet. We retrieve
        pattern from UDateFormat, get skeleton from that pattern, and construct
        UDateIntervalFormat from this skeleton.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::createDateIntervalFormatIfNecessary):
        (JSC::IntlDateTimeFormat::formatRange):
        (JSC::IntlDateTimeFormat::UDateFormatDeleter::operator() const): Deleted.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototypeFuncFormatRange):

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add Intl.Segmenter
        https://bugs.webkit.org/show_bug.cgi?id=213638

        Reviewed by Ross Kirsling.

        This patch implements Intl.Segmenter[1]. Intl.Segmenter offers access to ICU break iterator feature, which can break strings into grapheme cluster / words / sentences.

        [1]: https://github.com/tc39/proposal-intl-segmenter

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlObject.cpp:
        (JSC::createSegmenterConstructor):
        (JSC::IntlObject::finishCreation):
        (JSC::intlSegmenterAvailableLocales):
        * runtime/IntlObject.h:
        * runtime/IntlSegmentIterator.cpp: Added.
        (JSC::IntlSegmentIterator::create):
        (JSC::IntlSegmentIterator::createStructure):
        (JSC::IntlSegmentIterator::IntlSegmentIterator):
        (JSC::IntlSegmentIterator::finishCreation):
        (JSC::IntlSegmentIterator::visitChildren):
        (JSC::IntlSegmentIterator::next):
        * runtime/IntlSegmentIterator.h: Added.
        * runtime/IntlSegmentIteratorPrototype.cpp: Added.
        (JSC::IntlSegmentIteratorPrototype::create):
        (JSC::IntlSegmentIteratorPrototype::createStructure):
        (JSC::IntlSegmentIteratorPrototype::IntlSegmentIteratorPrototype):
        (JSC::IntlSegmentIteratorPrototype::finishCreation):
        (JSC::IntlSegmentIteratorPrototypeFuncNext):
        * runtime/IntlSegmentIteratorPrototype.h: Added.
        * runtime/IntlSegmenter.cpp: Added.
        (JSC::IntlSegmenter::create):
        (JSC::IntlSegmenter::createStructure):
        (JSC::IntlSegmenter::IntlSegmenter):
        (JSC::IntlSegmenter::finishCreation):
        (JSC::IntlSegmenter::initializeSegmenter):
        (JSC::IntlSegmenter::segment const):
        (JSC::IntlSegmenter::resolvedOptions const):
        (JSC::IntlSegmenter::granularityString):
        (JSC::IntlSegmenter::createSegmentDataObject):
        * runtime/IntlSegmenter.h: Added.
        * runtime/IntlSegmenterConstructor.cpp: Added.
        (JSC::IntlSegmenterConstructor::create):
        (JSC::IntlSegmenterConstructor::createStructure):
        (JSC::IntlSegmenterConstructor::IntlSegmenterConstructor):
        (JSC::IntlSegmenterConstructor::finishCreation):
        (JSC::constructIntlSegmenter):
        (JSC::callIntlSegmenter):
        (JSC::IntlSegmenterConstructorSupportedLocalesOf):
        * runtime/IntlSegmenterConstructor.h: Added.
        * runtime/IntlSegmenterPrototype.cpp: Added.
        (JSC::IntlSegmenterPrototype::create):
        (JSC::IntlSegmenterPrototype::createStructure):
        (JSC::IntlSegmenterPrototype::IntlSegmenterPrototype):
        (JSC::IntlSegmenterPrototype::finishCreation):
        (JSC::IntlSegmenterPrototypeFuncSegment):
        (JSC::IntlSegmenterPrototypeFuncResolvedOptions):
        * runtime/IntlSegmenterPrototype.h: Added.
        * runtime/IntlSegments.cpp: Added.
        (JSC::IntlSegments::create):
        (JSC::IntlSegments::createStructure):
        (JSC::IntlSegments::IntlSegments):
        (JSC::IntlSegments::finishCreation):
        (JSC::IntlSegments::containing):
        (JSC::IntlSegments::createSegmentIterator):
        (JSC::IntlSegments::visitChildren):
        * runtime/IntlSegments.h: Added.
        * runtime/IntlSegmentsPrototype.cpp: Added.
        (JSC::IntlSegmentsPrototype::create):
        (JSC::IntlSegmentsPrototype::createStructure):
        (JSC::IntlSegmentsPrototype::IntlSegmentsPrototype):
        (JSC::IntlSegmentsPrototype::finishCreation):
        (JSC::IntlSegmentsPrototypeFuncContaining):
        (JSC::IntlSegmentsPrototypeFuncIterator):
        * runtime/IntlSegmentsPrototype.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::segmentIteratorStructure):
        (JSC::JSGlobalObject::segmenterStructure):
        (JSC::JSGlobalObject::segmentsStructure):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [ECMA-402] Implement unified Intl.NumberFormat
        https://bugs.webkit.org/show_bug.cgi?id=209774

        Reviewed by Ross Kirsling and Darin Adler.

        This patch implements updated Intl.NumberFormat. This update was proposed in [1], and integrated into ECMA-402 spec.
        This patch adds support for missing features in the previous Intl.NumberFormat implementation. Adding "unit", "unitDisplay",
        "signDisplay", "notation", and "currencySign". Then Intl.NumberFormat can now handle "unit" etc.

        To support new features, we need to use UNumberFormatter which is available after ICU 64 (while it is offered in ICU 62, some
        critical part are added in 64 too). So, we keep the old UNumberFormat based implementation which is used for [60, 64) since WebKit
        currently supports ICU 60. Old implementation does not support new things. If ICU is 64 or later, Intl.NumberFormat starts using
        UNumberFormatter, and implements all the specified features.

        [1]: https://github.com/tc39/proposal-unified-intl-numberformat

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::UCollatorDeleter::operator() const): Deleted.
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::UDateFormatDeleter::operator() const): Deleted.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::computeCurrencyDigits):
        (JSC::sanctionedSimpleUnitIdentifier):
        (JSC::WellFormedUnit::WellFormedUnit):
        (JSC::wellFormedUnitIdentifier):
        (JSC::IntlNumberFormat::initializeNumberFormat):
        (JSC::IntlNumberFormat::format const):
        (JSC::IntlNumberFormat::styleString):
        (JSC::IntlNumberFormat::currencyDisplayString):
        (JSC::IntlNumberFormat::notationString):
        (JSC::IntlNumberFormat::currencySignString):
        (JSC::IntlNumberFormat::unitDisplayString):
        (JSC::IntlNumberFormat::compactDisplayString):
        (JSC::IntlNumberFormat::signDisplayString):
        (JSC::IntlNumberFormat::resolvedOptions const):
        (JSC::partTypeString):
        (JSC::IntlNumberFormat::formatToPartsInternal):
        (JSC::IntlNumberFormat::formatToParts const):
        (JSC::IntlNumberFormat::UNumberFormatDeleter::operator() const): Deleted.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatInlines.h: Added.
        (JSC::setNumberFormatDigitOptions):
        (JSC::IntlFieldIterator::IntlFieldIterator):
        (JSC::IntlFieldIterator::next):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        (JSC::IntlPluralRules::resolvedOptions const):
        (JSC::IntlPluralRules::UPluralRulesDeleter::operator() const): Deleted.
        (JSC::IntlPluralRules::UNumberFormatDeleter::operator() const): Deleted.
        (JSC::UEnumerationDeleter::operator() const): Deleted.
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::formatToParts const):
        (JSC::IntlRelativeTimeFormat::URelativeDateTimeFormatterDeleter::operator() const): Deleted.
        (JSC::IntlRelativeTimeFormat::UNumberFormatDeleter::operator() const): Deleted.
        * runtime/IntlRelativeTimeFormat.h:
        * tools/JSDollarVM.cpp:
        (JSC::functionICUVersion):

2020-08-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Console object's @@toStringTag should be "console" instead of "Console"
        https://bugs.webkit.org/show_bug.cgi?id=215750

        Reviewed by Ross Kirsling.

        Use "console" instead of "Console". Now, namespace object has @@toStringTag.
        https://github.com/web-platform-tests/wpt/pull/24717

        * runtime/ConsoleObject.cpp:

2020-08-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable Intl.DisplayNames
        https://bugs.webkit.org/show_bug.cgi?id=215749

        Reviewed by Ross Kirsling.

        Enable Intl.DisplayNames by default. This is already stage 4 and integrated into the spec.

        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        * runtime/OptionsList.h:

2020-08-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        StrictEq should not care about masqueradesAsUndefinedWatchpoint
        https://bugs.webkit.org/show_bug.cgi?id=215743

        Reviewed by Yusuke Suzuki.

        This patch removes masqueradesAsUndefinedWatchpoint handling for StrictEq
        from fixupCompareStrictEqAndSameValue(), aligning it with SameValue.

        According to the spec [1], only a few language constructs special-case
        [[IsHTMLDDA]] objects: ToBoolean, abstract equality, and `typeof`.

        No behavior change.

        [1]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):

2020-08-21  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265965.
        https://bugs.webkit.org/show_bug.cgi?id=215744

        getCallData can be called from DFG concurrent compiler, but it
        is not safe in DOM PluginObject

        Reverted changeset:

        "Use jsTypeofIsObject() in DFG AI and
        operationTypeOfIsObject()"
        https://bugs.webkit.org/show_bug.cgi?id=144457
        https://trac.webkit.org/changeset/265965

2020-08-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        Align "length" properties of function prototypes with the spec
        https://bugs.webkit.org/show_bug.cgi?id=215716

        Reviewed by Ross Kirsling.

        This change defines Function.prototype.length [1] as [[Configurable]] and
        removes "length" properties from other (async/generator) function prototypes 
        that are ordinary non-callable objects [2], aligning JSC with V8 and SpiderMonkey.

        Also, adds inherits() ASSERT in FunctionPrototype::finishCreation()
        to match (most of) the other built-ins.

        [1]: https://tc39.es/ecma262/#sec-properties-of-the-function-prototype-object
        [2]: https://tc39.es/ecma262/#sec-async-function-prototype-properties

        * runtime/AsyncFunctionPrototype.cpp:
        (JSC::AsyncFunctionPrototype::finishCreation):
        * runtime/AsyncGeneratorFunctionPrototype.cpp:
        (JSC::AsyncGeneratorFunctionPrototype::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::finishCreation):
        * runtime/GeneratorFunctionPrototype.cpp:
        (JSC::GeneratorFunctionPrototype::finishCreation):

2020-08-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        Define Intl[Symbol.toStringTag]
        https://bugs.webkit.org/show_bug.cgi?id=215715

        Reviewed by Ross Kirsling.

        This patch utilizes JSC_TO_STRING_TAG_WITHOUT_TRANSITION() to define Symbol.toStringTag
        on Intl namespace object, implementing the recent spec change [1] and aligning JSC with V8.
        Also, adds inherits() ASSERT to match (most of) the other built-ins.

        [1]: https://github.com/tc39/ecma402/pull/487

        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):

2020-08-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        Function.prototype.bind should not clamp "length" to int32
        https://bugs.webkit.org/show_bug.cgi?id=215733

        Reviewed by Darin Adler.

        This patch fixes to integer conversion of target function's "length" values
        beyond UINT_MAX, aligning JSC with the spec [1], V8 and SpiderMonkey.

        `double` is used instead of `uint64_t` to retain semantics of JS Number type [2]
        and hold Infinity values. To avoid spreading `double length` over JSFunction::create()
        and its subclasses, JSBoundFunction is modified to use JSFunction::finishCreation(VM&)
        overload, removing 2 unused arguments and speeding up bound function creation by ~9%.

        [1]: https://tc39.es/ecma262/#sec-function.prototype.bind (step 6.c.i)
        [2]: https://tc39.es/ecma262/#sec-ecmascript-language-types-number-type

        * builtins/FunctionPrototype.js:
        (bind):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::create):
        (JSC::JSBoundFunction::JSBoundFunction):
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSBoundFunction.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):
        (JSC::JSFunction::reifyLength):
        * runtime/JSGlobalObject.cpp:
        (JSC::makeBoundFunction):

2020-08-20  Saam Barati  <sbarati@apple.com>

        Replace IC on Proxy must write barrier Proxy's target
        https://bugs.webkit.org/show_bug.cgi?id=215720

        Reviewed by Yusuke Suzuki.

        The put_by_id opcode in the baseline and the DFG/FTl will emit a writeBarrier
        after the operation is complete. But it does this to the base object. In the
        case of an IC with the base as a Proxy, we're not actually storing to the Proxy, but
        instead, the Proxy's target. This patch makes it so our IC code writeBarriers
        the Proxy's target. This fixed a crash when running Speedometer2.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::canReplace const):
        (JSC::AccessCase::generateImpl):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::AccessGenerationState::preserveLiveRegistersToStackForCallWithoutExceptions):
        * bytecode/PolymorphicAccess.h:

2020-08-20  Alexey Shvayka  <shvaikalesh@gmail.com>

        Invalid early errors for class methods named "constructor" and "prototype"
        https://bugs.webkit.org/show_bug.cgi?id=215413

        Reviewed by Darin Adler.

        This change removes invalid early syntax errors, allowing static async/generator
        methods named "constructor" and instance async/generator methods named "prototype",
        which aligns JSC with the spec [1], V8, and SpiderMonkey.

        Also, removes a FIXME related to super() calls outside constructor that was
        resolved in r181404 and is covered by test262 suite.

        [1]: https://tc39.es/ecma262/#sec-class-definitions-static-semantics-early-errors

        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseClass):

2020-08-20  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use jsTypeofIsObject() in DFG AI and operationTypeOfIsObject()
        https://bugs.webkit.org/show_bug.cgi?id=144457

        Reviewed by Saam Barati.

        This patch:

        1. Refactors jsTypeofIsObject(), leveraging fast path of isCallable(),
           moves it to the header, and utilizes it in DFG AI and
           operationTypeOfIsObject() to eliminate code duplication.

        2. Splits jsTypeofIsFunction() into 2 methods to accomodate
           operationTypeOfIsFunction() calling it with JSObject* argument.

        3. Removes orphaned slow_path_is_object declaration.

        No behavior change, `typeof` microbenchmarks are neutral.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeofIsObject): Deleted.
        * runtime/Operations.h:
        (JSC::jsTypeofIsObject):
        (JSC::jsTypeofIsFunction):

2020-08-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add Object.getOwnPropertyNames caching as it is done for Object.keys, and accelerate Object.getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=215666

        Reviewed by Saam Barati.

        Object.getOwnPropertyNames is immutable for Structure if structure meets some conditions. And we have optimization for Object.keys.
        This patch wires existing caching mechanism for Object.keys to Object.getOwnPropertyNames so that Object.getOwnPropertyNames has
        full support of caching & inlined code in DFG / FTL.

        We also pre-bake structure for the result of Object.getOwnPropertyDescriptor so that we do not need to perform hash table lookup every
        time we create an object for Object.getOwnPropertyDescriptor. This makes Object.getOwnPropertyDescriptor 2x faster from the microbenchmark.

        The above two optimization makes Speedometer2/Inferno-TodoMVC 7% faster, and it also optimizes Speedometer2/EmberJS-Debug by 5%.
        In total, we can get 0.7 - 1.0% progression in Speedometer2.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectKeysOrObjectGetOwnPropertyNames):
        (JSC::DFG::SpeculativeJIT::compileObjectKeys): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeysOrObjectGetOwnPropertyNames):
        (JSC::FTL::DFG::LowerDFGToB3::compileObjectKeys): Deleted.
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/IteratorOperations.cpp:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::dataPropertyDescriptorObjectStructure const):
        (JSC::JSGlobalObject::accessorPropertyDescriptorObjectStructure const):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncOwnKeys):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorGetOwnPropertySymbols):
        (JSC::objectConstructorKeys):
        (JSC::ownPropertyKeys):
        (JSC::constructObjectFromPropertyDescriptorSlow):
        * runtime/ObjectConstructor.h:
        (JSC::createDataPropertyDescriptorObjectStructure):
        (JSC::createAccessorPropertyDescriptorObjectStructure):
        (JSC::constructObjectFromPropertyDescriptor):
        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectOwnKeys):
        * runtime/Structure.cpp:
        (JSC::Structure::canCachePropertyNameEnumerator const):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::setCachedPropertyNames):
        (JSC::Structure::cachedPropertyNames const):
        (JSC::Structure::cachedPropertyNamesIgnoringSentinel const):
        (JSC::Structure::canCacheOwnPropertyNames const):
        (JSC::Structure::setCachedOwnKeys): Deleted.
        (JSC::Structure::cachedOwnKeys const): Deleted.
        (JSC::Structure::cachedOwnKeysIgnoringSentinel const): Deleted.
        (JSC::Structure::canCacheOwnKeys const): Deleted.
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::visitChildren):
        * runtime/StructureRareData.h:
        * runtime/StructureRareDataInlines.h:
        (JSC::StructureRareData::cachedPropertyNames const):
        (JSC::StructureRareData::cachedPropertyNamesIgnoringSentinel const):
        (JSC::StructureRareData::cachedPropertyNamesConcurrently const):
        (JSC::StructureRareData::setCachedPropertyNames):
        (JSC::StructureRareData::cachedOwnKeys const): Deleted.
        (JSC::StructureRareData::cachedOwnKeysIgnoringSentinel const): Deleted.
        (JSC::StructureRareData::cachedOwnKeysConcurrently const): Deleted.
        (JSC::StructureRareData::setCachedOwnKeys): Deleted.

2020-08-19  Alexey Shvayka  <shvaikalesh@gmail.com>

        Introduce OpIsCallable bytecode and intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=215572

        Reviewed by Ross Kirsling and Saam Barati.

        This patch:

        1. Aligns slow_path_is_function with DFG/FTL implementations by introducing
           jsTypeofIsFunction() helper. This fixes `typeof document.all === "function"`
           to return `false` instead of `true`.

        2. Renames is_function bytecode op to typeof_is_function, aligning it with
           typeof_is_undefined and typeof_is_object. New name offers better semantics
           and clearly communicates the op should be avoided when implementing new
           features because of `typeof` behavior with [[IsHTMLDDA]] objects [1].

        3. Adds is_callable bytecode op and utilizes it in built-ins via intrinsic,
           removing `typeof callback === "function"` checks. This prevents [[IsHTMLDDA]]
           objects from being considered non-callable [2].

           To preserve the fast path for JSFunctionType,
           createFunctionThatMasqueradesAsUndefined() is relocated to InternalFunction.

        `typeof` microbenchmarks are neutral.

        [1]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-typeof
        [2]: https://tc39.es/ecma262/#sec-array.prototype.map (step 3)

        * builtins/ArrayConstructor.js:
        * builtins/ArrayPrototype.js:
        (reduce):
        (reduceRight):
        (every):
        (forEach):
        (filter):
        (map):
        (some):
        (find):
        (findIndex):
        (sort):
        (flatMap):
        * builtins/FunctionPrototype.js:
        (overriddenName.string_appeared_here.symbolHasInstance):
        (bind):
        * builtins/MapPrototype.js:
        (forEach):
        * builtins/PromiseConstructor.js:
        (all):
        (allSettled):
        (any):
        (race):
        (nakedConstructor.Promise):
        (nakedConstructor.InternalPromise):
        * builtins/PromiseOperations.js:
        (globalPrivate.newPromiseCapabilitySlow):
        (globalPrivate.resolvePromise):
        (globalPrivate.resolveWithoutPromise):
        * builtins/PromisePrototype.js:
        (finally):
        (globalPrivate.getThenFinally):
        (globalPrivate.getCatchFinally):
        * builtins/ReflectObject.js:
        (apply):
        * builtins/RegExpPrototype.js:
        (globalPrivate.regExpExec):
        (overriddenName.string_appeared_here.replace):
        * builtins/SetPrototype.js:
        (forEach):
        * builtins/TypedArrayConstructor.js:
        * builtins/TypedArrayPrototype.js:
        (every):
        (find):
        (findIndex):
        (forEach):
        (some):
        (sort):
        (reduce):
        (reduceRight):
        (map):
        (filter):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        (JSC::BytecodeGenerator::emitIsCallable):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGHeapLocation.h:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIsCallable):
        (JSC::DFG::SpeculativeJIT::compileIsFunction): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsCallable):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JITOperations.h:
        * jsc.cpp:
        (functionMakeMasquerader):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createFunctionThatMasqueradesAsUndefined):
        * runtime/InternalFunction.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::createFunctionThatMasqueradesAsUndefined): Deleted.
        * runtime/JSFunction.h:
        * runtime/Operations.h:
        (JSC::jsTypeofIsFunction):

2020-08-19  Saam Barati  <sbarati@apple.com>

        REGRESSION (r265775): DFG ASSERTION FAILED: AI-clobberize disagreement; AI says FoldedClobber while clobberize says (Direct:[], Super:[])
        https://bugs.webkit.org/show_bug.cgi?id=215639
        <rdar://problem/67376432>

        Reviewed by Robin Morisset.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-08-19  Tadeu Zagallo  <tzagallo@apple.com>

        B3 IntRange is incorrect for negative masks
        https://bugs.webkit.org/show_bug.cgi?id=215536
        <rdar://problem/67130430>

        Reviewed by Michael Saboff and Robin Morisset.

        In the B3 ReduceStrength phase, we compute rangeForMask as (0, mask).  This is correct for
        positive values, but incorrect when negative. To fix it, we use `(INT_MIN & mask, INT_MAX & mask)`
        as the range for negative masks.

        * b3/B3ReduceStrength.cpp:
        * b3/testb3.h:
        * b3/testb3_1.cpp:
        (run):
        * b3/testb3_5.cpp:
        (testCheckSubBitAnd):

2020-08-18  Saam Barati  <sbarati@apple.com>

        Update byte offsets in JSString.h comment
        https://bugs.webkit.org/show_bug.cgi?id=215621

        Reviewed by Yusuke Suzuki.

        * runtime/JSString.h:

2020-08-17  Saam Barati  <sbarati@apple.com>

        Have an OOB+SaneChain Array::Speculation
        https://bugs.webkit.org/show_bug.cgi?id=215487

        Reviewed by Yusuke Suzuki.

        This patch adds a new ArrayMode speculation in the DFG/FTL called OutOfBoundsSaneChain.
        It allows us to do fast things when we go OOB, like simply return undefined.
        This is because we install watchpoints on the prototype chain to ensure they
        have no indexed properties. This patch implements OutOfBoundsSaneChain on
        GetByVal over Int32/Double/Contiguous original JS arrays. We can extend it in
        the future to non original JS arrays if we prove their prototype is Array.prototype. 
        To implement this properly, we also need to ensure that the index isn't negative,
        as Array.prototype/Object.prototype may have negative indexed accessors. We
        do this via speculation, and if we ever recompile, and see an exit because of
        this, we will stop speculating OutOfBoundsSaneChain.
        
        This is about 20% faster on crypto-md5-SP. And ~3-4x faster on the
        microbenchmarks I created.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::refine const):
        (JSC::DFG::arraySpeculationToString):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::isInBoundsSaneChain const):
        (JSC::DFG::ArrayMode::isOutOfBoundsSaneChain const):
        (JSC::DFG::ArrayMode::isOutOfBounds const):
        (JSC::DFG::ArrayMode::isEffectfulOutOfBounds const):
        (JSC::DFG::ArrayMode::isInBounds const):
        (JSC::DFG::ArrayMode::isSaneChain const): Deleted.
        * dfg/DFGCSEPhase.cpp:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::checkArray):
        (JSC::DFG::FixupPhase::setSaneChainIfPossible):
        (JSC::DFG::FixupPhase::convertToHasIndexedProperty):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compileHasIndexedProperty):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGValidate.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasIndexedProperty):

2020-08-16  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove OpIsObjectOrNull from ClassExprNode::emitBytecode()
        https://bugs.webkit.org/show_bug.cgi?id=214525

        Reviewed by Keith Miller.

        This patch:

        1. Replaces OpIsObjectOrNull in ClassExprNode::emitBytecode() [1] with emitIsObject() +
           emitIsNull(), preventing DFG/FTL from throwing a TypeError if `document.all` is the
           value of superclass "prototype" property, which aligns JSC with V8 and SpiderMonkey.
           Also, tweaks error message to reflect that `null` is allowed.

        2. Renames is_object_or_null bytecode op to typeof_is_object, fixing the confusing
           operationObjectIsObject() name, and aligns it with typeof_is_undefined.
           New name offers better semantics and clearly communicates the op should be avoided when
           implementing new features because of `typeof` behavior with [[IsHTMLDDA]] objects [2].

        [1]: https://tc39.es/ecma262/#sec-runtime-semantics-classdefinitionevaluation (step 5.g.ii)
        [2]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot-typeof

        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGHeapLocation.h:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileTypeOfIsObject):
        (JSC::DFG::SpeculativeJIT::compileIsObjectOrNull): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileTypeOfIsObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeofIsObject):
        (JSC::jsIsObjectTypeOrNull): Deleted.
        * runtime/Operations.h:

2020-08-15  Adrian Perez de Castro  <aperez@igalia.com>

        Unreviewed non-unified source build fix

        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp: Add missing OperandsInlines.h header.

2020-08-14  Caio Lima  <ticaiolima@gmail.com>

        [ARMv7][JSC] Conservative GC is not considering `r7` as a root
        https://bugs.webkit.org/show_bug.cgi?id=215512

        Reviewed by Yusuke Suzuki.

        Since `r7` is a callee-saved register on ARMv7
        we need to consider it as a conservative root.

        See the statement "A subroutine must preserve
        the contents of the registers r4-r8, r10, r11
        and SP (and r9 in PCS variants that designate
        r9 as v6) form page 15 of
        https://developer.arm.com/documentation/ihi0042/f/.

        * heap/RegisterState.h:

2020-08-12  Keith Miller  <keith_miller@apple.com>

        OSRAvailabilityAnalysis shouldn't mark GetStack nodes directly as valid places for recovery
        https://bugs.webkit.org/show_bug.cgi?id=215434

        Reviewed by Saam Barati.

        It's somewhat subtle why we cannot use the node for the GetStack
        itself in the Availability's node field. The reason is that if we
        did we would need to make any phase that converts nodes to
        GetStack availability aware. For instance, a place where this
        could come up is in constant folding if you had a graph like the
        following, which could arise from PutStack sinking:

        BB#1:
        @1: NewObject()
        @2: MovHint(@1, inline-arg1)
        @3: Jump(#2, #3)

        BB#2:
        @4: PutStack(@1, inline-arg1)
        @5: GetMyArgumentByVal(inline-arg1)
        @6: Jump(#3)

        BB#3:
        @7: InvalidationPoint()

        If constant folding converts @5 to a GetStack then at @7
        inline-arg1 won't be available since at the end of BB#1 our
        availability is (@1, DeadFlush) and (@5,
        FlushedAt(inline-arg1)). When that gets merged at BB#3 then the
        availability will be (nullptr, ConflictingFlush).

        This patch also makes validation check that availability is sane
        at each pontential exit site if
        Options::validateFTLOSRExitLiveness() is set. Since this is
        actually a Phase we also need to make sure that we don't infinite
        loop, so there is now a m_isValidating field on m_graph. The
        validateOSRExitAvailability phase is also careful not to modify
        the Graph, in order to avoid masking bugs when validating.

        In a followup patch I intend to look into why MovHint elimination
        will convert:

        @2: MovHint(@0, loc1, bc#1, ExitInvalid)
        @3: KillStack(loc1, bc#2, ExitValid)
        @4: MovHint(@1 loc1, bc#2, ExitInvalid)

        into

        @2: ZombieHint(@0, loc1, bc#1, ExitInvalid)
        @3: KillStack(loc1, bc#2, ExitValid)
        @4: MovHint(@1 loc1, bc#2, ExitInvalid)

        when loc1 is live in the bytecode at bc#2. But for now, the
        validation rule works around this by only checking when mayExit
        and the nodes exitOK agree exiting is possible.

        * dfg/DFGGraph.h:
        * dfg/DFGOSRAvailabilityAnalysisPhase.cpp:
        (JSC::DFG::OSRAvailabilityAnalysisPhase::OSRAvailabilityAnalysisPhase):
        (JSC::DFG::OSRAvailabilityAnalysisPhase::run):
        (JSC::DFG::performOSRAvailabilityAnalysis):
        (JSC::DFG::validateOSRExitAvailability):
        (JSC::DFG::LocalOSRAvailabilityCalculator::executeNode):
        * dfg/DFGOSRAvailabilityAnalysisPhase.h:
        * dfg/DFGPhase.h:
        (JSC::DFG::runPhase):
        * dfg/DFGValidate.cpp:

2020-08-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Cache Structure::attributeChangeTransition()
        https://bugs.webkit.org/show_bug.cgi?id=214890

        Reviewed by Yusuke Suzuki.

        With this change, a non-dictionary structure adds attribute-change transitions
        to transition table, making redefinition to previous atttributes a fast path.

        After too many transitions, the structure becomes a dictionary, firing the
        transition watchpoint. Attribute-change transitions pin their property tables,
        preventing forEachPropertyConcurrently() traversal.

        This patch advances provided microbenchmark by ~90% and progresses
        Speedometer2/EmberJS-Debug-TodoMVC by ~12% (~5% over r264573).

        No behavior change.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::getRegExpPrototypeProperty):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        (JSC::Structure::removeNewPropertyTransition):
        (JSC::Structure::attributeChangeTransition):
        * runtime/Structure.h:

2020-08-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Rework StructureTransitionTable::Hash::Key encoding
        https://bugs.webkit.org/show_bug.cgi?id=215483

        Reviewed by Yusuke Suzuki.

        This patch implements new encoding of StructureTransitionTable::Hash::Key
        to enable storing attribute change transitions in a transition table.

        Since PropertyMapEntry attributes are always uint8_t, the remaining 8 bits
        are used for TransitionKind, which also accommodates non-property transitions,
        removing a bit hacky toAttributes() and utilization of unused pointer bits.

        This change also introduces TransitionKind::Unknown we can validate against,
        preventing addition transition from being a default, which could be unsafe.

        No behavior change.

        * runtime/JSObject.cpp:
        (JSC::JSObject::notifyPresenceOfIndexedAccessors):
        (JSC::JSObject::createInitialUndecided):
        (JSC::JSObject::createInitialInt32):
        (JSC::JSObject::createInitialDouble):
        (JSC::JSObject::createInitialContiguous):
        (JSC::JSObject::convertUndecidedToInt32):
        (JSC::JSObject::convertUndecidedToDouble):
        (JSC::JSObject::convertUndecidedToContiguous):
        (JSC::JSObject::convertUndecidedToArrayStorage):
        (JSC::JSObject::convertInt32ToDouble):
        (JSC::JSObject::convertInt32ToContiguous):
        (JSC::JSObject::convertInt32ToArrayStorage):
        (JSC::JSObject::convertDoubleToContiguous):
        (JSC::JSObject::convertDoubleToArrayStorage):
        (JSC::JSObject::convertContiguousToArrayStorage):
        (JSC::JSObject::convertFromCopyOnWrite):
        (JSC::JSObject::switchToSlowPutArrayStorage):
        (JSC::JSObject::suggestedArrayStorageTransition const):
        * runtime/JSObject.h:
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::contains const):
        (JSC::StructureTransitionTable::get const):
        (JSC::StructureTransitionTable::add):
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransitionToExistingStructureImpl):
        (JSC::Structure::addNewPropertyTransition):
        (JSC::Structure::removePropertyTransitionFromExistingStructureImpl):
        (JSC::Structure::removeNewPropertyTransition):
        (JSC::Structure::sealTransition):
        (JSC::Structure::freezeTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::nonPropertyTransitionSlow):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::nonPropertyTransition):
        * runtime/StructureTransitionTable.h:
        (JSC::changesIndexingType):
        (JSC::newIndexingType):
        (JSC::preventsExtensions):
        (JSC::setsDontDeleteOnAllProperties):
        (JSC::setsReadOnlyOnNonAccessorProperties):
        (JSC::StructureTransitionTable::Hash::Key::Key):
        (JSC::StructureTransitionTable::Hash::Key::attributes const):
        (JSC::StructureTransitionTable::Hash::Key::transitionKind const):
        (JSC::StructureTransitionTable::Hash::hash):
        (JSC::toAttributes): Deleted.
        (JSC::StructureTransitionTable::Hash::Key::isAddition const): Deleted.

2020-08-12  Keith Rollin  <krollin@apple.com>

        Remove the need for defining USE_NEW_BUILD_SYSTEM
        https://bugs.webkit.org/show_bug.cgi?id=215439

        Reviewed by Darin Adler.

        When building WebKit for XCBuild, we currently require that the
        external build system (such as the Makefile, build-webkit, etc.)
        defines the USE_NEW_BUILD_SYSTEM=YES build setting. This build setting
        controls parts of our build instructions that are sensitive to when
        XCBuild or the Legacy build system are being used. Notably, we need to
        know when to use our custom “copy and modify” scripts with copying
        certain header files (used with the Legacy build system) vs. using the
        enhanced Copy Headers build phase that’s enabled with
        APPLY_RULES_IN_COPY_HEADERS=YES (introduced with and used by XCBuild).
        The choice of which method to copy headers is used is controlled by
        USE_NEW_BUILD_SYSTEM.

        There is no built-in build setting that we can probe to help us
        determine which approach to take when copying and modifying headers,
        which is why we need to define USE_NEW_BUILD_SYSTEM ourselves. But it
        turns out that we can *detect* which build system is being used by
        taking advantage of a subtle difference between the two systems. As
        noted in:

            https://developer.apple.com/documentation/xcode-release-notes/build-system-release-notes-for-xcode-10

            “When an .xcconfig file contains multiple assignments of the same
             build setting, later assignments using $(inherited) or
             $(<setting_name>) will inherit from earlier assignments in the
             .xcconfig. The legacy build system caused every use of
             $(inherited) or $(<setting_name>) skip any other values defined
             within the .xcconfig.”

        This difference can be exploited as follows:

            WK_WHICH_BUILD_SYSTEM = not_
            WK_WHICH_BUILD_SYSTEM = $(inherited)legacy
            WK_USE_NEW_BUILD_SYSTEM = $(WK_USE_NEW_BUILD_SYSTEM_$(WK_WHICH_BUILD_SYSTEM))
            WK_USE_NEW_BUILD_SYSTEM_legacy = NO
            WK_USE_NEW_BUILD_SYSTEM_not_legacy = YES

        We can then use WK_USE_NEW_BUILD_SYSTEM where we used to use the
        externally-defined USE_NEW_BUILD_SYSTEM.

        * Configurations/Base.xcconfig:
        * Configurations/JavaScriptCore.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-08-12  Saam Barati  <sbarati@apple.com>

        Inline cache Replace and Setters on PureForwardingProxy
        https://bugs.webkit.org/show_bug.cgi?id=215250

        Reviewed by Yusuke Suzuki.

        We didn't used to cache any Puts on PureForwardingProxy. This patch
        implements Replace and JS/Custom Setters on PureForwardingProxy. We don't support
        Transition puts because in our current implementation different global objects
        will never share the same structure.
        
        This patch also aligns how our runtime and the ICs invoke Customs when the
        passed in |this| value is a JSProxy. For custom accessors, our runtime passes
        in the JSProxy, where our ICs used to pass in the target of the JSProxy, for
        the receiver value. For custom values, the IC behavior and the runtime were
        already aligned in passing in the property owner, which is the JSProxy's
        target. This patch aligns our IC behavior to match our runtime behavior.
        
        This patch also renames some of the registers in the IC code to clear
        up what they're used for.
        
        This is a 2.5x speedup on the microbenchmark I've added, and a 15-20% speedup
        on JetStream2's 3d-cube-SP.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        (JSC::AccessCase::generateImpl):
        * bytecode/GetterSetterAccessCase.cpp:
        (JSC::GetterSetterAccessCase::create):
        * bytecode/GetterSetterAccessCase.h:
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        (JSC::tryCachePutByID):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::originalStructureBeforePut):
        (JSC::CommonSlowPaths::putDirectWithReify):

2020-08-11  Mark Lam  <mark.lam@apple.com>

        ScriptExecutable::newCodeBlockFor() neglected to set the exception pointer result in one case.
        https://bugs.webkit.org/show_bug.cgi?id=215357
        <rdar://problem/57675112>

        Reviewed by Yusuke Suzuki.

        At the bottom of ScriptExecutable::newCodeBlockFor(), it calls:
            RELEASE_AND_RETURN(throwScope, FunctionCodeBlock::create(vm, executable, unlinkedCodeBlock, scope));

        However, ScriptExecutable::newCodeBlockFor() has 2 return values: a CodeBlock*,
        and a passed in Exception*& that needs to be set if there's an exception.
        FunctionCodeBlock::create() is capable of returning a null CodeBlock* because
        CodeBlock::finishCreation() can throw exceptions.  As a result, we have a scenario
        here where ScriptExecutable::newCodeBlockFor() can return a null CodeBlock* without
        setting the Exception*& result.

        Consequently, Interpreter::executeCall() is relying on this and can end up
        crashing while dereferencing a null CodeBlock* because the exception result was
        not set.

        This patch fixes ScriptExecutable::newCodeBlockFor() to set the exception result.

        * runtime/ScriptExecutable.cpp:
        (JSC::ScriptExecutable::newCodeBlockFor):

2020-08-10  Lauro Moura  <lmoura@igalia.com>

        [CMake][JSC] Fix testapiScripts copy location
        https://bugs.webkit.org/show_bug.cgi?id=215338

        file(COPY src/dir DESTINATION target/dir) copies the entire `dir`
        inside target/dir instead of only the contents.

        Reviewed by Alex Christensen.

        * shell/CMakeLists.txt:

2020-08-10  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r261159) PokerBros only shows black screen
        https://bugs.webkit.org/show_bug.cgi?id=215293
        <rdar://problem/66073740>

        Reviewed by Keith Miller.

        The PokerBros app has some logic that was broken by the change in behavior of r261159.
        It caused the app do do nothing except show a black screen upon opening.
        Revert to the old behavior for this app until they update to iOS14.

        * runtime/JSObject.cpp:
        (JSC::needsOldStringName):
        (JSC::JSObject::toStringName):

2020-08-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSFinalObject::finishCreation's ASSERT has stale condition
        https://bugs.webkit.org/show_bug.cgi?id=215317

        Reviewed by Mark Lam.

        JSFinalObject::finishCreation assumes that there is no out-of-line property storage (inline storage capacity == total storage capacity).
        But this is wrong when passing Butterfly* parameter to JSFinalObject. Previously, this feature is not used and we instead used JSObject::createRawObject,
        which bypasses this assertion. But now, we start using this when creating an object for MaterializeNewObject in DFG and FTL, and then we hit the crash
        because this assertion does not consider about non-nullptr butterfly.

        This patch makes create function explicit by introducing `JSFinalObject::createWithButterfly`, which is similar to JSArray::createWithButterfly.
        And we fix the assertion by checking butterfly existence. By renaming JSFinalObject::create to JSFinalObject::createWithButterfly when getting butterfly,
        this patch also clarifies that only MaterializeNewObject related functions, which were using JSObject::createRawObject to bypass this assertion, is passing
        butterfly.

        * dfg/DFGOperations.cpp:
        * runtime/JSObject.h:
        (JSC::JSFinalObject::createWithButterfly):
        (JSC::JSFinalObject::create):

2020-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265392.
        https://bugs.webkit.org/show_bug.cgi?id=215316

        Crash ARM64 / ARM64E JSC tests

        Reverted changeset:

        "REGRESSION(r261159) PokerBros only shows black screen"
        https://bugs.webkit.org/show_bug.cgi?id=215293
        https://trac.webkit.org/changeset/265392

2020-08-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make CommandLine on Worker agent (JSC shell feature for testing) work on iOS
        https://bugs.webkit.org/show_bug.cgi?id=215311
        <rdar://problem/66660053>

        Reviewed by Mark Lam.

        We should not reconfigure Options since this is once initialized. Since Options are frozen,
        this results in crash.

        * jsc.cpp:
        (CommandLine::CommandLine):
        (functionDollarAgentStart):

2020-08-09  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263195, r263252, and r265394.
        https://bugs.webkit.org/show_bug.cgi?id=215312

        Revert all related GC Bitmap changes because some of perf is
        not fully recovered

        Reverted changesets:

        "Replace JSC::FreeList linked list with a Bitmap."
        https://bugs.webkit.org/show_bug.cgi?id=213071
        https://trac.webkit.org/changeset/263195

        "Unify Bitmap math loops in
        MarkedBlock::Handle::specializedSweep()."
        https://bugs.webkit.org/show_bug.cgi?id=213345
        https://trac.webkit.org/changeset/263252

        "[JSC] Disable ENABLE_BITMAP_FREELIST"
        https://bugs.webkit.org/show_bug.cgi?id=215285
        https://trac.webkit.org/changeset/265394

2020-08-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Speculate children first in DFG NewArray
        https://bugs.webkit.org/show_bug.cgi?id=215308
        <rdar://problem/64749263>

        Reviewed by Mark Lam.

        SpeculativeJIT::emitAllocateRawObject can create uninitialized butterfly since we later fill them.
        However, DFG NewArray node has speculation after that. So if speculation failure happens, we release
        half-baked butterfly.

        Let's see the example.

           8459         emitAllocateRawObject(resultGPR, structure, storageGPR, numElements, vectorLengthHint);
           ...
           8482             case ALL_INT32_INDEXING_TYPES:
           8483             case ALL_CONTIGUOUS_INDEXING_TYPES: {
           8484                 JSValueOperand operand(this, use, ManualOperandSpeculation);
           8485                 JSValueRegs operandRegs = operand.jsValueRegs();
           8486                 if (hasInt32(node->indexingType())) {
           8487                     DFG_TYPE_CHECK(
           8488                         operandRegs, use, SpecInt32Only,
           8489                         m_jit.branchIfNotInt32(operandRegs));
           8490                 }
           8491                 m_jit.storeValue(operandRegs, MacroAssembler::Address(storageGPR, sizeof(JSValue) * operandIdx));
           8492                 break;
           8493             }

        L8487-L8489 is doing speculation check. If it failed, the rest of the butterfly can be filled with garbage. This looks OK since
        it is Int32 butterfly so GC never scans it. However, if have-a-bad-time happens and the array is reachable from the conservative root,
        this half-baked array is converted from Int32 array to ArrayStorage. At that time, since Int32 butterfly should hold JSInt32,
        we store this garbage to ArrayStorage. Later, if conservative root still holds this array, and GC scans this garbage as as JSValue,
        this value confuses GC.

        In this patch, we first perform speculation before creating uninitialized JSArray so that we can ensure that we never exit after
        creating this array until we fill it. This strategy is the same to FTL's NewArray implementation.

        And we also found that emitAllocateRawObject is allocating an object from JSFinalObject space while we use it for JSArray too.
        We should get per-type allocator to ensure JSArray is allocated in its IsoSubspace.

        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateRawObject):
        (JSC::DFG::SpeculativeJIT::compileNewArray):
        (JSC::DFG::SpeculativeJIT::compileMaterializeNewObject):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArray):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        * runtime/JSObject.h:
        (JSC::JSObject::createRawObject): Deleted.

2020-08-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Disable ENABLE_BITMAP_FREELIST
        https://bugs.webkit.org/show_bug.cgi?id=215285

        Reviewed by Mark Lam.

        From performance bots, we observed that,

            1. MBP11,4 shows 1% regression in Speedometer2.
            2. The other MBP / iMac / MBA bots show neutral or slight regression in Speedometer2.

        Based on the above result, for now, we disable this feature.

        * heap/FreeList.h:

2020-08-07  Alex Christensen  <achristensen@webkit.org>

        REGRESSION(r261159) PokerBros only shows black screen
        https://bugs.webkit.org/show_bug.cgi?id=215293

        Reviewed by Keith Miller.

        The PokerBros app has some logic that was broken by the change in behavior of r261159.
        It caused the app do do nothing except show a black screen upon opening.
        Revert to the old behavior for this app until they update to iOS14.

        * runtime/JSObject.cpp:
        (JSC::needsOldStringName):
        (JSC::JSObject::toStringName):

2020-08-07  Michael Saboff  <msaboff@apple.com>

        RegExp sticky not matching alternates correctly, ignoring lastIndex requirement
        https://bugs.webkit.org/show_bug.cgi?id=214181

        Reviewed by Yusuke Suzuki.

        In the YARR JIT, we need to check for sticky patterns before checking for fixed character
        terms when backtracking.  The YARR interpreter doesn't have this issue.

        * yarr/YarrJIT.cpp:

2020-08-05  Tim Horton  <timothy_horton@apple.com>

        Remove all references to non-existent 10.16
        https://bugs.webkit.org/show_bug.cgi?id=215202

        Reviewed by Wenson Hsieh.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-08-05  Saam Barati  <sbarati@apple.com>

        Fix returnEarlyFromInfiniteLoopsForFuzzing in DFG and validateDoesGC
        https://bugs.webkit.org/show_bug.cgi?id=215194
        <rdar://problem/66158641>

        Reviewed by Mark Lam.

        I already fixed this same issue in the FTL in r264330, but I forgot
        to do it in the DFG.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2020-08-05  Keith Miller  <keith_miller@apple.com>

        The various AllowList options should be able to take the function name inline
        https://bugs.webkit.org/show_bug.cgi?id=215184

        Reviewed by Saam Barati.

        Right now when I use the various AllowList JSC options I almost
        always only care about a single function. Right now you need to
        create a file with that single name in it. That is inconvenient, so
        this patch changes the behavior to treat the string as the
        function name if no file at that path exists. I'm also
        speculatively assuming fopen doesn't return ENOENT when it fails
        due to sandboxing... I didn't feel like testing it because this is
        a debug option.

        * runtime/OptionsList.h:
        * tools/FunctionAllowlist.cpp:
        (JSC::FunctionAllowlist::FunctionAllowlist):

2020-08-05  Keith Miller  <keith_miller@apple.com>

        Add assertions / inline capacity to checkpoint side state stacks
        https://bugs.webkit.org/show_bug.cgi?id=215175

        Reviewed by Saam Barati.

        The inline capacity should hopefully avoid unneeded mallocs close to 100% of the time during our OSR exit ramp.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * runtime/VM.cpp:
        (JSC::VM::pushCheckpointOSRSideState):
        * runtime/VM.h:

2020-08-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use LazyNeverDestroyed & std::call_once for complex singletons
        https://bugs.webkit.org/show_bug.cgi?id=215153
        <rdar://problem/65718983>

        Reviewed by Mark Lam.

        We are getting some crashes in RemoteInspector and this speculatively fixes the crash.
        My guess is that NeverDestroyed<RemoteInspector> calls constructor twice in heavily contended situation:
        WebKit's static does not have thread-safety. If two threads come here at the same time, it is possible that
        constructor is invoked twice. In that case, later constructor will clear members, which involves clearing
        Lock m_mutex field. This makes Lock's invariant broken.
        This patch uses LazyNeverDestroyed and std::call_once to ensure invoking constructor only once.

        * API/glib/JSCVirtualMachine.cpp:
        * dfg/DFGCommonData.cpp:
        * disassembler/Disassembler.cpp:
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::singleton):
        * inspector/remote/glib/RemoteInspectorGlib.cpp:
        (Inspector::RemoteInspector::singleton):
        * inspector/remote/socket/RemoteInspectorServer.cpp:
        (Inspector::RemoteInspectorServer::singleton):
        * inspector/remote/socket/RemoteInspectorServer.h:
        * inspector/remote/socket/RemoteInspectorSocket.cpp:
        (Inspector::RemoteInspector::singleton):
        * inspector/remote/socket/RemoteInspectorSocketEndpoint.cpp:
        (Inspector::RemoteInspectorSocketEndpoint::singleton):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::opcodeIDTable):
        * runtime/IntlObject.cpp:
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):
        (JSC::defaultLocale):
        (JSC::numberingSystemsForLocale):

2020-08-04  Keith Miller  <keith_miller@apple.com>

        CheckpointSideState shoud play nicely with StackOverflowException unwinding.
        https://bugs.webkit.org/show_bug.cgi?id=215114

        Reviewed by Saam Barati.

        This patch fixes an issue where we the StackVisitor would
        automatically unwind into the first frame before calling into the
        provided functor. As a note, we do this because the first frame is
        not fully initialized at the time we check for stack
        overflow. When this happened we would fail to clear the side state
        causing a memory leak. To fix this the unwind function now clears
        every checkpoint up to and including the call frame containing our
        handler. Some care needs to be taken that we don't clear
        checkpoint side state for other threads, which could happen if
        there are no checkpoints on the current thread and an API
        miggrated us from another thread below the current thread.

        This patch also makes two refacorings. The first is to make the
        checkpoint side state into a stack, which is how we used it
        anyway. The second is that CallFrame::dump and everything associated
        with it is now marked const so we can PointerDump a CallFrame*.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::bytecodeIndex const):
        (JSC::CallFrame::codeOrigin const):
        (JSC::CallFrame::dump const):
        (JSC::CallFrame::bytecodeIndex): Deleted.
        (JSC::CallFrame::codeOrigin): Deleted.
        (JSC::CallFrame::dump): Deleted.
        * interpreter/CallFrame.h:
        (JSC::CallFrame::argument const):
        (JSC::CallFrame::uncheckedArgument const):
        (JSC::CallFrame::getArgumentUnsafe const):
        (JSC::CallFrame::thisValue const):
        (JSC::CallFrame::newTarget const):
        (JSC::CallFrame::argument): Deleted.
        (JSC::CallFrame::uncheckedArgument): Deleted.
        (JSC::CallFrame::getArgumentUnsafe): Deleted.
        (JSC::CallFrame::thisValue): Deleted.
        (JSC::CallFrame::newTarget): Deleted.
        * interpreter/CheckpointOSRExitSideState.h:
        (JSC::CheckpointOSRExitSideState::CheckpointOSRExitSideState):
        * interpreter/Interpreter.cpp:
        (JSC::UnwindFunctor::operator() const):
        (JSC::Interpreter::unwind):
        (): Deleted.
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call):
        (JSC::LLInt::slow_path_checkpoint_osr_exit):
        * runtime/VM.cpp:
        (JSC::VM::scanSideState const):
        (JSC::VM::pushCheckpointOSRSideState):
        (JSC::VM::popCheckpointOSRSideState):
        (JSC::VM::popAllCheckpointOSRSideStateUntil):
        (JSC::VM::addCheckpointOSRSideState): Deleted.
        (JSC::VM::findCheckpointOSRSideState): Deleted.
        * runtime/VM.h:

2020-08-03  Alberto Garcia  <berto@igalia.com>

        [GTK] 2.29.4 fails to build in armhf
        https://bugs.webkit.org/show_bug.cgi?id=214966

        Reviewed by Michael Catanzaro.

        SP register cannot be used as a destination register of SUB or ADD
        on Thumb mode.

        * llint/LowLevelInterpreter32_64.asm:

2020-08-03  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes, early August 20202 edition
        https://bugs.webkit.org/show_bug.cgi?id=215082

        Unreviewed build fix.

        * dfg/DFGOSREntry.h: Add missing inclusion of CodeLocation.h
        * ftl/FTLGeneratedFunction.h: Ditto.
        * jit/CallFrameShuffler.h: Forward-declare CCallHelpers.

2020-08-02  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix CLoop build
        https://bugs.webkit.org/show_bug.cgi?id=215010

        * tools/SigillCrashAnalyzer.cpp:

2020-08-02  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265151.
        https://bugs.webkit.org/show_bug.cgi?id=215074

        Broke ARM64E JSC tests

        Reverted changeset:

        "validate untagArrayPtr"
        https://bugs.webkit.org/show_bug.cgi?id=214953
        https://trac.webkit.org/changeset/265151

2020-08-01  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r265097, r265113, and r265122.
        https://bugs.webkit.org/show_bug.cgi?id=215065

        Broke AppleSilicon Big Sur

        Reverted changesets:

        "Strip pointers instead of authing for byteOffset to not allow
        for a possible way to guess data pac"
        https://bugs.webkit.org/show_bug.cgi?id=214952
        https://trac.webkit.org/changeset/265097

        "Compute number of PAC bits from what the OS says its address
        space is"
        https://bugs.webkit.org/show_bug.cgi?id=214986
        https://trac.webkit.org/changeset/265113

        "Remove UB from nonPACBitsMask computation"
        https://bugs.webkit.org/show_bug.cgi?id=214996
        https://trac.webkit.org/changeset/265122

2020-07-31  Keith Miller  <keith_miller@apple.com>

        Move Options setter to where we allow access to the Options object
        https://bugs.webkit.org/show_bug.cgi?id=215028

        Reviewed by Saam Barati.

        Right now jsc CLI crashes when assertions are enabled on iOS.

        * jsc.cpp:
        (main):
        (CommandLine::parseArguments):

2020-07-31  Saam Barati  <sbarati@apple.com>

        Re-enable NO_SMT on Catalina
        https://bugs.webkit.org/show_bug.cgi?id=215024

        Reviewed by Alexey Proskuryakov.

        * runtime/Options.cpp:
        (JSC::defaultTCSMValue):
        * runtime/OptionsList.h:

2020-07-31  Saam Barati  <sbarati@apple.com>

        validate untagArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=214953

        Reviewed by Keith Miller.

        This patch adds validation to untagArrayPtr along paths where we don't
        immediately store/load from the result.
        
        This patch also changes the removeArrayPtrTag macro assembler function to
        use shifts instead of xpacd to strip the tag, because it's faster.

        * assembler/MacroAssemblerARM64E.h:
        (JSC::MacroAssemblerARM64E::untagArrayPtr):
        (JSC::MacroAssemblerARM64E::removeArrayPtrTag):
        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::untagArrayPtr):
        (JSC::FTL::DFG::LowerDFGToB3::caged):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::cageWithoutUntagging):
        (JSC::AssemblyHelpers::cageConditionallyAndUntag):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::cageWithoutUntagging): Deleted.
        (JSC::AssemblyHelpers::cageConditionally): Deleted.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitIntTypedArrayPutByVal):
        (JSC::JIT::emitFloatTypedArrayPutByVal):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::AirIRGenerator::addCallIndirect):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::restoreWebAssemblyGlobalState):
        (JSC::Wasm::B3IRGenerator::addCallIndirect):
        * wasm/WasmBinding.cpp:
        (JSC::Wasm::wasmToWasm):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::createJSToWasmWrapper):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):

2020-07-31  Keith Miller  <keith_miller@apple.com>

        Reduce over include usage in JSC
        https://bugs.webkit.org/show_bug.cgi?id=215010

        Reviewed by Mark Lam.

        My first attempt to fix
        https://bugs.webkit.org/show_bug.cgi?id=215009 by making it so we
        don't include FastJITPermissions.h in TestWebKitAPI, was
        unsuccessful. Mostly because I gave up after several hours of
        building... I figure it's still worth it to land the last working
        version I was able to get building.

        * assembler/MacroAssemblerCodeRef.h:
        * bytecode/CodeBlock.cpp:
        * bytecode/PolymorphicAccess.h:
        * inspector/agents/InspectorRuntimeAgent.cpp:
        * interpreter/CallFrame.h:
        * jit/ThunkGenerators.cpp:
        * llint/LLIntOffsetsExtractor.cpp:
        * runtime/TypeLocationCache.cpp:
        * runtime/VM.cpp:
        (JSC::VM::getCTIStub):
        * runtime/VM.h:
        (JSC::VM::getCTIStub): Deleted.
        * tools/JSDollarVM.cpp:

2020-07-31  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Follow-up changes after r265036
        https://bugs.webkit.org/show_bug.cgi?id=214982

        Reviewed by Darin Adler.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit): Remove dupe definitions in OSRExit.
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_iterator_open): We should use emitJumpSlowCaseIfNotJSCell(regT1).

2020-07-30  Keith Miller  <keith_miller@apple.com>

        Remove UB from nonPACBitsMask computation
        https://bugs.webkit.org/show_bug.cgi?id=214996

        Reviewed by Tadeu Zagallo.

        For non-ARM64E we now set numberOfPACBits to zero, which was causing UB in our computation of the nonPACBitsMask.

        * assembler/MacroAssemblerARM64E.h:

2020-07-30  Keith Miller  <keith_miller@apple.com>

        Compute number of PAC bits from what the OS says its address space is
        https://bugs.webkit.org/show_bug.cgi?id=214986

        Reviewed by Saam Barati.

        * assembler/MacroAssemblerARM64E.h:

2020-07-30  Caio Lima  <ticaiolima@gmail.com>

        [JSC][32-bits] interator_next should check for EmptyValue instead of undefined to execute LLInt fast path
        https://bugs.webkit.org/show_bug.cgi?id=214963

        Reviewed by Yusuke Suzuki.

        There was a bug in previous implementation that allows execution of
        `interator_next` fast path if we set ArrayIterator.prototype.next to
        0. This happened because we were not properly checking `ValueEmpty`
        from `m_next`. This patch is fixing such issue and doing the proper
        verification.

        * llint/LowLevelInterpreter32_64.asm:

2020-07-30  Saam Barati  <sbarati@apple.com>

        Strip pointers instead of authing for byteOffset to not allow for a possible way to guess data pac
        https://bugs.webkit.org/show_bug.cgi?id=214952

        Reviewed by Keith Miller.

        In the old way of doing things, we would auth the vector pointer before subtracting
        the base from it. Since we never validated the auth, this allowed for a
        potential data-PAC bypass by just repeatedly calling byteOffset in a loop
        and observing the integer result of the operation.
        
        Since byteOffset does no loads/stores, it suffices to just strip the PAC
        bits before doing the subtraction. This eliminates any such attacks like
        the above because the PAC bits are ignored.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset):

2020-07-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add B3::BottomTupleValue node
        https://bugs.webkit.org/show_bug.cgi?id=214956
        <rdar://problem/65192877>

        Reviewed by Keith Miller.

        In B3 strength reduction, we convert B3 values to bottom value based on type after Oops kind, and then they are *typically* removed later.
        While we support bottom values for usual types, we do not have a bottom value for tuple type. So when replaceWithBottom is called, we
        fail to replace Patchpoints producing tuples with bottom values.

        This patch newly adds B3 BottomTupleValue, which is just a BottomValue for tuple. We can extend it to generate arbitrary constant
        tuple values, but for now, we just support bottom tuple values. We add a new node instead of generating patchpoint which generates bottom
        values since BottomTupleValues implementation is simpler: BottomTupleValue just emits bunch of zero clear for Air tmps and Air does everything
        automatically. On the other hand, implementing a patchpoint needs to add code which clears things with zero while checking the ValueRep. And
        since we have Const32, Const64, etc. values, having this kind of value for tuple too is natural. Plus, this design allows us to remove bunch
        of unnecessary instructions after lowering this to Air since Air knows what instructions will be emitted by this BottomTupleValue, and Air
        can remove a lot of zero clear instructions if they are not read later by Extract.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/B3BottomTupleValue.cpp: Copied from Source/JavaScriptCore/b3/B3InsertionSet.cpp.
        (JSC::B3::BottomTupleValue::dumpMeta const):
        * b3/B3BottomTupleValue.h: Copied from Source/JavaScriptCore/b3/B3InsertionSet.cpp.
        * b3/B3InsertionSet.cpp:
        (JSC::B3::InsertionSet::insertBottom):
        * b3/B3LowerToAir.cpp:
        * b3/B3Opcode.cpp:
        (WTF::printInternal):
        * b3/B3Opcode.h:
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::addBottom):
        * b3/B3TypeMap.h:
        (JSC::B3::TypeMap::TypeMap): Deleted.
        * b3/B3Validate.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::effects const):
        (JSC::B3::Value::key const):
        * b3/B3Value.h:
        * b3/B3ValueInlines.h:
        * b3/B3ValueKey.cpp:
        (JSC::B3::ValueKey::materialize const):
        * b3/testb3_7.cpp:
        (testBottomTupleValue):
        (addTupleTests):

2020-07-29  Tadeu Zagallo  <tzagallo@apple.com>

        WebAssembly validation for call_indirect is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=214901
        <rdar://problem/65189677>

        Reviewed by Saam Barati.

        There was an incorrect condition when validating call_indirect's arguments, which often resulted in skipping this validation.

        * wasm/WasmFunctionParser.h:
        (JSC::Wasm::FunctionParser<Context>::parseExpression):

2020-07-29  Mark Lam  <mark.lam@apple.com>

        Update some JSArrayBufferView comments and add some assertions.
        https://bugs.webkit.org/show_bug.cgi?id=214914

        Reviewed by Darin Adler.

        * runtime/ArrayBuffer.cpp:
        (JSC::ArrayBuffer::createAdopted):
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::ConstructionContext::ConstructionContext):
        (JSC::JSArrayBufferView::finalize):
        * runtime/JSArrayBufferView.h:

2020-07-29  Paulo Matos  <pmatos@igalia.com>

        for..of intrinsics implementation for 32bits
        https://bugs.webkit.org/show_bug.cgi?id=214737

        Reviewed by Yusuke Suzuki.

        Joint work with Caio Lima <ticaiolima@gmail.com>.

        Implements for..of intrinsics for 32bits.
        Adds or8 instruction to ARMv7 and MIPS Macro Assembler.
        Adds intrinsic operations to LLInt and Baseline for 32bits.
        Fixes DFG OSR Exit bug, where checkpoint temporary value is
        incorrectly recreated for Baseline.
        Refactors code in DFG OSR Exit to be easier to modify and
        maintain by separating the switch cases for 32 and 64bits.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::or8): Adds or8(TrustedImm, AbsoluteAddress)
        (JSC::MacroAssemblerARMv7::or32):
        (JSC::MacroAssemblerARMv7::store8):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::or8): Adds or8(TrustedImm, AbsoluteAddress)
        (JSC::MacroAssemblerMIPS::store8):
        * assembler/testmasm.cpp:
        (JSC::testOrImmMem): Tests or8
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEnumeration):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit): Fixes DFG OSR Exit bug, where checkpoint temporary value is
        incorrectly recreated for Baseline. Refactors code in DFG OSR Exit to be easier to modify and
        maintain by separating the switch cases for 32 and 64bits.
        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITInlines.h:
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        * llint/LowLevelInterpreter32_64.asm:

2020-07-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Reflect object should have toStringTag with "Reflect"
        https://bugs.webkit.org/show_bug.cgi?id=214909

        Reviewed by Mark Lam.

        We call JSC_TO_STRING_TAG_WITHOUT_TRANSITION in ReflectObject to set "Reflect" @@toStringTag, which fixes one test262 failure.

        * runtime/ReflectObject.cpp:
        (JSC::ReflectObject::finishCreation):

2020-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add hasCustomGetterSetterProperties to canAccessPropertiesQuicklyForEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=214908
        <rdar://problem/65883816>

        Reviewed by Mark Lam.

        canAccessPropertiesQuicklyForEnumeration should filter out hasCustomGetterSetterProperties too.

        * runtime/Structure.cpp:
        (JSC::Structure::canAccessPropertiesQuicklyForEnumeration const):

2020-07-28  Caitlin Potter  <caitp@igalia.com>

        [JSC] add IC support for op_get_private_name
        https://bugs.webkit.org/show_bug.cgi?id=213545

        Reviewed by Saam Barati.

        The baseline JIT now supports a fast path for op_private_name,
        using a variant of GetByVal IC.

        The generated AccessCase has the following qualities:
          - Always "direct", relying only on the current structure for cachebility
          - Never impure (DOM properties are not supported at this time, ProxyObjects are treated as JSObjects)

        Based on the microbenchmark reviewed on https://bugs.webkit.org/show_bug.cgi?id=213544, this sees
        an improvement of roughly 50% on average.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::reset):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITGetByValGenerator::JITGetByValGenerator):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITOperations.cpp:
        (JSC::getPrivateName):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emit_op_get_private_name):
        (JSC::JIT::emitSlow_op_get_private_name):
        * jit/Repatch.cpp:
        (JSC::appropriateOptimizingGetByFunction):
        (JSC::appropriateGetByFunction):
        (JSC::tryCacheGetBy):
        * jit/Repatch.h:

2020-07-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC][wasm] Truncating slightly less than INT32_MIN is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=214834

        Reviewed by Darin Adler.

        Wasm trunc_f64_s should handle (INT32_MIN - 1.0, INT32_MIN) range too.

        * llint/WebAssembly.asm:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::addOp<OpType::I32TruncSF64>):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::addOp<OpType::I32TruncSF64>):

2020-07-28  Mark Lam  <mark.lam@apple.com>

        ASSERTION FAILED: isSymbol() in Source/JavaScriptCore/runtime/JSCell.cpp(188)
        https://bugs.webkit.org/show_bug.cgi?id=214837

        Reviewed by Darin Adler.

        The issue found by this bug was that jsc shell test properties were enumerable.
        These properties are only meant for test development use.  They will never be
        present in a productized JavaScript environment.

        This patch helps reduce the change of users of the jsc shell tripping up on these
        test properties when enumerating the global object.

        * jsc.cpp:

2020-07-28  Yusuke Suzuki  <ysuzuki@apple.com>

        IndexedDB binding utilities miss exception checks
        https://bugs.webkit.org/show_bug.cgi?id=214820
        <rdar://problem/66152374>

        Reviewed by Mark Lam.

        jsStringWithCache does not need to take JSGlobalObject*.

        * runtime/JSString.h:
        (JSC::jsStringWithCache):

2020-07-27  Mark Lam  <mark.lam@apple.com>

        DisallowVMEntry needs a copy assignment operator, detected by gcc's -Wdeprecated-copy warning
        https://bugs.webkit.org/show_bug.cgi?id=214809

        Reviewed by Yusuke Suzuki.

        According to https://en.cppreference.com/w/cpp/language/copy_assignment,
        "The generation of the implicitly-defined copy assignment operator is deprecated
        (since C++11) if T has a user-declared destructor or user-declared copy constructor."
        DisallowVMEntry has both a user-declared destructor and a user-declared copy
        constructor.  Hence, it needs to define its own copy assignment operator to placate
        the compiler.

        This patch also adds back WTF_FORBID_HEAP_ALLOCATION to DisallowVMEntry.
        DisallowVMEntry should always have forbid heap allocation.  It was accidentally
        removed in a prior patch.

        * runtime/DisallowVMEntry.h:
        (JSC::DisallowVMEntryImpl::operator=):

2020-07-27  Caio Lima  <ticaiolima@gmail.com>

        DoesGC failures in debug mode in 32bits
        https://bugs.webkit.org/show_bug.cgi?id=214449

        Reviewed by Mark Lam.

        Adding the DoesGC update code into OSRExit::compileExit for 32-bits.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):

2020-07-24  Mark Lam  <mark.lam@apple.com>

        pluginElementCustomGetOwnPropertySlot() should support VMInquiry requests.
        https://bugs.webkit.org/show_bug.cgi?id=214555
        <rdar://problem/65855400>

        Reviewed by Yusuke Suzuki.

        1. Add handling for VMInquiry failure in JSObject::getPropertySlot() and
           JSObject::getNonIndexPropertySlot().  Basically, if the query isTaintedByOpaqueObject,
           then we should treat the false result as a failed VMInquiry.

        2. Fix JSModuleNamespaceObject::getOwnPropertySlotCommon() and
           ProxyObject::getOwnPropertySlotCommon() to initialize the PropertySlot to a
           jsUndefined() value if we have a failed VMInquiry.  The client shouldn't
           be reading the value if the VMInquiry failed, but as a defensive action, we'll
           initialize the slot to effectively return an undefined value.

        * runtime/JSModuleNamespaceObject.cpp:
        (JSC::JSModuleNamespaceObject::getOwnPropertySlotCommon):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::getNonIndexPropertySlot):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::getOwnPropertySlotCommon):

2020-07-24  Dean Jackson  <dino@apple.com>

        JavaScriptCore Xcode project has some errors
        https://bugs.webkit.org/show_bug.cgi?id=214775

        Reviewed by Yusuke Suzuki.

        When looking at the build output for JavaScriptCore I noticed two
        weird errors in the Xcode project file. Firstly, there was a broken
        group called "runtime" that was causing some files to appear
        duplicated. Secondly, there was a generated file
        WebAssemblyCompileErrorConstructor.lut.h whose location was
        incorrectly identified as being part of the project source.

        Xcode moved a bunch of other things around, but it seems to compile
        fine. Weirdly, the diff shows that the project file had unusual
        whitespace. I wonder if it had been edited by hand.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG::AbstractValue::filterByValue should re-filter configured m_value via m_type
        https://bugs.webkit.org/show_bug.cgi?id=214721
        <rdar://problem/65882837>

        Reviewed by Mark Lam.

        Let's consider the following case.

            1. Input AbstractValue is saying SpecObjectOther.
            2. We have CheckIsConstant with StringPrototype (which is SpecObjectOther | SpecStringObject in the current SpeculatedType).
            3. We call filterByValue, which filters m_type by SpecObjectOther | SpecStringObject. But the filtered m_type is SpecObjectOther since (2)'s SpeculatedType is broader.
            4. We store the given constant (StringPrototype) to m_value.
            5. This AbstractValue's m_type is SpecObjectOther while its m_value's SpeculatedType is SpecObjectOther | SpecStringObject. Contradiction!

        When setting m_value by filterByValue, we should filter m_value with m_type to ensure that m_value is the expected one.
        This patch also avoid using SpecObjectOther | SpecStringObject for StringPrototype since we can return narrower type for that.

        * bytecode/SpeculatedType.cpp:
        (JSC::speculationFromStructure):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::filterByValue):
        (JSC::DFG::AbstractValue::filter):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * runtime/StringObject.cpp:
        (JSC::StringObject::finishCreation):

2020-07-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        JSON.parse should not modify non-configurable properties.
        https://bugs.webkit.org/show_bug.cgi?id=163446

        Reviewed by Darin Adler.

        This change implements step 2.c.ii.3 of InternalizeJSONProperty [1], replacing
        put() with defineOwnProperty(). Using the latter fixes JSON.parse() with
        non-configurable (failures are silently ignored; see note in the spec),
        non-writable, and accessor properties, aligning JSC with V8 and SpiderMonkey.

        Since it's extremely unlikely for userland `reviver` to remove or redefine the
        next property, a fast path for PropertyAttribute::None attributes is introduced.
        It advances microbenchmarks/json-parse-object-*.js by ~13%.

        [1]: https://tc39.es/ecma262/#sec-internalizejsonproperty

        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):

2020-07-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Do not use hardened Array for Intl supportedLocalesOf
        https://bugs.webkit.org/show_bug.cgi?id=214676

        Reviewed by Mark Lam.

        We do not need to call getOwnPropertyNames & defineOwnProperty because hardening array of Intl.XXX.supportedLocalesOf is removed from the spec.
        We should just return an array from bestFitSupportedLocales or lookupSupportedLocales, while this change is not observable to users (but it is better
        for performance). This fully fixes https://github.com/tc39/ecma402/pull/278.

        * runtime/IntlObject.cpp:
        (JSC::supportedLocales):

2020-07-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Arrow function |this| resolution should not be trapped by with-scope
        https://bugs.webkit.org/show_bug.cgi?id=214716
        <rdar://problem/65980639>

        Reviewed by Darin Adler.

        We were using usual "this" named variable in lexical-environment to load and store arrow-function's |this|.
        But since this looks normal variable, it can be trapped by "with" scope's object while it should not be.
        We use thisPrivateName instead to avoid this behavior since Proxy does not trap private names.

        * builtins/BuiltinNames.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::initializeArrowFunctionContextScopeIfNeeded):
        (JSC::BytecodeGenerator::variable):
        (JSC::BytecodeGenerator::createVariable):
        (JSC::BytecodeGenerator::emitLoadThisFromArrowFunctionLexicalEnvironment):
        (JSC::BytecodeGenerator::emitPutThisToArrowFunctionContextScope):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::HasOwnPropertyFunctionCallDotNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        * runtime/CommonIdentifiers.h:

2020-07-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] FTL OSR entry should store boxed |this|
        https://bugs.webkit.org/show_bug.cgi?id=214675
        <rdar://problem/65474072>

        Reviewed by Michael Saboff and Mark Lam.

        In this patch, after ensuring that we will go to FTL OSR entry, we store boxed |this| instead of the unboxed value
        to agree to the FTL assumption that all arguments should be boxed.

        * dfg/DFGOperations.cpp:
        * ftl/FTLOSREntry.cpp:
        (JSC::FTL::prepareOSREntry):

2020-07-23  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt can be `false` in boolean context in DFG AI
        https://bugs.webkit.org/show_bug.cgi?id=214678
        <rdar://problem/65894751>

        Reviewed by Mark Lam.

        DFG::AbstractInterpreter::booleanResult returns wrong result if finite structure includes HeapBigInt structure
        since HeapBigInt 0n can be evaluated `false` in boolean context while this function does not care it. This patch
        fixes it and cleans up code by using WTF/TriState.

        * dfg/DFGAbstractInterpreter.h:
        (): Deleted.
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::booleanResult):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-07-23  Caio Lima  <ticaiolima@gmail.com>

        [32-bits] Fixing the return of doVMEntry into LowLevelInterpreter32_64.asm
        https://bugs.webkit.org/show_bug.cgi?id=214641

        Reviewed by Mark Lam.

        Adjusting the return of `doVMEntry` for 32-bits LLInt to proper set
        `EncodedJSValue` return in little-endian architectures. It is expected
        that tag is stored in `r1` and payload is stored in `r0`.

        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:

2020-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove ArrayNode::m_optional
        https://bugs.webkit.org/show_bug.cgi?id=214294

        Reviewed by Darin Adler.

        m_optional, which dates back to KJS era, means "is this an array with optional trailing comma,
        with elision, or an empty array". It was used by ArrayNode::streamTo() to preserve a trailing
        comma when converting array node to source string, as well as in few other places,
        before ECMA-262 clarified trailing comma in array literals [1].

        Currently, m_optional is used only by ArrayNode::isSimpleArray(), along with m_elision.
        Checking m_elision is enough since trailing comma doesn't add extra `undefined` element.

        This patch completely removes m_optional, speeding up destructuring and function.apply()
        with empty arrays and arrays with trailing commas by ~55% and a factor of 11 respectively.
        Reflect.apply() optimization (https://webkit.org/b/190668) will also benefit from this change.

        Also, this change converts isSpreadExpression() check to an ASSERT (was enabled by r196323).

        [1]: https://tc39.es/ecma262/#sec-array-initializer

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::isSimpleArray const):
        (JSC::ArrayNode::toArgumentList const):
        (JSC::ArrayNode::emitDirectBinding):
        * parser/NodeConstructors.h:
        (JSC::ArrayNode::ArrayNode):
        * parser/Nodes.h:

2020-07-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove emitIsUndefined() from ClassExprNode::emitBytecode()
        https://bugs.webkit.org/show_bug.cgi?id=214645

        Reviewed by Darin Adler.

        This change removes `superclass === undefined` check because it's missing from
        the spec [1] and isn't a common case. No behavior change: values except `null` are
        passed to OpIsConstructor, resulting in the same error being thrown for `undefined`.

        Test: LayoutTests/js/class-syntax-extends.html

        [1]: https://tc39.es/ecma262/#sec-runtime-semantics-classdefinitionevaluation (step 5.e)

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):

2020-07-22  Conrad Shultz  <conrad_shultz@apple.com>

        Update macOS Version macros
        https://bugs.webkit.org/show_bug.cgi?id=214653

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-07-22  Geoffrey Garen  <ggaren@apple.com>

        WTF::Function adoption should be explicit instead of implicit
        https://bugs.webkit.org/show_bug.cgi?id=214654

        Reviewed by Darin Adler.

        * heap/Heap.cpp:
        (JSC::Heap::LambdaFinalizerOwner::finalize): Use new adopt function.

2020-07-22  Mark Lam  <mark.lam@apple.com>

        Disallow VM entry when doing a VMInquiry.
        https://bugs.webkit.org/show_bug.cgi?id=214624
        <rdar://problem/65915314>

        Reviewed by Saam Barati.

        1. In PropertySlot's constructor, automatically install a DisallowVMEntry scope
           if the passed in internal method type is VMInquiry.  This ensures that we won't
           be able to enter the VM to call JS code while doing the inquiry.  As a result,
           the PropertySlot constructor will now take an optional VM pointer, which is 
           must be passed in in when the internal method type is VMInquiry.

           Note that the handling of attempts to enter the VM depends on
           Options::crashOnDisallowedVMEntry().

           On Debug build (due to ASSERT_ENABLED), Options::crashOnDisallowedVMEntry()
           defaults to true and the VM will crash on disallowed entry.
           On Release build, Options::crashOnDisallowedVMEntry() defaults to false and
           disallow entry attempts into the VM will be treated like calling an empty
           function that returns undefined.  This is not new behavior in this patch, but
           I just want to have a reminder here of how DisallowVMEntry will be enforcing
           no entry into the VM while doing a VMInquiry.

        2. After VMInquiry gets, sometimes the client code wants to do other work that
           do entails entering the VM.  In such cases, we need to reset the PropertySlot's
           disallowVMEntry scope.  Fixed up a few places in client code to do this reset.

        3. Make the DisableVMEntry scope copyable.  At least one place wants to copy 
           PropertySlot, and as a result, will need to copy its embedded DisableVMEntry
           scope as well if installed.

           For DisableVMEntry, we'll handle copying semantics as follows: copying a
           DisableVMEntry will ref the VM::disallowVMEntryCount.  The count will be
           decremented when both instances are destructed.  As a result, VM entry will
           be disallowed as long as one of the copies are still alive.

        4. For the setObjectToStringValue() method of Structure and StructureRareData, we
           were previously passing a PropertySlot by copy.  We don't really need to do
           this.  Ultimately, only StructureRareData::setObjectToStringValue() needs to
           access a few of the PropertySlot query methods.  So, we changed these methods
           to pass a `const PropertySlot&` instead to void the needless copying.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::put):
        (JSC::JSCallbackObject<Parent>::staticFunctionGetter):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::queryInstances):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * jit/JITOperations.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/DisallowVMEntry.h:
        (JSC::DisallowVMEntryImpl::DisallowVMEntryImpl):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::sanitizedToString):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnNonIndexPropertyNames):
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):
        * runtime/JSGlobalObject.cpp:
        (JSC::getGetterById):
        (JSC::JSGlobalObject::defineOwnProperty):
        (JSC::JSGlobalObject::tryInstallArraySpeciesWatchpoint):
        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPrivateFieldSlot):
        * runtime/JSScope.cpp:
        (JSC::abstractAccess):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::StackFrame::nameFromCallee):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::setObjectToStringValue):
        * runtime/StructureRareData.cpp:
        (JSC::StructureRareData::setObjectToStringValue):
        * runtime/StructureRareData.h:
        * tools/JSDollarVM.cpp:
        (JSC::functionGetGetterSetter):

2020-07-22  Geoffrey Garen  <ggaren@apple.com>

        JSRunLoopTimer should use WTF::RunLoop rather than custom CF code
        https://bugs.webkit.org/show_bug.cgi?id=214102

        Unreviewed, re-landing r264242 with crash fixed.

        We needed to synchronize timer destruction with timer firing.

        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::doWork):
        (JSC::DeferredWorkTimer::runRunLoop):
        * runtime/JSRunLoopTimer.cpp:
        (JSC::epochTime):
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData):
        (JSC::JSRunLoopTimer::Manager::timerDidFireCallback):
        (JSC::JSRunLoopTimer::Manager::PerVMData::~PerVMData):
        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer):
        (JSC::JSRunLoopTimer::Manager::PerVMData::setRunLoop): Deleted.
        (JSC::JSRunLoopTimer::Manager::didChangeRunLoop): Deleted.
        * runtime/JSRunLoopTimer.h:
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData): Deleted.
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::create):
        (JSC::VM::tryCreate):
        (JSC::VM::setRunLoop): Deleted.
        * runtime/VM.h:
        (JSC::VM::runLoop const):

2020-07-21  Mark Lam  <mark.lam@apple.com>

        Simplify DisallowScope, DisallowGC, and DisallowVMReentry implementations.
        https://bugs.webkit.org/show_bug.cgi?id=214539
        <rdar://problem/65795729>

        Reviewed by Keith Miller.

        Previously, DisallowScope needed to support enabling and disabling.  This was
        only needed to enable the implementation of ObjectInitializationScope.  Now, we
        can make the DisallowGC and DisallowVMReentry inside ObjectInitializationScope
        optional with WTF::Optional.  With that we can simplify these scopes and make
        them true RAII scope objects.

        This patch also does the following:

        1. Renamed DisallowVMReentry to DisallowVMEntry.
           The scope can be used to disable VM entry completely.  There's no need to
           restrict it to only re-entries.

        2. Enforcement of DisallowVMReentry is now done in the LLInt's doVMEntry() instead
           of the VMEntryScope's constructor.  This is a stronger guarantee.

           If Options::crashOnDisallowedVMEntry() is true, the VM will crash if it sees
           an attempt to enter the VM while disallowed.

           If Options::crashOnDisallowedVMEntry() is false, an attempt to call into the VM
           while disallowed will return immediately with an undefined result without
           invoking any script.

           By default, Options::crashOnDisallowedVMEntry() is true if ASSERT_ENABLED is
           true.

        3. Change DisallowScope and DisallowGC to be based on ASSERT_ENABLED instead of NEBUG.

        4. Make DisallowVMEntry always enforceable, not just when ASSERT_ENABLED.
           It's enforcement action depends on Options::crashOnDisallowedVMEntry() as
           described above.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * heap/DeferGC.cpp:
        * heap/DeferGC.h:
        (JSC::DisallowGC::DisallowGC):
        (JSC::DisallowGC::initialize):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::llint_check_vm_entry_permission):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/DisallowScope.h:
        (JSC::DisallowScope::DisallowScope):
        (JSC::DisallowScope::~DisallowScope):
        (JSC::DisallowScope::isInEffectOnCurrentThread):
        (JSC::DisallowScope::enable): Deleted.
        (JSC::DisallowScope::disable): Deleted.
        (JSC::DisallowScope::enterScope): Deleted.
        (JSC::DisallowScope::exitScope): Deleted.
        * runtime/DisallowVMEntry.h: Copied from Source/JavaScriptCore/runtime/DisallowVMReentry.h.
        (JSC::DisallowVMEntryImpl::DisallowVMEntryImpl):
        (JSC::DisallowVMEntryImpl::~DisallowVMEntryImpl):
        (JSC::DisallowVMEntryImpl::isEngaged const):
        (JSC::DisallowVMEntryImpl::release):
        (JSC::DisallowVMReentry::DisallowVMReentry): Deleted.
        (JSC::DisallowVMReentry::initialize): Deleted.
        (JSC::DisallowVMReentry::scopeReentryCount): Deleted.
        (JSC::DisallowVMReentry::setScopeReentryCount): Deleted.
        * runtime/DisallowVMReentry.cpp: Removed.
        * runtime/DisallowVMReentry.h: Removed.
        * runtime/InitializeThreading.cpp:
        (JSC::initialize):
        * runtime/JSArray.cpp:
        (JSC::JSArray::tryCreateUninitializedRestricted):
        * runtime/ObjectInitializationScope.cpp:
        (JSC::ObjectInitializationScope::ObjectInitializationScope):
        (JSC::ObjectInitializationScope::notifyAllocated):
        (JSC::ObjectInitializationScope::notifyInitialized):
        * runtime/ObjectInitializationScope.h:
        (JSC::ObjectInitializationScope::vm const):
        (JSC::ObjectInitializationScope::ObjectInitializationScope):
        (JSC::ObjectInitializationScope::~ObjectInitializationScope):
        (JSC::ObjectInitializationScope::notifyAllocated):
        (JSC::ObjectInitializationScope::notifyInitialized):
        * runtime/OptionsList.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::tryCreateUninitializedRegExpMatchesArray):
        * runtime/VM.h:
        * runtime/VMEntryScope.cpp:
        (JSC::VMEntryScope::VMEntryScope):

2020-07-21  Mark Lam  <mark.lam@apple.com>

        llint_slow_path_get_private_name() should not be using PropertySlot::InternalMethodType::VMInquiry.
        https://bugs.webkit.org/show_bug.cgi?id=214603

        Reviewed by Yusuke Suzuki.

        VMInquiry means (1) the get operation should not call back into JS, (2) it should
        not throw any exceptions (except for OutOfMemoryError or StackOverflowError which
        can be thrown at any time), or have any side effects that is observable from JS
        code.  In this case, llint_slow_path_get_private_name() is just implementating
        PrivateFieldGet (https://tc39.es/proposal-class-fields/#sec-privatefieldget) and
        should actually be using PropertySlot::InternalMethodType::GetOwnProperty
        (according to https://tc39.es/proposal-class-fields/#sec-privatefieldfind).

        This patch makes the above change, and also adds an assert in JSObject::getPrivateField
        to ensure that no one calls it for a VMInquiry since it is not supported.

        Also added a PropertySlot::isVMInquiry() convenience query method.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPrivateField):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::isVMInquiry const):

2020-07-21  Keith Miller  <keith_miller@apple.com>

        Fix FinalizationRegistry GC finalizer interation
        https://bugs.webkit.org/show_bug.cgi?id=214586
        <rdar://65854264>

        Reviewed by Mark Lam and Yusuke Suzuki.

        Turns out when you remove the ith element from a Vector and you
        increment the index anyway you skip things...  Use the helper
        functions instead. This fixes an ASAN crash on our
        FinalizationRegistry tests.

        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        * runtime/DeferredWorkTimer.cpp:
        (JSC::DeferredWorkTimer::addPendingWork):
        (JSC::DeferredWorkTimer::hasPendingWork):
        (JSC::DeferredWorkTimer::hasDependancyInPendingWork):
        (JSC::DeferredWorkTimer::cancelPendingWork):
        * runtime/JSFinalizationRegistry.cpp:
        (JSC::JSFinalizationRegistry::finalizeUnconditionally):
        (JSC::JSFinalizationRegistry::takeDeadHoldingsValue):

2020-07-21  Saam Barati  <sbarati@apple.com>

        Disable NO_SMT by default
        https://bugs.webkit.org/show_bug.cgi?id=214607

        Reviewed by Filip Pizlo.

        * runtime/OptionsList.h:

2020-07-21  Caio Lima  <ticaiolima@gmail.com>

        Debug build is failing after r264537 on Linux
        https://bugs.webkit.org/show_bug.cgi?id=214596

        Reviewed by Yusuke Suzuki.

        Removing `ASSERT_UNDER_CONTEXPR_CONTEXT(0)` to avoid compilation
        failure of Debug builds on Linux.

        * runtime/IntlObject.cpp:
        (JSC::relevantExtensionKeyString):

2020-07-21  Adrian Perez de Castro  <aperez@igalia.com>

        Unreview non-unified source build fix

        * runtime/IntlDisplayNames.cpp: Add missing <unicode/ucurr.h> header.

2020-07-20  Mark Lam  <mark.lam@apple.com>

        TryGetById clobberize rules are wrong.
        https://bugs.webkit.org/show_bug.cgi?id=163834
        <rdar://problem/65625807>

        Reviewed by Keith Miller.

        Theoretically, TryGetById can do the same things GetById does i.e. reify lazy
        properties, read the stack, etc.  Hence, its clobberize rule should be clobberTop
        just like GetById.  However, in practice, we don't currently use @tryGetById to
        access anything on the stack (and probably never will).  But as a conservative
        measure, we'll just treat TryGetById like it can.  In clobberize terms, this
        means we declare TryGetById as doing read(World) (just like GetById) instead of
        read(Heap).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):

2020-07-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix duplicate forward declaration introduced by merge conflict
        https://bugs.webkit.org/show_bug.cgi?id=209779

        * runtime/IntlRelativeTimeFormat.h:

2020-07-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [ECMA-402] Implement Intl.DisplayNames
        https://bugs.webkit.org/show_bug.cgi?id=209779

        Reviewed by Ross Kirsling.

        This patch implements Intl.DisplayNames behind useIntlDisplayNames=1 flag.
        Intl.DisplayNames can offer readable "display-name" for ICU language, script, region, currency codes.
        For example, it can offer "United States" string for "US" region code.
        We use ICU ULocaleDisplayNames to implement it, except for currency since ULocaleDisplayNames is not supporting
        currency correctly: it ignores "long", "short", and "narrow" style configurations. We need to call ucurr_getName
        directly.

        This patch appropriately adds unicode-language-id parsing in IntlLocale.cpp so that we can validate language id
        when it is passed to `Intl.DisplayNames#of` as defined in the spec.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlDisplayNames.cpp: Added.
        (JSC::IntlDisplayNames::create):
        (JSC::IntlDisplayNames::createStructure):
        (JSC::IntlDisplayNames::IntlDisplayNames):
        (JSC::IntlDisplayNames::finishCreation):
        (JSC::IntlDisplayNames::initializeDisplayNames):
        (JSC::IntlDisplayNames::of const):
        (JSC::IntlDisplayNames::resolvedOptions const):
        (JSC::IntlDisplayNames::styleString):
        (JSC::IntlDisplayNames::typeString):
        (JSC::IntlDisplayNames::fallbackString):
        * runtime/IntlDisplayNames.h: Copied from Source/JavaScriptCore/runtime/IntlRelativeTimeFormat.h.
        * runtime/IntlDisplayNamesConstructor.cpp: Added.
        (JSC::IntlDisplayNamesConstructor::create):
        (JSC::IntlDisplayNamesConstructor::createStructure):
        (JSC::IntlDisplayNamesConstructor::IntlDisplayNamesConstructor):
        (JSC::IntlDisplayNamesConstructor::finishCreation):
        (JSC::constructIntlDisplayNames):
        (JSC::callIntlDisplayNames):
        (JSC::IntlDisplayNamesConstructorSupportedLocalesOf):
        * runtime/IntlDisplayNamesConstructor.h: Added.
        * runtime/IntlDisplayNamesPrototype.cpp: Added.
        (JSC::IntlDisplayNamesPrototype::create):
        (JSC::IntlDisplayNamesPrototype::createStructure):
        (JSC::IntlDisplayNamesPrototype::IntlDisplayNamesPrototype):
        (JSC::IntlDisplayNamesPrototype::finishCreation):
        (JSC::IntlDisplayNamesPrototypeFuncOf):
        (JSC::IntlDisplayNamesPrototypeFuncResolvedOptions):
        * runtime/IntlDisplayNamesPrototype.h: Added.
        * runtime/IntlLocale.cpp:
        (JSC::isUnicodeLanguageSubtag): Deleted.
        (JSC::isUnicodeScriptSubtag): Deleted.
        (JSC::isUnicodeRegionSubtag): Deleted.
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlObject.cpp:
        (JSC::createDisplayNamesConstructor):
        (JSC::IntlObject::finishCreation):
        (JSC::isUnicodeLanguageSubtag):
        (JSC::isUnicodeScriptSubtag):
        (JSC::isUnicodeRegionSubtag):
        (JSC::isUnicodeVariantSubtag):
        (JSC::isUnicodeLanguageId):
        (JSC::isWellFormedCurrencyCode):
        * runtime/IntlObject.h:
        (JSC::intlDisplayNamesAvailableLocales):
        * runtime/IntlRelativeTimeFormat.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::displayNamesStructure):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2020-07-20  Geoffrey Garen  <ggaren@apple.com>

        REGRESSION (r264242): [ macOS ] imported/w3c/web-platform-tests/wasm/jsapi/constructor/instantiate.any.html is a flaky crash
        https://bugs.webkit.org/show_bug.cgi?id=214572

        Unreviewed, reverting r264242.

        * runtime/JSRunLoopTimer.cpp:
        (JSC::epochTime):
        (JSC::JSRunLoopTimer::Manager::timerDidFireCallback):
        (JSC::JSRunLoopTimer::Manager::PerVMData::setRunLoop):
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData):
        (JSC::JSRunLoopTimer::Manager::PerVMData::~PerVMData):
        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer):
        (JSC::JSRunLoopTimer::Manager::didChangeRunLoop):
        * runtime/JSRunLoopTimer.h:
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData):
        * runtime/PromiseTimer.cpp:
        (JSC::PromiseTimer::doWork):
        (JSC::PromiseTimer::runRunLoop):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::create):
        (JSC::VM::tryCreate):
        (JSC::VM::setRunLoop):
        * runtime/VM.h:
        (JSC::VM::runLoop const):

2020-07-20  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] eval?.() should be indirect eval
        https://bugs.webkit.org/show_bug.cgi?id=214568

        Reviewed by Keith Miller.

        eval?.() is specified as indirect eval, but (virtually) all implementations assumed it should be direct eval.
        I raised this topic in today's TC39 meeting and we've decided to keep the spec as it is. 

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeFunctionCallNode):
        Don't use EvalFunctionCallNode for optional call of eval.

2020-07-20  Adrian Perez de Castro  <aperez@igalia.com>

        Non unified build fixes, midsummer 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=213616

        Unreviewed build fix.

        * b3/air/AirTmpInlines.h:
        (JSC::B3::Air::TmpWidth::widths): Moved from AirTmpWidth.h
        * b3/air/AirTmpWidth.cpp: Included AirTmpInlines.h
        * b3/air/AirTmpWidth.h: TmpWidth::widths() moved out from here.
        * runtime/ExceptionFuzz.cpp: Add missing inclusion of JSCJSValueInlines.h
        * runtime/StructureIDTable.cpp: Add missing inclusions of wtf/DataLog.h
        and wtf/RawPointer.h
        * runtime/VMTraps.cpp: Ditto.

2020-07-20  Keith Miller  <keith_miller@apple.com>

        Add support for FinalizationRegistries
        https://bugs.webkit.org/show_bug.cgi?id=199888

        Reviewed by Yusuke Suzuki.

        This patch adds support for FinalizationRegistries. There are two
        main parts to this patch, the first is refactoring PromiseTimer a
        more general into DeferredWorkTimer. This allows us to finally
        have a "real" setTimeout on the jsc command line. The second part
        is adding all the new classes needed for FinalizationRegistries.

        The refactoring is mostly a rename but does two main new
        things. The first is that it now notifies the VM we have finished
        a synchronuous JS execution, so that WeakRefs can be
        collected. The second is that it now catches any exceptions and
        forwards the to a new method on the global object method
        table. For WebCore, this reports the exception to the console. For
        API users, this calls their exceptionHandler block. For the CLI,
        it exits with exit status 3 (our general exception exit
        status). Unfortunately, there's not currently an ergonomic way to
        pass the expected exception from the CLI arguments to this handler
        so that's not supported here.

        In order to support FinalizationRegistry this patch adds a "new"
        class JSDestructibleInternalFieldObjectImpl, which allows us to
        have a destructible object with internal fields. Since the order
        of collection doesn't matter we currently use C++ HashTables on
        the FinalizationRegistry. Since users can unregister objects while
        the callback is pending we have a hash table for the live entries
        and a second hash table for the dead ones. Lastly, because users
        are not requred to provide a token for unregistration we have two
        extra Vectors containing the live/dead objects that are not
        unregisterible.

        * API/JSAPIGlobalObject.cpp:
        * API/JSAPIGlobalObject.mm:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        * jsc.cpp:
        (functionSetTimeout):
        (functionFinalizationRegistryLiveCount):
        (functionFinalizationRegistryDeadCount):
        (main):
        (checkUncaughtException):
        (checkException):
        (GlobalObject::reportUncaughtExceptionAtEventLoop):
        (runJSC):
        * runtime/ArrayIteratorPrototype.cpp:
        * runtime/CommonIdentifiers.h:
        * runtime/DeferredWorkTimer.cpp: Renamed from Source/JavaScriptCore/runtime/PromiseTimer.cpp.
        (JSC::DeferredWorkTimer::DeferredWorkTimer):
        (JSC::DeferredWorkTimer::doWork):
        (JSC::DeferredWorkTimer::runRunLoop):
        (JSC::DeferredWorkTimer::addPendingWork):
        (JSC::DeferredWorkTimer::hasPendingWork):
        (JSC::DeferredWorkTimer::hasDependancyInPendingWork):
        (JSC::DeferredWorkTimer::cancelPendingWork):
        (JSC::DeferredWorkTimer::scheduleWorkSoon):
        * runtime/DeferredWorkTimer.h: Renamed from Source/JavaScriptCore/runtime/PromiseTimer.h.
        * runtime/FinalizationRegistryConstructor.cpp: Added.
        (JSC::FinalizationRegistryConstructor::finishCreation):
        (JSC::FinalizationRegistryConstructor::FinalizationRegistryConstructor):
        (JSC::callFinalizationRegistry):
        (JSC::constructFinalizationRegistry):
        * runtime/FinalizationRegistryConstructor.h: Copied from Source/JavaScriptCore/API/JSAPIGlobalObject.cpp.
        * runtime/FinalizationRegistryPrototype.cpp: Added.
        (JSC::FinalizationRegistryPrototype::finishCreation):
        (JSC::getFinalizationRegistry):
        (JSC::protoFuncFinalizationRegistryRegister):
        (JSC::protoFuncFinalizationRegistryUnregister):
        * runtime/FinalizationRegistryPrototype.h: Copied from Source/JavaScriptCore/API/JSAPIGlobalObject.cpp.
        * runtime/IdentifierInlines.h:
        (JSC::Identifier::Identifier):
        * runtime/JSFinalizationRegistry.cpp: Added.
        (JSC::JSFinalizationRegistry::createStructure):
        (JSC::JSFinalizationRegistry::create):
        (JSC::JSFinalizationRegistry::finishCreation):
        (JSC::JSFinalizationRegistry::visitChildren):
        (JSC::JSFinalizationRegistry::destroy):
        (JSC::JSFinalizationRegistry::finalizeUnconditionally):
        (JSC::JSFinalizationRegistry::runFinalizationCleanup):
        (JSC::JSFinalizationRegistry::takeDeadHoldingsValue):
        (JSC::JSFinalizationRegistry::registerTarget):
        (JSC::JSFinalizationRegistry::unregister):
        (JSC::JSFinalizationRegistry::liveCount):
        (JSC::JSFinalizationRegistry::deadCount):
        (JSC::JSFinalizationRegistry::toStringName):
        * runtime/JSFinalizationRegistry.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reportUncaughtExceptionAtEventLoop):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::stackOverflowFrameCallee const):
        (JSC::JSGlobalObject::arrayIteratorProtocolWatchpointSet):
        (JSC::JSGlobalObject::mapIteratorProtocolWatchpointSet):
        (JSC::JSGlobalObject::setIteratorProtocolWatchpointSet):
        (JSC::JSGlobalObject::stringIteratorProtocolWatchpointSet):
        (JSC::JSGlobalObject::mapSetWatchpointSet):
        (JSC::JSGlobalObject::setAddWatchpointSet):
        (JSC::JSGlobalObject::arraySpeciesWatchpointSet):
        (JSC::JSGlobalObject::arrayJoinWatchpointSet):
        (JSC::JSGlobalObject::numberToStringWatchpointSet):
        * runtime/JSInternalFieldObjectImpl.h:
        * runtime/JSInternalFieldObjectImplInlines.h:
        (JSC::Base>::visitChildren):
        (JSC::JSInternalFieldObjectImpl<passedNumberOfInternalFields>::visitChildren): Deleted.
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::resolve):
        (JSC::JSPromise::reject):
        * runtime/StructureIDTable.cpp:
        (JSC::StructureIDTable::allocateID):
        (JSC::StructureIDTable::deallocateID):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::~VM):
        * runtime/VM.h:
        * wasm/js/JSWebAssembly.cpp:
        (JSC::webAssemblyModuleValidateAsyncInternal):
        (JSC::instantiate):
        (JSC::compileAndInstantiate):
        (JSC::webAssemblyModuleInstantinateAsyncInternal):
        (JSC::webAssemblyCompileStreamingInternal):
        (JSC::webAssemblyInstantiateStreamingInternal):
        * wasm/js/JSWebAssemblyCodeBlock.h:

2020-07-20  Michael Catanzaro  <mcatanzaro@gnome.org>

        JSC build scripts should be quiet by default
        https://bugs.webkit.org/show_bug.cgi?id=214535

        Reviewed by Saam Barati.
        
        There's no need for these scripts to print "Nothing changed" when they don't do anything.

        * offlineasm/asm.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/generate_settings_extractor.rb:

2020-07-19  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified source build fix

        * runtime/IntlDateTimeFormat.cpp:
        * runtime/IntlRelativeTimeFormat.h:

2020-07-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Warray-bounds warnings in testb3 and testair
        https://bugs.webkit.org/show_bug.cgi?id=214533

        Reviewed by Darin Adler.

        Suppress these warnings when building testb3 and testair.

        * shell/CMakeLists.txt:

2020-07-19  Michael Catanzaro  <mcatanzaro@gnome.org>

        cpp_generator.py:134: SyntaxWarning: "is" with a literal. Did you mean "=="?
        https://bugs.webkit.org/show_bug.cgi?id=214530

        Reviewed by Philippe Normand.

        * inspector/scripts/codegen/cpp_generator.py:
        (CppGenerator.cpp_type_for_unchecked_formal_in_parameter):

2020-07-18  Mark Lam  <mark.lam@apple.com>

        Fixed regression due to r264507: Math.{min|max} inequality test should use DoubleNotEqualOrUnordered instead DoubleNotEqualAndOrdered.
        https://bugs.webkit.org/show_bug.cgi?id=214526
        <rdar://problem/65778061>

        Reviewed by Yusuke Suzuki.

        This bug resulted in NaNs being handled by the "equal" case in some scenarios,
        which resulted in an assertion failure in a ValueRep on an internal test.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithMinMax):

2020-07-18  Alexey Shvayka  <shvaikalesh@gmail.com>

        Redefining a property should not change its insertion index (Object.keys order)
        https://bugs.webkit.org/show_bug.cgi?id=142933

        Reviewed by Saam Barati.

        Before this change, JSC used to delete & put back a non-indexed property just to
        update attributes, which was less efficient and corrupted observable property order.

        This patch:
        1. Rewrites validateAndApplyPropertyDescriptor() to closely resemble the spec [1].
        2. Drops property deletion, inlines putDescriptor(), and sets necessary Structure
           flags in attributeChangeTransition().
        3. Simplifies validateAndApplyPropertyDescriptor() a bit by obtaining GetterSetter
           instance from current descriptor rather then calling getDirect().

        This change aligns property order with V8 and SpiderMonkey, advancing provided
        microbenchmarks by 5-85% (especially for objects in dictionary mode).
        SixSpeed, SunSpider, and ARES-6 are all neutral.

        [1]: https://tc39.es/ecma262/#sec-validateandapplypropertydescriptor

        * runtime/JSObject.cpp:
        (JSC::validateAndApplyPropertyDescriptor):
        (JSC::JSObject::defineOwnNonIndexProperty):
        (JSC::putDescriptor): Deleted.
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::slowGetterSetter const):
        (JSC::PropertyDescriptor::slowGetterSetter): Deleted.
        * runtime/PropertyDescriptor.h:
        * runtime/Structure.cpp:
        (JSC::Structure::attributeChangeTransition):

2020-07-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up resolveLocale
        https://bugs.webkit.org/show_bug.cgi?id=214446

        Reviewed by Darin Adler.

        Introduce RelevantExtensionKey and optimize resolveLocale implementation which avoids using HashMap for input and output.
        We instead use std::array<T, numberOfRelevantExtensionKeys> since # of RelevantExtensionKeys is only 6.

        For input option, we use std::array<Optional<String>, numberOfRelevantExtensionKeys> since this distinguish non-set-option and null String().
        For output extension values, we simply use std::array<String, numberOfRelevantExtensionKeys>.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::sortLocaleData):
        (JSC::IntlCollator::searchLocaleData):
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::localeData):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::localeData):
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlNumberFormat.h:
        * runtime/IntlObject.cpp:
        (JSC::relevantExtensionKeyString):
        (JSC::resolveLocale):
        * runtime/IntlObject.h:
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::localeData):
        (JSC::IntlPluralRules::initializePluralRules):
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::localeData):
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        * runtime/IntlRelativeTimeFormat.h:

2020-07-17  Xan López  <xan@igalia.com>

        Math.max() can yield the wrong result for max(0, -0).
        https://bugs.webkit.org/show_bug.cgi?id=204457

        Reviewed by Mark Lam.

        The implementations for Math.{max,min} in both DFG and FTL are not
        considering the fact that according to the spec -0.0 < 0.0 (which
        is not true for normal double arithmetic).
        See: https://tc39.es/ecma262/#sec-math.max and https://tc39.es/ecma262/#sec-math.min

        Beyond tweaking the algorithms used in DFG and FTL we must
        implement the and/or operations on double in MIPS and ARMv7, since
        these are used in the DFG JIT to distinguish between -0.0 and 0.0.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::vand):
        (JSC::ARMv7Assembler::vorr):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::andDouble):
        (JSC::MacroAssemblerARMv7::orDouble):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::andDouble):
        (JSC::MacroAssemblerMIPS::orDouble):
        * assembler/testmasm.cpp:
        (JSC::testAndOrDouble):
        (JSC::run):
        * dfg/DFGAbstractInterpreterInlines.h: consider that -0.0 < 0.0 per the ECMAScript spec.
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGSpeculativeJIT.cpp: ditto.
        (JSC::DFG::SpeculativeJIT::compileArithMinMax):
        * ftl/FTLLowerDFGToB3.cpp: ditto.
        (JSC::FTL::DFG::LowerDFGToB3::compileArithMinOrMax):

2020-07-17  Alexey Shvayka  <shvaikalesh@gmail.com>

        emitIsUndefined() should not special-case [[IsHTMLDDA]] objects
        https://bugs.webkit.org/show_bug.cgi?id=214443

        Reviewed by Yusuke Suzuki.

        According to Annex B [1], there is only a handful of language constructs
        that handle [[IsHTMLDDA]] objects: ToBoolean, abstract equality with `null`
        or `undefined`, and `typeof`. Currently, op_is_undefined does special-case
        masquarader objects, even though it is used beyond `typeof`.

        With this change, emitIsUndefined() produces `=== undefined`, which meets
        developer expectations and the spec for all its usages, while op_is_undefined
        is renamed to op_typeof_is_undefined. New name offers better semantics and
        clearly communicates the op should be avoided when implementing new features.

        Apart from fixing default values with [[IsHTMLDDA]] objects [2], this change
        brings significant speed-up: +50% for function parameters and +20% for
        object destructuring (masqueradesAsUndefinedWatchpoint is not fired).

        This patch also introduces similar emitIsNull() method to avoid breaking
        masquarader object as superclass test262 case.

        [1]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot
        [2]: https://tc39.es/ecma262/#sec-runtime-semantics-keyedbindinginitialization (step 2)

        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        (JSC::BytecodeGenerator::emitIsUndefined): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitIsNull):
        (JSC::BytecodeGenerator::emitIsUndefined):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ForInNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGWatchpointCollectionPhase.cpp:
        (JSC::DFG::WatchpointCollectionPhase::handle):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileTypeOfIsUndefined):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsUndefined): Deleted.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::emit_op_is_undefined): Deleted.
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_typeof_is_undefined):
        (JSC::JIT::emit_op_is_undefined): Deleted.
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2020-07-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clean up Intl option parsing code by introducing intlOption<>
        https://bugs.webkit.org/show_bug.cgi?id=214437

        Reviewed by Ross Kirsling.

        This patch introduces intlOption<>(...) function and remove redundant string comparisons.
        This makes option handling efficient, and it makes code clean.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlObject.cpp:
        (JSC::resolveLocale):
        (JSC::supportedLocales):
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::intlOption):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):

2020-07-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [WTF] Remove the unnecessary inner class DefaultHash<T>::Hash
        https://bugs.webkit.org/show_bug.cgi?id=214389

        Reviewed by Darin Adler.

        * assembler/MacroAssemblerCodeRef.h:
        * b3/B3CheckSpecial.h:
        * b3/B3Kind.h:
        * b3/B3ValueKey.h:
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * b3/air/AirArg.h:
        * b3/air/AirTmp.h:
        * bytecode/BytecodeIndex.h:
        * bytecode/CallVariant.h:
        * bytecode/CodeOrigin.h:
        * bytecode/DFGExitProfile.h:
        * bytecode/LazyOperandValueProfile.h:
        * bytecode/ObjectPropertyCondition.h:
        * bytecode/PropertyCondition.h:
        * dfg/DFGAbstractHeap.h:
        * dfg/DFGArgumentsEliminationPhase.cpp:
        * dfg/DFGByteCodeParser.cpp:
        * dfg/DFGCSEPhase.cpp:
        * dfg/DFGCompilationKey.h:
        * dfg/DFGDesiredGlobalProperty.h:
        * dfg/DFGHeapLocation.h:
        * dfg/DFGLivenessAnalysisPhase.cpp:
        * dfg/DFGMinifiedID.h:
        * dfg/DFGNodeFlowProjection.h:
        * dfg/DFGPromotedHeapLocation.h:
        * dfg/DFGPropertyTypeKey.h:
        * dfg/DFGPureValue.h:
        * ftl/FTLLocation.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayWithSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewObject):
        * ftl/FTLSlowPathCallKey.h:
        * heap/MarkedBlock.h:
        * heap/VisitRaceKey.h:
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * jit/ICStats.h:
        * jit/JITThunks.h:
        * jit/Reg.h:
        * jit/RegisterSet.h:
        * parser/VariableEnvironment.h:
        * profiler/ProfilerOrigin.h:
        * profiler/ProfilerOriginStack.h:
        * profiler/ProfilerUID.h:
        * runtime/CachedTypes.cpp:
        * runtime/ControlFlowProfiler.h:
        * runtime/NativeFunction.h:
        * runtime/PrototypeKey.h:
        * runtime/RegExpKey.h:
        * runtime/TemplateObjectDescriptor.h:
        * runtime/TypeProfiler.h:
        * runtime/VarOffset.h:
        * runtime/WeakGCMap.h:
        * wasm/WasmBBQPlan.h:
        * wasm/WasmCodeBlock.h:
        * wasm/WasmEntryPlan.h:
        * wasm/WasmLLIntPlan.h:
        * wasm/WasmSignature.h:

2020-07-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use unvalidatedGet instead of get to access UnlinkedCodeBlock from CodeBlock destructor
        https://bugs.webkit.org/show_bug.cgi?id=214403
        <rdar://problem/65527229>

        Reviewed by Mark Lam.

        WriteBarrier<>::get has a check whether this is not executed when sweeping cells. This is good assertion since
        destruction order of cells are not defined in general, so member cell access from a destructor is almost always wrong.
        But in CodeBlock case, this is OK because (1) CodeBlock destructor accesses UnlinkedCodeBlock and (2) GC ensures that
        CodeBlock gets destroyed before UnlinkedCodeBlock gets destroyed. So this assertion is hit incorrectly.
        In this patch, we use WriteBarrier<>::unvalidatedGet in CodeBlock destructor to bypass the above assertion explicitly.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * heap/Heap.cpp:
        (JSC::Heap::deleteUnmarkedCompiledCode):

2020-07-15  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][WebDriver] Generating WebDriverAtoms.cpp is rarely failing as "ImportError: No module named jsmin"
        https://bugs.webkit.org/show_bug.cgi?id=214339

        Reviewed by Don Olmstead.

        * CMakeLists.txt: Renamed stageSharedScripts to JavaScriptCoreSharedScripts.

2020-07-15  Mark Lam  <mark.lam@apple.com>

        Add handling of out of memory handling while adding a worklet module.
        https://bugs.webkit.org/show_bug.cgi?id=214354
        <rdar://problem/65271931>

        Reviewed by Yusuke Suzuki and Keith Miller.

        Add VM::tryCreate() that can fail if we encounter an out of memory issue.
        As always, we're taking a best effort approach to handling out of memory errors.
        Hence, we will not attempt to exhaustively handle every OOME scenario.  This patch
        only checks for failure to allocate a BigInt due to Gigacage exhaustion.  While it
        doesn't handle other allocation errors, it does enable us to add handling of other
        cases in the future as needed.

        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::tryCreate):
        * runtime/VM.h:

2020-07-15  Jim Mason  <jmason@ibinx.com>

        [WTF] Fix PackedAlignedPtr for X86_64 canonical addresses
        https://bugs.webkit.org/show_bug.cgi?id=214142

        Reviewed by Mark Lam

        Fixed pointer test to use unsigned in place of signed.

        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::callWebAssemblyFunction):

2020-07-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        Emit HasOwnPropertyFunctionCallDotNode for "Reflect" identifiers
        https://bugs.webkit.org/show_bug.cgi?id=214325

        Reviewed by Darin Adler and Saam Barati.

        Currently, HasOwnPropertyFunctionCallDotNode is emitted for all ResolveNodes
        except ones with "Reflect" identifier. This exception doesn't seem necessary
        as ReflectObject inherits ordinary `Object.prototype.hasOwnProperty` method.

        This patch removes the exception, advancing provided "Reflect" microbenchmark
        by 20%. No behavior change.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeFunctionCallNode):

2020-07-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Introduce JSCTEST_hardTimeout
        https://bugs.webkit.org/show_bug.cgi?id=214343

        Reviewed by Mark Lam.

        JSC Debug tests are failing consistently these days, https://build.webkit.org/builders/Apple-Catalina-Debug-JSC-Tests/.
        My guess is that some tests get stuck inside JSC even if timeout occurs. Let's consider the following case.

            1. The test is having `JSC_useConcurrentJIT=0`.
            2. The test is building super heavy FTL code in the main thread.
            3. The timeout thread notifies the VM about the timeout.
            4. But VM does not stop since it is running super heavy FTL compilation.
            5. After 1200 seconds, buildbot terminates the entire test.

        In the above case, JSC gets stuck, and eventually buildbot terminates.
        In this patch, we introduce JSCTEST_hardTimeout. After soft-timeout (usual timeout) happens, we wait another JSCTEST_hardTimeout seconds.
        And if the JSC shell is not finished, we forcefully terminates the JSC shell via exit(EXIT_FAILURE), to avoid entire JSC test termination
        in buildbot.

        We pick 300 seconds. This means, after soft-timeout occurs, we wait for 5 mins, and if the JSC shell is still active, kill it. 5 mins sounds
        reasonable amount of time. And this should fit within buildbot's hard timeout (1200 seconds).

        * jsc.cpp:
        (startTimeoutTimer):

2020-07-14  Saam Barati  <sbarati@apple.com>

        We must hold the CodeBlock lock when calling StructureStubInfo::reset
        https://bugs.webkit.org/show_bug.cgi?id=214332
        <rdar://problem/64940787>

        Reviewed by Yusuke Suzuki.

        There was a race between resetting the StructureStubInfo, and reading from
        it from the compiler thread. There was one place inside Repatch where we
        didn't hold the CodeBlock's lock when calling StructureStubInfo::reset.
        
        To make it clear which functions require the CodeBlock's lock to be
        held when called, I've changed all such functions to take the
        LockHolder as a parameter.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeBaselineJITInlineCaches):
        * bytecode/StructureStubClearingWatchpoint.cpp:
        (JSC::StructureTransitionStructureStubClearingWatchpoint::fireInternal):
        (JSC::AdaptiveValueStructureStubClearingWatchpoint::handleFire):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initArrayLength):
        (JSC::StructureStubInfo::initStringLength):
        (JSC::StructureStubInfo::initPutByIdReplace):
        (JSC::StructureStubInfo::initInByIdSelf):
        (JSC::StructureStubInfo::addAccessCase):
        (JSC::StructureStubInfo::reset):
        (JSC::StructureStubInfo::visitWeakReferences):
        (JSC::StructureStubInfo::setCacheType):
        * bytecode/StructureStubInfo.h:
        * jit/Repatch.cpp:
        (JSC::fireWatchpointsAndClearStubIfNeeded):
        (JSC::tryCacheGetBy):
        (JSC::tryCachePutByID):
        (JSC::tryCacheInByID):

2020-07-14  Mark Lam  <mark.lam@apple.com>

        Handle out of memory error while creating an error message in the literal parser.
        https://bugs.webkit.org/show_bug.cgi?id=214313
        <rdar://problem/65031745>

        Reviewed by Saam Barati.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser<CharType>::parse):

2020-07-14  Caitlin Potter  <caitp@igalia.com>

        [JSC] fixup LLInt fast path in op_get_private_name
        https://bugs.webkit.org/show_bug.cgi?id=214311

        Reviewed by Tadeu Zagallo.

        The LLInt slow path would previously always be taken in op_get_private_name,
        due to not comparing the operand field name's JSValue payload with the cached
        field name, but the register index itself.

        This fixup can't really be verified by tests, as it is primarily a
        minor performance improvement.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2020-07-14  Xan Lopez  <xan@igalia.com>

        [JSC] Remove compiler warning in JSBigInt
        https://bugs.webkit.org/show_bug.cgi?id=214298

        Reviewed by Sam Weinig.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::parseInt): no need to ASSERT >= 0 with an unsigned int.

2020-07-14  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified build fixes

        * runtime/IntlObject.cpp:

2020-07-13  Fujii Hironori  <Hironori.Fujii@sony.com>

        Unreviewed non-unified build fixes

        * dfg/DFGCodeOriginPool.h:

2020-07-13  Saam Barati  <sbarati@apple.com>

        returnEarlyFromInfiniteLoopsForFuzzing and validateDoesGC may fail when used together in the FTL
        https://bugs.webkit.org/show_bug.cgi?id=214289
        <rdar://problem/65272138>

        Reviewed by Keith Miller.

        Because the patchpoint we use for returnEarlyFromInfiniteLoopsForFuzzing doesn't
        read or write any heap ranges, B3 move memory ops around it. In particular, it
        might move the validate DoesGC store above it. In the FTL, we should make returnEarlyFromInfiniteLoopsForFuzzing
        mimic what Return does for validating DoesGC.

        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):

2020-07-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] IntlLocale::initializeLocale should have scope.release
        https://bugs.webkit.org/show_bug.cgi?id=214271
        <rdar://problem/65467314>

        Reviewed by Darin Adler.

        Add missing scope.release() to suppress validateExceptionChecks crash.

        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::initializeLocale):

2020-07-13  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] FTL isCellOrMisc should be isCellOrMiscOrBigInt32
        https://bugs.webkit.org/show_bug.cgi?id=214269
        <rdar://problem/65475129>

        Reviewed by Mark Lam.

        FTL isCellOrMisc's check can accept BigInt32 too. So it should be isCellOrMiscOrBigInt32.
        Since our proven type filter does not include SpecBigInt32, isCellOrMisc can be folded into
        false for BigInt32 AbstractValue. This patch fixes that filter. And we also reviewed places
        using isCellOrMisc / isNotCellOrMisc.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileSwitch):
        (JSC::FTL::DFG::LowerDFGToB3::numberOrNotCellNorBigIntToInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isCellOrMiscOrBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNotCellOrMiscOrBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNumber):
        (JSC::FTL::DFG::LowerDFGToB3::isNotNumber):
        (JSC::FTL::DFG::LowerDFGToB3::isCellOrMisc): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isNotCellOrMisc): Deleted.

2020-07-13  Geoffrey Garen  <ggaren@apple.com>

        Unreviewed, re-landing r264242 with crash fixed.

        Re-landed changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

        * runtime/JSRunLoopTimer.cpp:
        (JSC::epochTime):
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData):
        (JSC::JSRunLoopTimer::Manager::timerDidFireCallback):
        (JSC::JSRunLoopTimer::Manager::PerVMData::~PerVMData):
        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer):
        (JSC::JSRunLoopTimer::Manager::PerVMData::setRunLoop): Deleted.
        (JSC::JSRunLoopTimer::Manager::didChangeRunLoop): Deleted.
        * runtime/JSRunLoopTimer.h:
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData): Deleted.
        * runtime/PromiseTimer.cpp:
        (JSC::PromiseTimer::doWork):
        (JSC::PromiseTimer::runRunLoop):
        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::create):
        (JSC::VM::setRunLoop): Deleted.
        * runtime/VM.h:
        (JSC::VM::runLoop const):

2020-07-13  Keith Miller  <keith_miller@apple.com>

        Clean up SourceProvider and add caller relative load script to jsc.cpp
        https://bugs.webkit.org/show_bug.cgi?id=214205

        Reviewed by Yusuke Suzuki.

        This patch originally was just to add an optional parameter to our
        load function so that any relative path is computed with respect
        to calling script.  Rather than computing the path relative to the
        current working directory. The main advantage of this is now you
        can run all the JSTests/stress scripts from anywhere rather than
        only from the stress directory. This also matches jsc.cpp's module
        loader implementation.

        To make this possible a surprising number of changes were
        needed. Specifically, it was much easier to get this to work if we
        converted SourceOrigin's url to a WTF::URL rather than just a
        WTF::String. At the same time it became clear that
        SourceProvider's m_sourceURL is really not a URL but more of a
        file name, which can sometimes be a URL. It's possible that we
        don't need m_sourceURL at all but we should do that in a different
        patch.

        Additionally, jsc.cpp now uses WTF::URL for handling file
        paths. This is cleaner than managing trying to do it ourselves and
        should work across all the ports.

        Lastly, the JSC CLI no longer accepts "bare-name"
        specifiers. i.e. all specifiers must start with "/", "./", or
        "../". This matches what we do in our Obj-C API and in
        WebCore. While fixing tests I also noticed that the error message
        was almost useless since it didn't tell you what the specifier or
        referrer in question so that information is now part of the user
        visible error.

        * API/JSAPIGlobalObject.mm:
        (JSC::computeValidImportSpecifier):
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        * API/JSScript.mm:
        (-[JSScript sourceCode]):
        * API/JSScriptRef.cpp:
        * API/glib/JSCContext.cpp:
        (jsc_context_check_syntax):
        * builtins/BuiltinExecutables.cpp:
        (JSC::BuiltinExecutables::BuiltinExecutables):
        * debugger/DebuggerLocation.cpp:
        (JSC::DebuggerLocation::DebuggerLocation):
        * debugger/DebuggerLocation.h:
        (JSC::DebuggerLocation::DebuggerLocation):
        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::sourceParsed):
        * jsc.cpp:
        (currentWorkingDirectory):
        (absolutePath):
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderResolve):
        (jscSource):
        (fetchModuleFromLocalFileSystem):
        (GlobalObject::moduleLoaderFetch):
        (functionLoad):
        (functionCallerSourceOrigin):
        (functionDollarAgentStart):
        (functionCheckModuleSyntax):
        (runWithOptions):
        (runInteractive):
        (ModuleName::startsWithRoot const): Deleted.
        (ModuleName::ModuleName): Deleted.
        (extractDirectoryName): Deleted.
        (resolvePath): Deleted.
        * parser/Nodes.h:
        (JSC::ScopeNode::source const):
        (JSC::ScopeNode::sourceURL const): Deleted.
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceCodeKey.h:
        (JSC::SourceCodeKey::host const):
        * parser/SourceProvider.cpp:
        (JSC::SourceProvider::SourceProvider):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::sourceURL const):
        (JSC::StringSourceProvider::create):
        (JSC::StringSourceProvider::StringSourceProvider):
        (JSC::SourceProvider::url const): Deleted.
        * runtime/CachedTypes.cpp:
        (JSC::CachedSourceOrigin::encode):
        (JSC::CachedSourceOrigin::decode const):
        (JSC::CachedSourceProviderShape::encode):
        (JSC::CachedStringSourceProvider::decode const):
        (JSC::CachedWebAssemblySourceProvider::decode const):
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::sourceURL const):
        * runtime/SourceOrigin.h:
        (JSC::SourceOrigin::SourceOrigin):
        (JSC::SourceOrigin::url const):
        (JSC::SourceOrigin::string const):
        (JSC::SourceOrigin::isNull const):
        * runtime/ThrowScope.cpp:
        (JSC::ThrowScope::throwException):
        * runtime/ThrowScope.h:
        (JSC::ThrowScope::throwException):
        (JSC::throwVMException):
        * tools/FunctionOverrides.cpp:
        (JSC::initializeOverrideInfo):
        * tools/JSDollarVM.cpp:
        (JSC::doPrint):
        (JSC::functionCrash):

2020-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] String.protoytpe.toLocaleLowerCase's availableLocales HashSet is inefficient
        https://bugs.webkit.org/show_bug.cgi?id=213158

        Reviewed by Darin Adler.

        Currently, we are always creating the same HashSet every time String.protoytpe.toLocaleLowerCase is called.
        We changed bestAvailableLocale to take predicate function. And we pass a predicate which returns true for
        case-sensitive locales.

        * runtime/IntlObject.cpp:
        (JSC::bestAvailableLocale):
        * runtime/IntlObject.h:
        * runtime/IntlObjectInlines.h:
        (JSC::bestAvailableLocale):
        * runtime/StringPrototype.cpp:
        (JSC::computeTwoCharacters16Code):
        (JSC::toLocaleCase):

2020-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] We should keep unaligned access feature in certain architectures in macro-assembler
        https://bugs.webkit.org/show_bug.cgi?id=214243

        Reviewed by Darin Adler.

        We introduced the assertion in r263049, but this assertion crashes in testb3 Debug build.
        testb3 actually tests unaligned access feature since ARM64 and x64 allow it. And unaligned access is useful
        for Yarr etc., so we want to keep unaligned access feature if architecture allows it. We should make this
        assertion effective only if CPU(NEEDS_ALIGNED_ACCESS) is true.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::loadPtr):

2020-07-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Avoid JSString creation in Intl.Locale#{minimize,maximize}
        https://bugs.webkit.org/show_bug.cgi?id=214231

        Reviewed by Darin Adler.

        Add initializeLocale function taking String to avoid unnecessary JSString creation
        in Intl.Locale#{maximize,minimize}.

        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::initializeLocale):
        * runtime/IntlLocale.h:
        * runtime/IntlLocalePrototype.cpp:
        (JSC::IntlLocalePrototypeFuncMaximize):
        (JSC::IntlLocalePrototypeFuncMinimize):

2020-07-11  Yusuke Suzuki  <ysuzuki@apple.com>

        Intl.Locale maximize, minimize should return Intl.Locale instead of String
        https://bugs.webkit.org/show_bug.cgi?id=214223
        <rdar://problem/65413620>

        Reviewed by Ross Kirsling.

        Intl.Locale#{maximize,minimize} should return Intl.Locale object instead of generated locale string.

        We also add some protection and use jsString instead of jsNontrivialString because it would be still
        possible that ICU's locale recognition and our locale interpretation do not agree each other and ICU
        failed to produce locale, and then the string becomes empty. Since this is a boundary between third-party
        library and JSC, and we are not ensuring our invariant inside third-party library, taking safer path makes
        it better.

        We also change IntlLocale#{maximize,minimize} C++ function names to maximal and minimal to align them
        to the sepc's definitions.

        * runtime/IntlLocale.cpp:
        (JSC::IntlLocale::maximal):
        (JSC::IntlLocale::minimal):
        (JSC::IntlLocale::maximize): Deleted.
        (JSC::IntlLocale::minimize): Deleted.
        * runtime/IntlLocale.h:
        * runtime/IntlLocalePrototype.cpp:
        (JSC::IntlLocalePrototypeFuncMaximize):
        (JSC::IntlLocalePrototypeFuncMinimize):
        (JSC::IntlLocalePrototypeFuncToString):
        (JSC::IntlLocalePrototypeGetterBaseName):
        (JSC::IntlLocalePrototypeGetterCalendar):
        (JSC::IntlLocalePrototypeGetterCaseFirst):
        (JSC::IntlLocalePrototypeGetterCollation):
        (JSC::IntlLocalePrototypeGetterHourCycle):
        (JSC::IntlLocalePrototypeGetterNumberingSystem):
        (JSC::IntlLocalePrototypeGetterLanguage):
        (JSC::IntlLocalePrototypeGetterScript):
        (JSC::IntlLocalePrototypeGetterRegion):

2020-07-10  Chris Dumez  <cdumez@apple.com>

        Unreviewed, reverting r264242.

        Caused many crashes on iOS bots

        Reverted changeset:

        "JSRunLoopTimer should use WTF::RunLoop rather than custom CF
        code"
        https://bugs.webkit.org/show_bug.cgi?id=214102
        https://trac.webkit.org/changeset/264242

2020-07-10  Geoffrey Garen  <ggaren@apple.com>

        JSRunLoopTimer should use WTF::RunLoop rather than custom CF code
        https://bugs.webkit.org/show_bug.cgi?id=214102

        Reviewed by Darin Adler.

        The generic RunLoop codepath was already mostly right. Just needed to
        clarify the API to demonstrate that VMs do not hop from one RunLoop
        to another.

        * runtime/JSRunLoopTimer.cpp:
        (JSC::epochTime): Removed the CF path.

        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData): Include a RunLoop
        as a constructor argument so that the web thread can override it.

        (JSC::JSRunLoopTimer::Manager::timerDidFireCallback): Removed the CF path.

        (JSC::JSRunLoopTimer::Manager::PerVMData::~PerVMData): No need to
        explicitly clear our RunLoop -- the RunLoop::Timer destructor will do
        the job.

        (JSC::JSRunLoopTimer::Manager::timerDidFire):
        (JSC::JSRunLoopTimer::Manager::registerVM):
        (JSC::JSRunLoopTimer::Manager::scheduleTimer):
        (JSC::JSRunLoopTimer::Manager::cancelTimer): Removed the CF path.

        (JSC::JSRunLoopTimer::Manager::PerVMData::setRunLoop): Deleted.
        (JSC::JSRunLoopTimer::Manager::didChangeRunLoop): Deleted. Changing
        RunLoops is not actually a feature we use.

        * runtime/JSRunLoopTimer.h:
        (JSC::JSRunLoopTimer::Manager::PerVMData::PerVMData): Deleted.
        * runtime/PromiseTimer.cpp:
        (JSC::PromiseTimer::doWork):
        (JSC::PromiseTimer::runRunLoop): Removed the CF path.

        * runtime/VM.cpp:
        (JSC::VM::VM):
        (JSC::VM::create):
        (JSC::VM::setRunLoop): Deleted.
        * runtime/VM.h:
        (JSC::VM::runLoop const): Require a RunLoop in the VM constructor in
        order to clarify that we always know our RunLoop and never change it.

2020-07-09  Brian Burg  <bburg@apple.com>

        REGRESSION(r262302): ITMLKit debuggables in listings are missing a title, use UUID instead
        https://bugs.webkit.org/show_bug.cgi?id=214153

        Reviewed by Devin Rousso.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::listingForInspectionTarget const):
        Looks like this is due to copypasta.

2020-07-09  Alexey Shvayka  <shvaikalesh@gmail.com>

        ErrorInstance::finishCreation() puts "message" twice, with different attributes
        https://bugs.webkit.org/show_bug.cgi?id=214089

        Reviewed by Yusuke Suzuki.

        This change refactors appendSourceToError() to return new message, making it almost pure
        and eliminating extra JSString -> String -> JSString conversion and {get,put}Direct() calls
        from ErrorInstance::finishCreation(). Also, moves null message check as early as possible.

        Removed putDirect() call didn't pass PropertyAttribute::DontEnum. An implementation detail,
        that is about to change in https://webkit.org/b/142933, prevented "message" property from
        beind redefined with PropertyAttribute::None.

        No behavior change. Advances provided microbenchmark by 5%.

        * runtime/ErrorInstance.cpp:
        (JSC::appendSourceToErrorMessage):
        (JSC::ErrorInstance::finishCreation):
        (JSC::appendSourceToError): Deleted.

2020-07-08  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] B3 PureCSE should ignore values which are moved to new BasicBlock
        https://bugs.webkit.org/show_bug.cgi?id=214115
        <rdar://problem/65189470>

        Reviewed by Saam Barati.

        We are performing "Select" specialization like this.

              BB#target
                 ...
                 @a = Select(@p, @x, 42)
                 @b = Add(@a, 35)
                 Check(@b)
                 @c = ...

             becomes this:

               BB#predecessor
                 ...
                 Branch(@p, #truecase, #falsecase)

               BB#truecase:
                 @b_truecase = Add(@x, 35)
                 Check(@b_truecase)
                 Upsilon(@x, ^a)
                 Upsilon(@b_truecase, ^b)
                 Jump(#continuation)

               BB#falsecase:
                 @b_falsecase = Add(42, 35)
                 Check(@b_falsecase)
                 Upsilon(42, ^a)
                 Upsilon(@b_falsecase, ^b)
                 Jump(#continuation)

               BB#continuation:
                 @a = Phi()
                 @b = Phi()
                 Jump(#target)

               BB#target
                 @c = ...

        In the above transformation, we create a new BasicBlock and move @a and @b to that one. This is good since we do not need to rewrite all the use of @a and @b.
        However, this confuses PureCSE since @a and @b point to a BasicBlock (BB#continuation) which is not inserted into the graph yet.

        This patch changes PureCSE so that it ignores values which owners are not inserted yet.

        * b3/B3BasicBlock.h:
        (JSC::B3::BasicBlock::isInserted const):
        * b3/B3GenericBlockInsertionSet.h:
        (JSC::B3::GenericBlockInsertionSet::insert):
        * b3/B3PureCSE.cpp:
        (JSC::B3::PureCSE::findMatch):
        (JSC::B3::PureCSE::process):
        * b3/air/AirBasicBlock.h:

2020-07-08  Saam Barati  <sbarati@apple.com>

        Add a fuzzing toggle for LICM
        https://bugs.webkit.org/show_bug.cgi?id=214093

        Reviewed by Yusuke Suzuki.

        We have an AI based safety checker for LICM, to determine if it's safe to
        hoist nodes. Historically, we've had bugs here, where we allow unsafe
        hoisting. In practice, we've been saved by safety checks also being hoisted
        at the same time as the operation they're protecting, so even if we
        have bugs in AI-based safeToExecute, things usually just work. Since
        we've had security bugs here before, where the safety checks don't get hoisted,
        leading to issues, it's helpful if we can fuzz this area.  This patch implements
        a way to says we won't hoist a node based on some probability, allowing us to play
        with what does and doesn't get hoisted.

        * dfg/DFGLICMPhase.cpp:
        (JSC::DFG::LICMPhase::run):
        * runtime/OptionsList.h:

2020-07-08  Saam Barati  <sbarati@apple.com>

        Add a way to return early from detected infinite loops to aid the fuzzer
        https://bugs.webkit.org/show_bug.cgi?id=214067

        Reviewed by Yusuke Suzuki.

        It's useful for the fuzzer to not get stuck in infinite loops so its
        test cases can make forward progress trying to find bugs. This patch
        adds a new mechanism where we can early return if we've exceeded a total
        execution count for a static loop in bytecode. Note: this is not on a
        per-frame basis, but it's a way to implement this in a non-invasive way
        which is also practical for the fuzzer to use.

        * b3/air/AirAllocateRegistersAndStackAndGenerateCode.cpp:
        (JSC::B3::Air::GenerateAndAllocateRegisters::generate):
        * b3/air/AirCode.cpp:
        (JSC::B3::Air::Code::emitEpilogue):
        * b3/air/AirCode.h:
        * b3/air/AirGenerate.cpp:
        (JSC::B3::Air::generateWithAlreadyAllocatedRegisters):
        * bytecode/BytecodeList.rb:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::~CodeBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileLoopHint):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_loop_hint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/mips.rb:
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::addLoopHintExecutionCounter):
        (JSC::VM::getLoopHintExecutionCounter):
        (JSC::VM::removeLoopHintExecutionCounter):
        * runtime/VM.h:

2020-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BytecodeGenerator should be robust against failed constant generation
        https://bugs.webkit.org/show_bug.cgi?id=214062
        <rdar://problem/65117916>

        Reviewed by Saam Barati.

        Some code in NodesCodegen.cpp assumes `jsValue(generator)` call for constant nodes must succeed.
        But this can fail when BigInt in source code is too large and becomes OOM. BytecodeGenerator should
        be robust against BigInt OOM.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ConstantNode::emitBytecodeInConditionContext):
        (JSC::ArrayNode::emitBytecode):
        (JSC::BinaryOpNode::tryFoldToBranch):

2020-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Should not pass Exception to JSPromise::reject
        https://bugs.webkit.org/show_bug.cgi?id=214061
        <rdar://problem/65134450>

        Reviewed by Mark Lam.

        In some places, we are passing Exception* as JSValue instead of Exception::value()'s JSValue.
        Error and Exception are different, and Exception is not an object. We should pass Exception::value()'s
        thrown value instead. I checked `reject(` call sites and ensure error is passed.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        (JSC::JSAPIGlobalObject::moduleLoaderFetch):
        * jsc.cpp:
        (GlobalObject::moduleLoaderImportModule):
        (GlobalObject::moduleLoaderFetch):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::importModule):
        (JSC::JSModuleLoader::resolve):
        (JSC::JSModuleLoader::fetch):
        (JSC::moduleLoaderParseModule):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::resolve):
        (JSC::JSPromise::reject):

2020-07-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix btjs by recovering CallFrame::describeFrame
        https://bugs.webkit.org/show_bug.cgi?id=214055

        Reviewed by Mark Lam.

        While CallFrame::describeFrame is not used in WebKit tree, it is used in LLDB btjs which is invoked from python.
        So we need to keep it. We also use std::call_once based buffer allocation instead of `static char buffer[...]`
        to avoid spreading debug-use-only buffer in BSS segment.

        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::describeFrame):
        * interpreter/CallFrame.h:

2020-07-07  Keith Miller  <keith_miller@apple.com>

        Bytecode UseDef should be aware of checkpoints
        https://bugs.webkit.org/show_bug.cgi?id=213566

        Reviewed by Saam Barati.

        Previously, we tried to solve teaching DFG about uses and defs of
        locals across checkpoints by asking what locals were def'd at some
        checkpoint. However, this was subtly wrong because we couldn't
        report any uses at subsequent checkpoints so DFG thought the
        local was dead immediately after its birth.

        This patch reverts that change and instead teaches BytecodeUseDef
        about checkpoints. Right now, BytecodeUseDef only knows about
        locals at checkpoints but in the future we may teach it about tmps
        at well.

        Since the vectors containing our liveness bitmaps were already
        sparse (they are indexed by the bytecode offset) we can reuse the
        gaps to hold our checkpoint liveness information. To make sure we
        don't overlap between the next bytecode and a checkpoint for the
        current bytecode there is now a static assert that the length of
        the bytecode is greater than the number of checkpoints. This
        assumption is already true for existing bytecodes with checkpoints (and
        likely to be true for future ones anyway).

        Many of the BytecodeLivenessPropegation functions have been
        renamed to reflect that they operate over the full instruction,
        including checkpoints, rather than just the BytecodeIndex passed.

        Lastly, this patch makes a speculative fix to forAllKilledOperands where we
        wouldn't report that all tmps die at the end of each bytecode. I can't think
        of a case where this would break things but it's probably good hygiene.

        * bytecode/BytecodeGeneratorification.cpp:
        (JSC::GeneratorLivenessAnalysis::run):
        * bytecode/BytecodeIndex.h:
        (JSC::BytecodeIndex::BytecodeIndex):
        (JSC::BytecodeIndex::checkpoint const):
        (JSC::BytecodeIndex::withCheckpoint const):
        (JSC::BytecodeIndex::pack):
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::computeFullLiveness):
        (JSC::BytecodeLivenessAnalysis::dumpResults):
        (JSC::tmpLivenessForCheckpoint):
        (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtBytecodeIndex): Deleted.
        (JSC::livenessForCheckpoint): Deleted.
        * bytecode/BytecodeLivenessAnalysis.h:
        (JSC::BytecodeLivenessAnalysis::getLivenessInfoAtInstruction):
        * bytecode/BytecodeLivenessAnalysisInlines.h:
        (JSC::BytecodeLivenessPropagation::stepOverBytecodeIndexDef):
        (JSC::BytecodeLivenessPropagation::stepOverBytecodeIndexUse):
        (JSC::BytecodeLivenessPropagation::stepOverBytecodeIndexUseInExceptionHandler):
        (JSC::BytecodeLivenessPropagation::stepOverBytecodeIndex):
        (JSC::BytecodeLivenessPropagation::stepOverInstruction):
        (JSC::BytecodeLivenessPropagation::computeLocalLivenessForInstruction):
        (JSC::BytecodeLivenessPropagation::computeLocalLivenessForBlock):
        (JSC::BytecodeLivenessPropagation::getLivenessInfoAtInstruction):
        (JSC::BytecodeLivenessPropagation::stepOverInstructionDef): Deleted.
        (JSC::BytecodeLivenessPropagation::stepOverInstructionUse): Deleted.
        (JSC::BytecodeLivenessPropagation::stepOverInstructionUseInExceptionHandler): Deleted.
        (JSC::BytecodeLivenessPropagation::computeLocalLivenessForBytecodeIndex): Deleted.
        (JSC::BytecodeLivenessPropagation::getLivenessInfoAtBytecodeIndex): Deleted.
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/BytecodeUseDef.h:
        (JSC::computeUsesForBytecodeIndex):
        (JSC::computeDefsForBytecodeIndex):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::ensureCatchLivenessIsComputedForBytecodeIndexSlow):
        (JSC::CodeBlock::validate):
        * bytecode/FullBytecodeLiveness.h:
        (JSC::FullBytecodeLiveness::getLiveness const):
        (JSC::FullBytecodeLiveness::toIndex):
        * bytecode/Instruction.h:
        (JSC::BaseInstruction::numberOfCheckpoints const):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::ForInContext::finalize):
        * dfg/DFGForAllKills.h:
        (JSC::DFG::forAllKilledOperands):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::isLiveInBytecode):
        * dfg/DFGGraph.h:
        * dfg/DFGMovHintRemovalPhase.cpp:
        * dfg/DFGPlan.cpp:
        (JSC::DFG::Plan::cleanMustHandleValuesIfNecessary):
        * generator/Opcode.rb:
        * generator/Section.rb:

2020-07-06  Geoffrey Garen  <ggaren@apple.com>

        callOnMainThread should use the same queue as RunLoop::dispatch
        https://bugs.webkit.org/show_bug.cgi?id=213830

        Reviewed by Brady Eidson.

        * JavaScriptCore.order:

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263960.
        https://bugs.webkit.org/show_bug.cgi?id=213980

        Re-land, because r263959 somehow fixed the build issue caused
        by r263953

        Reverted changeset:

        "Unreviewed, reverting r263953 and r263959."
        https://bugs.webkit.org/show_bug.cgi?id=213979
        https://trac.webkit.org/changeset/263960

2020-07-05  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r263953 and r263959.
        https://bugs.webkit.org/show_bug.cgi?id=213979

        Broke internal build

        Reverted changesets:

        "[Cocoa] Move almost all features from FeatureDefines.xcconfig
        to PlatformEnableCocoa.h"
        https://bugs.webkit.org/show_bug.cgi?id=212542
        https://trac.webkit.org/changeset/263953

        "[Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build
        system"
        https://bugs.webkit.org/show_bug.cgi?id=213976
        https://trac.webkit.org/changeset/263959

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Remove FEATURE_DEFINES from the Cocoa/Xcode build system
        https://bugs.webkit.org/show_bug.cgi?id=213976

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed FEATURE_DEFINES.
        * Configurations/FeatureDefines.xcconfig: Removed.
        * Configurations/JSC.xcconfig: Removed include of FeatureDefines.xcconfig.
        * Configurations/JavaScriptCore.xcconfig: Ditto.
        * Configurations/ToolExecutable.xcconfig: Ditto.
        * DerivedSources-input.xcfilelist: Removed FeatureDefines.xcconfig.
        * DerivedSources.make: Removed FEATURE_DEFINES and FEATURE_DEFINE_FLAGS.
        * JavaScriptCore.xcodeproj/project.pbxproj: Removed FeatureDefines.xcconfig.

2020-07-05  Darin Adler  <darin@apple.com>

        [Cocoa] Move almost all features from FeatureDefines.xcconfig to PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212542

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Delete everything except
        ENABLE_EXPERIMENTAL_FEATURES and ENABLE_WEBRTC.

2020-07-05  Philippe Normand  <pnormand@igalia.com>

        Web Inspector: Fix python3 build warnings
        https://bugs.webkit.org/show_bug.cgi?id=213971

        Reviewed by Sam Weinig.

        Fix Python3 syntax warnings. Using 'is' with string literals triggers those. Adopt the ==
        operator instead, which is more idiomatic anyway.

        * inspector/scripts/codegen/cpp_generator.py:
        (CppGenerator.cpp_getter_method_for_type):
        (CppGenerator.cpp_setter_method_for_type):
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCTypeCategory.category_for_type):
        (ObjCGenerator.objc_type_for_raw_name):
        (ObjCGenerator.objc_class_for_raw_name):
        (ObjCGenerator.protocol_type_for_raw_name):
        (ObjCGenerator.objc_protocol_export_expression_for_variable):
        (ObjCGenerator.objc_protocol_import_expression_for_variable):
        (ObjCGenerator.objc_to_protocol_expression_for_member):
        (ObjCGenerator.protocol_to_objc_expression_for_member):
        (ObjCGenerator.payload_to_objc_expression_for_member):
        (ObjCGenerator.objc_setter_method_for_member_internal):
        (ObjCGenerator.objc_getter_method_for_member_internal):
        (ObjCGenerator.objc_protocol_export_expression_for_variable.is): Deleted.
        (ObjCGenerator.objc_protocol_import_expression_for_variable.is): Deleted.
        (ObjCGenerator.objc_to_protocol_expression_for_member.is): Deleted.
        (ObjCGenerator.protocol_to_objc_expression_for_member.is): Deleted.

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove all features from FeatureDefines.xcconfig that are already mentioned in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=213962

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Removed all features that were mentioned
        in PlatformEnableCocoa.h; the rules in that file now define whether they are enabled.

2020-07-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        %TypedArray%.prototype.{indexOf,lastIndexOf} are not spec-perfect
        https://bugs.webkit.org/show_bug.cgi?id=213715

        Reviewed by Yusuke Suzuki.

        This patch:

        1. Implements step 3 of {Array,%TypedArray%}.prototype.indexOf [1] and
           %TypedArray%.prototype.lastIndexOf [2] since it is observable when
           second argument is an object with userland toString() or valueOf() method.
           Advances provided microbenchmark by 100% for Array and by 25% for %TypedArray%.

        2. Removes argument count check from %TypedArray%.prototype.{indexOf,lastIndexOf},
           allowing these methods to be invoked w/o arguments. The spec treats missing
           arguments as `undefined`, always returning -1 for typed arrays.

        Both changes align JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-array.prototype.indexof
        [2]: https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncIndexOf):
        (JSC::genericTypedArrayViewProtoFuncLastIndexOf):

2020-07-04  Darin Adler  <darin@apple.com>

        [Cocoa] Remove unconditional features from FeatureDefines.xcconfig, making sure they are covered in PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Removed features that are either unconditionally not enabled,
        or unconditionally enabled. Double checked that all the enabled ones are either in PlatformEnable.h or
        PlatformEnableCocoa.h.

2020-07-03  Darin Adler  <darin@apple.com>

        Make generate-unified-sources.sh not depend on features being listed in FEATURE_DEFINES environment variable
        https://bugs.webkit.org/show_bug.cgi?id=212420

        Reviewed by Don Olmstead.

        * Scripts/generate-unified-sources.sh: Removed many unneeded quote marks from the
        invocation of generate-unified-source-bundles.rb.

2020-07-04  Darin Adler  <darin@apple.com>

        Update comment in FeatureDefines.xcconfig since PlatformEnableCocoa.h should be used instead
        https://bugs.webkit.org/show_bug.cgi?id=213952

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Updated comment.

2020-07-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Promise should check whether a user-provided function is set by using `@isUndefinedOrNull`
        https://bugs.webkit.org/show_bug.cgi?id=213951

        Reviewed by Ross Kirsling.

        If a user-provided function is masquerade-as-undefined value, `if (!xxx.@onRejected)` returns wrong
        value since this function object is considered as undefined in this context. We should use `@isUndefinedOrNull`
        here instead since this if-branch is checking whether this property is null/undefined actually.
        And `if (@isUndefinedOrNull(...))` is efficient since we have `jundefined_or_null` / `jnundefined_or_null` bytecodes.

        * builtins/PromiseOperations.js:
        (globalPrivate.promiseReactionJob):

2020-07-03  Sam Weinig  <weinig@apple.com>

        Remove support for ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE
        https://bugs.webkit.org/show_bug.cgi?id=213932

        Reviewed by Darin Adler.

        Removes support for non-standard <input type="datetime">, currently being 
        guarded by the macro ENABLE_INPUT_TYPE_DATETIME_INCOMPLETE. This macro, was
        added back in 2013 as a temporary measure to support some engines who shipped
        support for <input type="datetime">. It is currently not enabled for any
        ports so now seems like as good a time as any to remove it.

        * Configurations/FeatureDefines.xcconfig:

2020-07-03  Sam Weinig  <weinig@apple.com>

        Add "-Wliteral-conversion" warning to Xcode based builds and fix the issues it finds
        https://bugs.webkit.org/show_bug.cgi?id=213931

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Add -Wliteral-conversion.

2020-07-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add exception checks before and after viewWithUnderlyingString
        https://bugs.webkit.org/show_bug.cgi?id=213923
        <rdar://problem/65068473>

        Reviewed by Sam Weinig.

        This patch inserts missing exception checks before and after viewWithUnderlyingString.

        * jsc.cpp:
        (printInternal):
        (functionDebug):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseFloat):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):

2020-07-03  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add exception checks in JSStringBuilder and Array#join
        https://bugs.webkit.org/show_bug.cgi?id=213915
        <rdar://problem/64878225>

        Reviewed by Saam Barati and Mark Lam.

        This patch adds missing exception checks into Array#join's certain place and JSStringBuilder.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/JSStringJoiner.h:
        (JSC::JSStringJoiner::append):

2020-07-03  Fujii Hironori  <Hironori.Fujii@sony.com>

        Builtin internal wrapper implementation files wrap static global initialization code with incorrect guards
        https://bugs.webkit.org/show_bug.cgi?id=213792

        Reviewed by Youenn Fablet.

        Streams API hadn't worked since r263700 for AppleWin and WinCairo
        ports. r263700 removed the unused ENABLE_STREAMS_API.

        Before r263700, the static global initialization code was wrapped
        by "ENABLE(WEB_RTC) || ENABLE(STREAMS_API)". After r263700, it was
        wrapped by "ENABLE(WEB_RTC)". AppleWin and WinCairo doesn't turn
        on ENABLE_WEB_RTC. So, builtins for Streams API weren't properly
        initialized for them.

        * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result: Rebaselined.
        * Scripts/wkbuiltins/builtins_generate_internals_wrapper_implementation.py:
        (BuiltinsInternalsWrapperImplementationGenerator.generate_initialize_method):
        Removed calling wrap_with_guard for the value of _generate_initialize_static_globals().

2020-07-02  Alex Christensen  <achristensen@webkit.org>

        Update Mac CMake build

        * PlatformMac.cmake:

2020-07-02  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Configure option-offered numberingSystem in Intl.NumberFormat through locale
        https://bugs.webkit.org/show_bug.cgi?id=213872

        Reviewed by Ross Kirsling.

        We need to pass numberingSystem option to ICU through locale when constructing UNumberFormat.
        We are passing it when we get "en-US-u-nu-hanidec" locale, but we are not passing it when
        we are getting `new Intl.NumberFormat("en-US", { numberingSystem: "hanidec" })`.

        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):

2020-07-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Intl.Collator should set usage:"search" option through ICU locale
        https://bugs.webkit.org/show_bug.cgi?id=213869

        Reviewed by Ross Kirsling.

        Intl.Collator has usage:"search" option, and it affects on collation. However, UCollator does not have an interface to set this collation option,
        and only way to configure UCollator is setting "-u-co-search" unicode extension to passed locale string. This patch adds "-u-co-search" unicode
        extension if Usage::Search is specified.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):

2020-07-01  Keith Miller  <keith_miller@apple.com>

        Rename zeroExtend32ToPtr to zeroExtend32ToWord
        https://bugs.webkit.org/show_bug.cgi?id=213866

        Reviewed by Saam Barati.

        The old name no longer makes sense now that we have configurations
        where sizeof(void*) != sizeof(CPURegister).

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerARM64::zeroExtend32ToWord):
        (JSC::MacroAssemblerARM64::branchMul32):
        (JSC::MacroAssemblerARM64::zeroExtend32ToPtr): Deleted.
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::zeroExtend32ToWord):
        (JSC::MacroAssemblerARMv7::zeroExtend32ToPtr): Deleted.
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::zeroExtend32ToWord):
        (JSC::MacroAssemblerMIPS::zeroExtend32ToPtr): Deleted.
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::add32):
        (JSC::MacroAssemblerX86Common::and32):
        (JSC::MacroAssemblerX86Common::mul32):
        (JSC::MacroAssemblerX86Common::or32):
        (JSC::MacroAssemblerX86Common::xor32):
        (JSC::MacroAssemblerX86Common::zeroExtend32ToWord):
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): Deleted.
        * b3/air/AirOpcode.opcodes:
        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileStringSlice):
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::setIntTypedArrayLoadResult):
        (JSC::DFG::SpeculativeJIT::compileArithDiv):
        (JSC::DFG::SpeculativeJIT::compileCreateRest):
        (JSC::DFG::SpeculativeJIT::compileArraySlice):
        (JSC::DFG::SpeculativeJIT::compileArrayIndexOf):
        (JSC::DFG::SpeculativeJIT::compileNewTypedArrayWithSize):
        (JSC::DFG::SpeculativeJIT::emitAllocateButterfly):
        (JSC::DFG::SpeculativeJIT::compileWeakMapGet):
        (JSC::DFG::SpeculativeJIT::emitInitializeButterfly):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::reboxAccordingToFormat):
        * jit/CallFrameShuffler64.cpp:
        (JSC::CallFrameShuffler::emitBox):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_has_indexed_property):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::emitLoadInt32):
        * wasm/js/JSToWasm.cpp:
        (JSC::Wasm::boxWasmResult):
        * wasm/js/WasmToJS.cpp:
        (JSC::Wasm::wasmToJS):
        * wasm/js/WebAssemblyFunction.cpp:
        (JSC::WebAssemblyFunction::jsCallEntrypointSlow):
        * yarr/YarrJIT.cpp:

2020-07-01  Saam Barati  <sbarati@apple.com>

        Script to copy over testapi.js is redundant in xcodebuild
        https://bugs.webkit.org/show_bug.cgi?id=213824

        Reviewed by Keith Miller.

        We're already copying over the entire testapiScripts directory.
        No need to manually copy just one file from it, too.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-07-01  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Use properly flag names for tests of Tools/Scripts/run-builtins-generator-tests
        https://bugs.webkit.org/show_bug.cgi?id=213733

        Reviewed by Youenn Fablet.

        Test cases under Source/JavaScriptCore/Scripts/tests/builtins/ uses exist compilation flags.
        But they can take an arbitary flag name and don't have to use an exist flag.
        I think it's better to rename them to more proper ones.

        * Scripts/tests/builtins/WebCore-ArbitraryConditionalGuard-Separate.js:
        * Scripts/tests/builtins/WebCore-DuplicateKeyValueAnnotation-Separate.js:
        * Scripts/tests/builtins/WebCore-GuardedBuiltin-Separate.js:
        * Scripts/tests/builtins/WebCore-GuardedInternalBuiltin-Separate.js:
        * Scripts/tests/builtins/WebCore-xmlCasingTest-Separate.js:
        * Scripts/tests/builtins/expected/WebCore-ArbitraryConditionalGuard-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-GuardedInternalBuiltin-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCore-xmlCasingTest-Separate.js-result:
        * Scripts/tests/builtins/expected/WebCoreJSBuiltins.h-result:

2020-06-30  Peng Liu  <peng.liu6@apple.com>

        Enable the support of FULLSCREEN_API in WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=213774

        Reviewed by Youenn Fablet.

        Replace the definition of ENABLE_FULLSCREEN_API in FeatureDefines.xcconfig with
        the one in PlatformEnableCocoa.h. We have to do that because WebKitTestRunner
        does not have a FeatureDefines.xcconfig but it uses "ENABLE(FULLSCREEN_API)"
        to conditionally compile code to test the element fullscreen API.
        WebKitTestRunner can use the macro defined in PlatformEnableCocoa.h.

        * Configurations/FeatureDefines.xcconfig:

2020-06-30  Andy Estes  <aestes@apple.com>

        [Xcode] Enable the "My Mac (Mac Catalyst)" destination in WebKit Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=213740

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig: Set SUPPORTS_MACCATALYST to YES to tell Xcode that this
        project supports building for Mac Catalyst.

2020-06-29  Tetsuharu Ohzeki  <tetsuharu.ohzeki@gmail.com>

        Remove ENABLE_STREAMS_API compilation flag
        https://bugs.webkit.org/show_bug.cgi?id=213728

        Reviewed by Sam Weinig.

        test cases under Scripts/tests/builtins/ does not uses
        this removed compilation flag. So we don't have to touch them in this change.
        
        But they are confusable so I plan to fix them in bug 213733.

        * Configurations/FeatureDefines.xcconfig:

2020-06-29  Keith Miller  <keith_miller@apple.com>

        ConservativeRoots should mark any cell it finds an interior pointer to
        https://bugs.webkit.org/show_bug.cgi?id=213686

        Reviewed by Yusuke Suzuki.

        Currently, if ConserativeRoots finds an interior pointer to a cell
        it will only mark that cell if it's a butterfly of some
        kind. However, this can cause problems if the C++ or B3 compilers
        pre-compute the offset of some cell member they want to load from
        after a call. If this happens and that interior pointer is the
        only reference to the cell it can get collected while it is still
        "alive".

        A naive patch that doesn't return from
        findGCObjectPointersForMarking after finding a live non-interior,
        non-butterfly cell was a 2% regression on Speedometer2 and
        JetStream2. So, this patch immediately returns after
        marking some non-butterfly cell, which appears to have fixed the
        regression locally. Given this was such a big regression (likely
        from running MarkedBlock::isLive) more than once there's possibly
        an optimization opportunity here. I filed
        https://bugs.webkit.org/show_bug.cgi?id=213687 to investigate
        further.

        * heap/HeapCell.cpp:
        (WTF::printInternal):
        * heap/HeapCell.h:
        (JSC::isJSCellKind):
        (JSC::mayHaveIndexingHeader):
        (JSC::hasInteriorPointers): Deleted.
        * heap/HeapUtil.h:
        (JSC::HeapUtil::findGCObjectPointersForMarking):
        * heap/SlotVisitor.cpp:
        (JSC::SlotVisitor::appendJSCellOrAuxiliary):
        * runtime/VM.cpp:
        (JSC::VM::VM):

2020-06-28  Geoffrey Garen  <ggaren@apple.com>

        Rename initializeThreading to initialize
        https://bugs.webkit.org/show_bug.cgi?id=213674

        Reviewed by Mark Lam.

        * API/JSClassRef.cpp:
        * API/JSContextRef.cpp:
        (JSContextGroupCreate):
        (JSGlobalContextCreate):
        (JSGlobalContextCreateInGroup):
        * API/JSObjectRef.cpp:
        (JSClassCreate):
        * API/JSStringRef.cpp:
        (JSStringCreateWithCharacters):
        (JSStringCreateWithUTF8CString):
        (JSStringCreateWithCharactersNoCopy):
        * API/JSStringRefCF.cpp:
        (JSStringCreateWithCFString):
        * API/tests/CompareAndSwapTest.cpp:
        (testCompareAndSwap):
        * API/tests/ExecutionTimeLimitTest.cpp:
        (testExecutionTimeLimit):
        * API/tests/FunctionOverridesTest.cpp:
        (testFunctionOverrides):
        * API/tests/MultithreadedMultiVMExecutionTest.cpp:
        (startMultithreadedMultiVMExecutionTest):
        * API/tests/PingPongStackOverflowTest.cpp:
        (testPingPongStackOverflow):
        * JavaScriptCore.order:
        * assembler/testmasm.cpp:
        (JSC::run):
        * b3/air/testair.cpp:
        (main):
        * b3/testb3_1.cpp:
        (main):
        * dfg/testdfg.cpp:
        (main):
        * dynbench.cpp:
        (main):
        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::singleton):
        * jsc.cpp:
        (main):
        (jscmain):
        * runtime/InitializeThreading.cpp:
        (JSC::initialize):
        (JSC::initializeThreading): Deleted.
        * runtime/InitializeThreading.h:
        * runtime/JSCConfig.h:
        * shell/playstation/TestShell.cpp:
        (setupTestRun):
        * testRegExp.cpp:
        (main):

2020-06-27  Saam Barati  <sbarati@apple.com>

        BytecodeBasicBlock::addSuccessor should check if the  successor already exists
        https://bugs.webkit.org/show_bug.cgi?id=213670

        Reviewed by Yusuke Suzuki.

        It makes it nicer for algorithms using BytecodeGraph to not have to consider
        whether or not there are duplicates in the successor list. Also, because of
        this, bytecode liveness was doing extra work since it walked the successor list,
        including any duplicates in it.

        * bytecode/BytecodeBasicBlock.h:
        (JSC::BytecodeBasicBlock::addSuccessor):

2020-06-27  Saam Barati  <sbarati@apple.com>

        Change bytecode dumping to dump the bytecode control flow graph
        https://bugs.webkit.org/show_bug.cgi?id=213669

        Reviewed by Yusuke Suzuki.

        This makes the bytecode control flow graphs much easier to understand, and
        puts bytecode dumping in more in line with how we dump other IRs.
        
        The new dumps look like this:
        ```
        foo#Ahf63N:[0x1035bc120->0x1035e5100, NoneFunctionCall, 36]: 13 instructions (0 16-bit instructions, 0 32-bit instructions, 1 instructions with metadata); 156 bytes (120 metadata bytes); 2 parameter(s); 8 callee register(s); 6 variable(s); scope at loc4
        
        bb#1
        [   0] enter              
        [   1] get_scope          loc4
        [   3] mov                loc5, loc4
        [   6] check_traps        
        [   7] mov                loc6, <JSValue()>(const0)
        [  10] mov                loc6, Undefined(const1)
        [  13] mod                loc7, arg1, Int32: 2(const2)
        [  17] jfalse             loc7, 8(->25)
        Successors: [ #3 #2 ]
        
        bb#2
        [  20] mov                loc6, Int32: 42(const3)
        [  23] jmp                5(->28)
        Successors: [ #4 ]
        
        bb#3
        [  25] mov                loc6, Int32: 77(const4)
        Successors: [ #4 ]
        
        bb#4
        [  28] add                loc7, arg1, loc6, OperandTypes(126, 126)
        [  34] ret                loc7
        Successors: [ ]
        ```

        * bytecode/BytecodeDumper.cpp:
        (JSC::dumpHeader):
        (JSC::dumpFooter):
        (JSC::CodeBlockBytecodeDumper<Block>::dumpBlock):
        (JSC::CodeBlockBytecodeDumper<Block>::dumpGraph):
        * bytecode/BytecodeDumper.h:
        * bytecode/BytecodeGraph.h:
        (JSC::BytecodeGraph::dump):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dumpBytecode):

2020-06-27  Stephan Szabo  <stephan.szabo@sony.com>

        [PlayStation] Update test runner for changes to Options and signing
        https://bugs.webkit.org/show_bug.cgi?id=213650

        Reviewed by Don Olmstead.

        * shell/playstation/Initializer.cpp: Load ICU library
        * shell/playstation/TestShell.cpp: Update between test options reset

2020-06-26  Geoffrey Garen  <ggaren@apple.com>

        Initializing the main thread should initialize the main run loop
        https://bugs.webkit.org/show_bug.cgi?id=213637

        Reviewed by Anders Carlsson.

        * JavaScriptCore.order: Removed some defunct stuff.
        * shell/playstation/TestShell.cpp:
        (setupTestRun): Merged initializeThreading call with
        initializeMainThread call because initializeMainThread is a superset.

2020-06-25  Yusuke Suzuki  <ysuzuki@apple.com>

        REGRESSION(r263035): stress/get-prototype-of.js broken on s390x
        https://bugs.webkit.org/show_bug.cgi?id=213307

        Reviewed by Ross Kirsling.

        Structure::m_outOfLineTypeFlags is uint16_t. If we access this field as 32bit field, we have different value in big endian architectures.
        Since we do not have half-size-load branch instructions, we should load this uint16_t value via `loadh` (which zero-extends the loaded value)
        and perform branch onto that value.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadPrototype):
        * llint/LowLevelInterpreter64.asm:

2020-06-25  Mark Lam  <mark.lam@apple.com>

        JSCell constructor needs to ensure that the passed in structure is still alive.
        https://bugs.webkit.org/show_bug.cgi?id=213593
        <rdar://problem/64597573>

        Reviewed by Yusuke Suzuki.

        Note that in the initializer list of the `JSCell(VM&, Structure*)` constructor,
        we are only using values inside the passed in structure but not necessarily the
        structure pointer itself.  All these values are contained inside Structure::m_blob.
        Note also that this constructor is an inline function.  Hence, the compiler may
        choose to pre-compute the address of structure->m_blob and discard the structure
        pointer itself.

        Here's an example:

            0x10317a21e <+1054>: movq   0x18(%rsp), %rdx  // rdx:vm = &vm
            0x10317a223 <+1059>: addq   $0x8, %r13        // r13 = &structure.m_blob  <== pre-compute address of m_blob !!!
                                                          // r13 previously contained the structure pointer.
                                                          // Now, there's no more references to the structure base address.

            0x10317a227 <+1063>: leaq   0x48(%rdx), %rdi  // arg0:heap = &vm.heap
            0x10317a22b <+1067>: movl   $0x10, %edx       // arg2:size = 16.
            0x10317a230 <+1072>: movq   %rdi, 0x28(%rsp)
            0x10317a235 <+1077>: xorl   %esi, %esi        // arg1:deferralContext = 0
            0x10317a237 <+1079>: callq  0x10317ae60       // call JSC::allocateCell<JSC::JSArray>  <== Can GC here !!!

            0x10317a23c <+1084>: movq   %rax, %rbx        // rbx:cell = rax:allocation result.
            ...
            0x10317a253 <+1107>: movl   (%r13), %eax      // eax = m_blob.structureID  <== Use pre-computed m_blob address here.

        There's a chance that the GC may run while allocating this cell.  In the event
        that the structure is newly instantiated just before calling this constructor, 
        there may not be any other references to it.  As a result, the structure may get
        collected before the cell is even constructed.  To avoid this possibility, we need
        to ensure that the structure pointer is still alive by the time this constructor
        is called.

        I am not committing any tests for this issue because the test cases relies on:

        1. Manually forcing an O3 ASan Release build.

        2. Not running jsc with --useDollarVM=1.  Note: the JSC test harness automatically
           adds --useDollarVM=1 for all test runs.

        3. Memory being allocated in a specific order.  The recent Bitmap FreeList change
           enabled this issue to manifest.  The old linked list FreeList implementation
           would have hidden the issue.

        4. Adding some logging code can also make the issue stop manifesting.

        In short, the test cases will not detect any regression even if we commit them
        because the existing automatic regression test runs will not have the necessary
        conditions for reproducing the issue.  The tests are also somewhat fragile where
        any changes in memory layout may stop the issue from manifesting in an observable
        way.

        * runtime/JSCellInlines.h:
        (JSC::JSCell::JSCell):

2020-06-24  Ross Kirsling  <ross.kirsling@sony.com>

        [Intl] Disprefer using ICU enums directly as instance variables
        https://bugs.webkit.org/show_bug.cgi?id=213587

        Reviewed by Yusuke Suzuki.

        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        (JSC::IntlPluralRules::resolvedOptions const):
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        (JSC::IntlRelativeTimeFormat::styleString): Renamed from JSC::styleString.
        (JSC::IntlRelativeTimeFormat::resolvedOptions const):
        (JSC::numericString): Deleted.
        * runtime/IntlRelativeTimeFormat.h:

2020-06-24  Caitlin Potter  <caitp@igalia.com>

        [JSC] handle Put/DefinePrivateField in resetPutByID
        https://bugs.webkit.org/show_bug.cgi?id=213583

        Reviewed by Yusuke Suzuki.

        r262613 extends and uses PutByValDirect to support updating and defining private fields, in order to reuse
        the IC machinery. The necessary resetPutByID change was erroneously omitted, and is presented here.

        * jit/Repatch.cpp:
        (JSC::resetPutByID):

2020-06-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] llintTrue / jitTrue can encounter native functions
        https://bugs.webkit.org/show_bug.cgi?id=213442
        <rdar://problem/64257914>

        Reviewed by Mark Lam.

        If the CallFrame is for native function, associated CodeBlock is nullptr.
        This patch fixes this case to handle it gracefully.

        * tools/JSDollarVM.cpp:
        (JSC::CallerFrameJITTypeFunctor::CallerFrameJITTypeFunctor):
        (JSC::CallerFrameJITTypeFunctor::operator() const):
        (JSC::functionBaselineJITTrue):
        (JSC::JSDollarVM::finishCreation):
        (JSC::functionJITTrue): Deleted.

2020-06-24  Umar Iqbal  <uiqbal@apple.com>

        We should resurrect the older patch that collects some statistics of web API calls
        https://bugs.webkit.org/show_bug.cgi?id=213319

        Reviewed by Brent Fulgham.

        + Enabled ENABLE_WEB_API_STATISTICS flag

        * Configurations/FeatureDefines.xcconfig:

2020-06-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        Add DFG/FTL fast path for GetPrototypeOf based on OverridesGetPrototype flag
        https://bugs.webkit.org/show_bug.cgi?id=213191

        Reviewed by Yusuke Suzuki.

        This patch:

        1. Introduces `loadInlineOffset` LLInt macro (64-bit only) and utilizes it in
           `get_prototype_of` since we assert that `knownPolyProtoOffset` is an inline offset.

        2. Brings baseline JIT fast path to 32-bit builds, progressing `super-getter.js`
           microbenchmark by a factor of 10 (w/o DFG).

        3. Adds GetPrototypeOf DFG/FTL fast paths that leverage OverridesGetPrototype type
           info flag, advancing provided rare objects microbenchmark by ~46% (~37% w/o FTL).
           Also, cleans up existing DFG fast path by using AssemblyHelpers::loadValue().

        4. Extracts AssemblyHelpers::emitLoadPrototype() and uses it in baseline JIT, DFG, and
           InstanceOfGeneric access case. With this change, `instanceof` access case handles all
           [[GetPrototypeOf]] overrides (before: only Proxy objects), which is more correct, yet
           not observable enough to provide a test case. `instanceof` microbenchmarks are neutral.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateWithGuard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetPrototypeOf):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetPrototypeOf):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadPrototype):
        * jit/AssemblyHelpers.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_prototype_of):
        * llint/LowLevelInterpreter64.asm:

2020-06-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Clobberize misses `write(Heap)` report in some nodes
        https://bugs.webkit.org/show_bug.cgi?id=213525
        <rdar://problem/64642067>

        Reviewed by Mark Lam.

        In some DFG nodes, clobberize phase misses `clobberTopFunctor` call while it is `write(Heap)`,
        which confuses clobberizing validation.

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

2020-06-23  Mark Lam  <mark.lam@apple.com>

        Handle string overflow in DFG graph dump while validating AI.
        https://bugs.webkit.org/show_bug.cgi?id=213524
        <rdar://problem/64635620>

        Not reviewed.

        Applying refinement suggested by Darin in https://bugs.webkit.org/show_bug.cgi?id=213524#c3.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):

2020-06-23  Mark Lam  <mark.lam@apple.com>

        Handle string overflow in DFG graph dump while validating AI.
        https://bugs.webkit.org/show_bug.cgi?id=213524
        <rdar://problem/64635620>

        Reviewed by Saam Barati.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::validateAIState):

2020-06-23  Devin Rousso  <drousso@apple.com>

        Keyframe animation doesn't 't show up in the Animations timeline
        https://bugs.webkit.org/show_bug.cgi?id=213441

        Reviewed by Brian Burg.

        * inspector/protocol/Animation.json:
        An `interationCount` of `Infinity` is not JSON serializable, so represent it as `-1` instead.

2020-06-22  Saam Barati  <sbarati@apple.com>

        Attempt to fix watchOS simulator build.

        * assembler/FastJITPermissions.h:
        (threadSelfRestrictRWXToRW):
        (threadSelfRestrictRWXToRX):

2020-06-22  Saam Barati  <sbarati@apple.com>

        Allow building JavaScriptCore Mac+arm64 in public SDK build
        https://bugs.webkit.org/show_bug.cgi?id=213472

        Reviewed by Sam Weinig.

        We used to only builld code for fast permission switching when using the
        Apple internal SDK. However, with arm64 on macOS, this is no longer a viable
        implementation strategy.
        
        This patch makes it so we can build JSC on macOS+arm64 using the public Xcode
        SDK.
        
        - ENABLE_FAST_JIT_PERMISSIONS is removed. We now use runtime checks instead.
        - In the new suite of OS betas, pthreads has added API for fast permissions
          switching. We now use this API instead of using the non-public SDK found in
          the kernel headers.
        - We fall back to the separated W/X heaps when fast permissions checking is
          not supported. This all happens at runtime.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::fillNops):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::fillNops):
        * assembler/FastJITPermissions.h: Added.
        (useFastJITPermissions):
        (threadSelfRestrictRWXToRW):
        (threadSelfRestrictRWXToRX):
        (fastJITPermissionsIsSupported):
        * assembler/LinkBuffer.cpp:
        (JSC::memcpyWrapper):
        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::fillNops):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::link):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::link):
        * jit/ExecutableAllocator.cpp:
        (JSC::initializeJITPageReservation):
        * jit/ExecutableAllocator.h:
        (JSC::performJITMemcpy):
        (JSC::useFastJITPermissions): Deleted.
        * runtime/JSCConfig.h:
        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        * runtime/OptionsList.h:

2020-06-22  Tim Horton  <timothy_horton@apple.com>

        Disable the JS JIT when running in a translated process
        https://bugs.webkit.org/show_bug.cgi?id=213478

        Reviewed by Saam Barati.

        * runtime/Options.cpp:
        (JSC::Options::recomputeDependentOptions):
        Based on our performance experiements, disable the JavaScript JIT
        (but not the regular expression, DOM, or Wasm JIT) when running
        in a translated process.

2020-06-22  Tim Horton  <timothy_horton@apple.com>

        Update macOS version macros
        https://bugs.webkit.org/show_bug.cgi?id=213484

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig:

2020-06-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Check Gigacage usage before launching VM
        https://bugs.webkit.org/show_bug.cgi?id=213410

        Reviewed by Mark Lam.

        Since VM allocates JSBigInt from Gigacage, it is possible that VM creation fails when Gigacage is exhausted.
        As a work-around for internal testing, we insert ad-hoc Gigacage usage check before launching a new agent.
        If 80% of Gigacage is used, we fail to launch a new VM gracefully.

        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):
        * jsc.cpp:
        (functionDollarAgentStart):

2020-06-19  James Darpinian  <jdarpinian@chromium.org>

        Typed array constructor behaves differently when length is not passed or when undefined is passed
        https://bugs.webkit.org/show_bug.cgi?id=184232

        Reviewed by Yusuke Suzuki.

        Passing undefined for length should have the same effect as omitting the argument. It was being
        treated as 0 instead.

        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayView):

2020-06-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Attempt to reduce timeout failures on Apple Watch Series 3
        https://bugs.webkit.org/show_bug.cgi?id=213419

        Reviewed by Mark Lam.

        * tools/JSDollarVM.cpp:
        (JSC::functionUseJIT):
        (JSC::JSDollarVM::finishCreation):

2020-06-19  Mark Lam  <mark.lam@apple.com>

        toString of String doesn't check integrity of structureID in one path.
        https://bugs.webkit.org/show_bug.cgi?id=213338

        Reviewed by Saam Barati.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToString):

2020-06-19  Saam Barati  <sbarati@apple.com>

        Have a memory monitor thread in jsc shell when running tests using --memory-limited
        https://bugs.webkit.org/show_bug.cgi?id=213389

        Reviewed by Mark Lam.

        When testing on iOS, there are times high memory usage from a JSC test
        will jetsam our entire test runner. This makes it so we don't get any test
        results from that test run, which can make it difficult to track testing
        results.
        
        This patch introduces an optional memory monitoring thread to the JSC
        shell. It's a best effort approach. If memory usage exceeds the passed
        in threshold, we crash the process. Similar to how the timeout mechanism
        works. On Cocoa platforms, we also perform this check in the low memory 
        warning handler.
        
        Currently, we use this feature when running JSC stress tests in
        "--memory-limited" mode.

        * jsc.cpp:
        (crashIfExceedingMemoryLimit):
        (startMemoryMonitoringThreadIfNeeded):
        (jscmain):

2020-06-19  Mark Lam  <mark.lam@apple.com>

        Make $vm properties non-configurable, non-enumerable, and non-writable.
        https://bugs.webkit.org/show_bug.cgi?id=213395

        Reviewed by Saam Barati and Yusuke Suzuki.

        $vm provides functions for test development and VM debugging.  There's no reason
        for them to be configurable, enumerable, and writable.

        We particularly don't want them to be enumerable as this can trip up some fuzzers.
        Fuzzers should not be fuzzing the $vm object which doesn't exist in real world
        uses of JavaScriptCore.

        * tools/JSDollarVM.cpp:
        (JSC::JSDollarVM::finishCreation):
        (JSC::JSDollarVM::addFunction):
        (JSC::JSDollarVM::addConstructibleFunction):

2020-06-19  Tuomas Karkkainen  <tuomas.webkit@apple.com>

        functionCpuClflush checks that the second argument is Int32 but it actually expects it to be UInt32
        https://bugs.webkit.org/show_bug.cgi?id=213388

        Reviewed by Saam Barati.

        This changes the check from isInt32() to isUInt32() so that the logic is consistent.

        * tools/JSDollarVM.cpp:

2020-06-18  Mark Lam  <mark.lam@apple.com>

        Unify Bitmap math loops in MarkedBlock::Handle::specializedSweep().
        https://bugs.webkit.org/show_bug.cgi?id=213345

        Reviewed by Robin Morisset and Saam Barati.

        This change appears to be performance neutral.  However, we'll take the change
        because we know that it does less work, and the new way of expressing the Bitmap
        math in MarkedBlock::Handle::specializedSweep() does appear to be easier to
        understand than the old code.

        Also addressed feedback from Robin and Saam in https://bugs.webkit.org/show_bug.cgi?id=213071.

        Changes made:

        1. Use the new Bitmap::words() API to get direct access to the underlying bits
           storage.  With this, we can do the merging of the marked and newlyAllocated
           bits with a single pass looping thru the bitmap words.

        2. In MarkedBlock::Handle::specializedSweep()'s Bitmap free list code, moved the
           implementation of handleDeadCells lambda down to the call to freeAtoms.forEachSetBit()
           because this is the only place it is used.

        3. Fixed MarkedBlock::Handle::specializedSweep()'s Bitmap free list code to
           handle the dead cells unconditionally.  This condition check was wrongly
           adapted from the linked list implementation where handleDeadCell() was called
           in 2 places depending on the destruction mode.  With the Bitmap free list,
           there is only once place to handle the dead cells, and it should be executed
           unconditionally.

           This fixes a bug where the FreeList::originalSize() never gets computed if the
           cells in the block does not need destruction.

        4. Renamed FreeList::bitmapRows() to FreeList::bitmapRowsMinusOne().
           Renamed FreeList::offsetOfBitmapRows() to FreeList::offsetOfBitmapRowsMinusOne().

        5. Also fixed some typos in comments.

        * heap/FreeList.h:
        (JSC::FreeList::bitmapIsEmpty const):
        (JSC::FreeList::offsetOfBitmapRowsMinusOne):
        (JSC::FreeList::bitmapRowsMinusOne const):
        (JSC::FreeList::offsetOfBitmapRows): Deleted.
        (JSC::FreeList::bitmapRows const): Deleted.
        * heap/FreeListInlines.h:
        (JSC::FreeList::allocate):
        (JSC::FreeList::forEach const):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::Handle::specializedSweep):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):

2020-06-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Remove dead non-ICU locale Date code since we are always using ICU version
        https://bugs.webkit.org/show_bug.cgi?id=213362

        Reviewed by Ross Kirsling.

        There are old non-ICU version of Date locale code. But this is now dead code since we are always using ICU version,
        which is invoked from builtin JS DatePrototype.js. We should remove these dead code.

        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::finishCreation):
        (): Deleted.
        (JSC::styleFromArgString): Deleted.
        (JSC::formatLocaleDate): Deleted.
        (JSC::dateProtoFuncToLocaleString): Deleted.
        (JSC::dateProtoFuncToLocaleDateString): Deleted.
        (JSC::dateProtoFuncToLocaleTimeString): Deleted.

2020-06-18  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, address Darin's feedback on r263227.

        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::UNumberFormatDeleter::operator() const):
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        (JSC::IntlRelativeTimeFormat::formatToParts const):
        * runtime/IntlRelativeTimeFormat.h:
        Keep ownership over our UNumberFormat instance after all,
        to avoid relying on behavior ICU isn't explicitly guaranteeing.

2020-06-18  Ross Kirsling  <ross.kirsling@sony.com>

        [Intl] Enable RelativeTimeFormat and Locale by default
        https://bugs.webkit.org/show_bug.cgi?id=213324

        Reviewed by Yusuke Suzuki.

        * runtime/IntlObject.cpp:
        (JSC::createDateTimeFormatConstructor):
        (JSC::createLocaleConstructor):
        (JSC::createNumberFormatConstructor):
        (JSC::createRelativeTimeFormatConstructor):
        (JSC::IntlObject::finishCreation):
        Unconditionalize creation of RelativeTimeFormat and Locale constructors.

        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        (JSC::IntlRelativeTimeFormat::formatToParts const):
        (JSC::IntlRelativeTimeFormat::UNumberFormatDeleter::operator() const): Deleted.
        * runtime/IntlRelativeTimeFormat.h:
        Fix an actual bug -- URelativeDateTimeFormatter *adopts* the UNumberFormat it's instantiated with,
        so we can't keep a unique_ptr to it.

        * runtime/OptionsList.h:
        Remove feature flags.

2020-06-18  Alexey Shvayka  <shvaikalesh@gmail.com>

        Promise built-in functions should be anonymous non-constructors
        https://bugs.webkit.org/show_bug.cgi?id=213317

        Reviewed by Darin Adler.

        This patch makes userland-exposed Promise built-in functions
        non-constructors and sets their "name" properties to empty strings
        as per spec [1], aligning JSC with V8 and SpiderMonkey.

        @createResolvingFunctionsWithoutPromise change is covered by test262's
        async-generator/yield-thenable-create-resolving-functions-*.js cases.

        Promise microbenchmarks are neutral. Promise constructors bytecode is
        unchanged, while @createResolvingFunctions* bytecode is reduced by 2
        instructions.

        [1]: https://tc39.es/ecma262/#sec-ecmascript-standard-built-in-objects

        * builtins/PromiseConstructor.js:
        (nakedConstructor.Promise):
        (nakedConstructor.InternalPromise):
        * builtins/PromiseOperations.js:
        (globalPrivate.newPromiseCapabilitySlow):
        (globalPrivate.createResolvingFunctions):
        (globalPrivate.createResolvingFunctionsWithoutPromise):
        (globalPrivate.createResolvingFunctions.resolve): Deleted.
        (globalPrivate.createResolvingFunctions.reject): Deleted.
        (resolve): Deleted.
        (reject): Deleted.
        * builtins/PromisePrototype.js:
        (globalPrivate.getThenFinally):
        (globalPrivate.getCatchFinally):
        (valueThunk): Deleted.
        (thrower): Deleted.

2020-06-18  Alexey Shvayka  <shvaikalesh@gmail.com>

        TypedArray.prototype.set is incorrect with primitives
        https://bugs.webkit.org/show_bug.cgi?id=212730

        Reviewed by Yusuke Suzuki.

        This change implements step 14 of %TypedArray%.prototype.set [1],
        which coerces primitives to objects instead of throwing an error,
        aligning JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-%typedarray%.prototype.set-array-offset

        * runtime/JSGenericTypedArrayViewPrototypeFunctions.h:
        (JSC::genericTypedArrayViewProtoFuncSet):

2020-06-17  Mark Lam  <mark.lam@apple.com>

        Replace JSC::FreeList linked list with a Bitmap.
        https://bugs.webkit.org/show_bug.cgi?id=213071

        Reviewed by Filip Pizlo.

        Implement an alternative to the linked list FreeList.  This alternative uses
        a Bitmap to record which atom in the block is available for allocation.

        The intuition here is that allocation using the Bitmap implementation will do:
            2 loads - m_currentRowBitmap, m_currentMarkedBlockRowAddress
            1 store - m_currentRowBitmap

        whereas the linked list implementation will do:
            3 loads - m_scrambledHead, m_secret, result->scrambledNext
            1 store - m_scrambledHead

        and result->scrambledNext is from a different region of code and therefore not
        in the same cache line.

        The downside of the Bitmap implementation is that it uses more instructions.

        This change is currently only enabled for x86_64, which shows about a 0.8%
        progression on Speedometer 2.

        It appears to be about a 1% regression on ARM64E.  Hence, for now, we keep the
        linked list implementation for ARM64 builds.

        This is how the Bitmap FreeList works:

        1. The Bitmap implementation only replaces the linked list implementation.  It
           does not replace the bump allocator.

        2. The Bitmap allocator keeps a m_bitmap that is initialized in
           MarkedBlock::Handle::specializedSweep() to have a bit set for each atom
           location that is available for allocation (i.e. is free).  Note that a cell
           is usually allocated using more than 1 atom.  Only the bit corresponding to
           the first atom (in that cell length range of free atoms) will be set.

           This is consistent with how bits in MarkedBlock::Footer::m_marks and
           MarkedBlock::Footer::m_newlyAllocated are set i.e. only the bit for the first
           atom in the cell can be set.

        3. The allocation algorithm thinks of the MarkedBlock as consisting of rows
           of atoms, where the number of atoms in a row equals the number of bits in
           a AtomsBitmap::Word.  On 64-bit CPUs, this would be 64.

           We will start allocating from the last (highest numbered) row down to the
           first (row 0).  As we allocate, we will only update m_currentRowIndex and
           m_currentRowBitmap.  m_bitmap will not be updated.  This is so in order to
           reduce the number of instructions executed during an allocation.

           When m_currentRowIndex points to N, the AtomsBitmap::Word for row N in
           m_bitmap will have been copied into m_currentRowBitmap.  This is the row
           that we will be allocating from until the row is exhausted.

           This is how we know whether an atom is available for allocation or not:
             i. Atoms in any rows above m_currentRowIndex are guaranteed to be
                allocated already (because we allocate downwards), and hence, are not
                available.
            ii. For row m_currentRowIndex, m_currentRowBitmap is the source of truth
                on which atoms in the row are available for allocation.
           iii. For rows below m_currentRowIndex, m_bitmap is the source of truth on
                which atoms are available for allocation.

           When m_currentRowIndex reaches 0, the info in m_bitmap is completely
           obsoleted, and m_currentRowBitmap holds the availability info for row 0.
           When both m_currentRowIndex and m_currentRowBitmap are 0, then we have
           completely exhausted the block and no more atoms are available for
           allocation.

        4. Allocation happens in 3 paths: fast, middle, slow.

           The fast path checks m_currentRowBitmap.  If it's not 0, then we compute the
           bit number of the lowest set bit in it.  That bit number will be used together
           with m_currentMarkedBlockRowAddress to compute the address of the atom
           location available for allocation.  m_currentRowBitmap will be updated to clear
           the bit for the atom that has just ben allocated.

           If m_currentRowBitmap is 0, then we'll go to the middle path.

           The middle path checks m_currentRowIndex to see if we have more rows to allocate
           from.  For each m_currentRowIndex, we check its corresponding AtomsBitmap::Word
           in m_bitmap.  If the word is non-zero, we copy it to m_currentRowBitmap and
           jump to the fast path to do the allocation.  The middle path will update
           m_currentRowIndex to point to the current row we're allocating from.

           If we have decremented m_currentRowIndex down to 0 but still can't find a
           non-zero AtomsBitmap::Word in m_bitmap, then the block has been exhausted, and
           we'll go to the slow path.

           The slow path is analogous to the old slow path i.e. we try to refill the
           LocalAllocator with a new MarkedBlock.

        5. On the layout of fields in FreeList (see changes in FreeList.h), we try to
           preserve the positions of the bump allocator fields.  The only change we made
           there is in the location of m_cellSize.  It is now moved up next to m_remaining,
           and m_originalSize is moved down.  This is because m_originalSize is only
           accessed in the slow path, and m_cellSize is accessed in the bump allocation
           path.

           Next, we try to put Bitmap allocation fields where the linked list fields
           would have been.  The one bit of trickiness is that we'll put
           m_currentMarkedBlockRowAddress in a union with m_payloadEnd.  This is because
           m_payloadEnd is only used in the bump allocation path.  If m_remaining is 0,
           then we can reuse this location for m_currentMarkedBlockRowAddress.

           With this, we would have 4 bytes of padding after m_currentRowIndex.  For
           compactness, we put m_originalSize there in that space.  For builds that use
           the linked list implementation, m_originalSize will be located below after
           m_cellSize.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::allocateHeapCell):
        * heap/FreeList.cpp:
        (JSC::FreeList::clear):
        (JSC::FreeList::initializeAtomsBitmap):
        (JSC::FreeList::initializeBump):
        (JSC::FreeList::contains const):
        (JSC::FreeList::dump const):
        * heap/FreeList.h:
        (JSC::FreeList::bitmapIsEmpty const):
        (JSC::FreeList::allocationWillFail const):
        (JSC::FreeList::offsetOfCurrentRowBitmap):
        (JSC::FreeList::offsetOfBitmapRows):
        (JSC::FreeList::offsetOfCurrentRowIndex):
        (JSC::FreeList::offsetOfCurrentMarkedBlockRowAddress):
        (JSC::FreeList::offsetOfRemaining):
        (JSC::FreeList::atomsBitmap):
        (JSC::FreeList::bitmapRows const):
        (JSC::FreeList::offsetOfOriginalSize): Deleted.
        * heap/FreeListInlines.h:
        (JSC::FreeList::allocate):
        (JSC::FreeList::forEach const):
        * heap/LocalAllocator.cpp:
        (JSC::LocalAllocator::isFreeListedCell const):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::Handle::atomAt const):
        * heap/MarkedBlockInlines.h:
        (JSC::MarkedBlock::Handle::specializedSweep):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::emitAllocateWithNonNullAllocator):

2020-06-17  Mark Lam  <mark.lam@apple.com>

        StructureIDTable::validate() doesn't work when compiled with GCC.
        https://bugs.webkit.org/show_bug.cgi?id=213302
        <rdar://problem/64452172>

        Reviewed by Yusuke Suzuki.

        I was previously using ensureStillAliveHere() to force the validation load to
        not be elided.  However, this is not how ensureStillAliveHere() works.  The proper
        way to force the load is to use a volatile pointer instead, which is applied in
        this patch.

        With Clang, the ensureStillAliveHere() happened to do what I expected, but with
        GCC it did not.  The compiler is at liberty to elide the load because there is
        no memory clobbering operation between the load and the call to
        ensureStillAliveHere().  Switching to using the volatile pointer solution.

        * runtime/StructureIDTable.h:
        (JSC::StructureIDTable::validate):

2020-06-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Freeze JSBigInt when setting it as a constant in AI
        https://bugs.webkit.org/show_bug.cgi?id=213310
        <rdar://problem/64450410>

        Reviewed by Mark Lam.

        JSCells should be explicitly frozen via DFG::Graph::freeze or DFG::Graph::freezeStrong. And heap JSBigInt is JSCell.
        We should freeze it before setting it as a parameter of setConstant in AI. We use DFG::Graph::freeze since we know
        that this is coming from somewhere in DFG graph: this ToNumeric node itself is not newly producing this JSBigInt.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-06-17  Keith Miller  <keith_miller@apple.com>

        $vm.haveABadTime/isHavingABadTime should work with non-globalObject parameters
        https://bugs.webkit.org/show_bug.cgi?id=213304

        Reviewed by Mark Lam.

        Previously, $vm.haveABadTime would crash if passed a
        non-globalObject object as the first parameter because it was
        missing a `return` in front the error handling case. This patch
        resolves that issue but also extends the semantics of
        haveABadTime/isHavingABadTime to either use the global object of
        the first parameter even if it's not a JSGlobalObject. If no
        argument is passed, haveABadTime/isHavingABadTime instead use the
        global object of the callee.

        * tools/JSDollarVM.cpp:
        (JSC::functionHaveABadTime):
        (JSC::functionIsHavingABadTime):

2020-06-17  Mark Lam  <mark.lam@apple.com>

        Gardening: move some unused data inside ENABLE(JIT) to unbreak the CLoop build.
        https://bugs.webkit.org/show_bug.cgi?id=213255

        Not reviewed.

        * assembler/testmasm.cpp:

2020-06-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, avoid node access in link-task
        https://bugs.webkit.org/show_bug.cgi?id=213266
        <rdar://problem/64453001>

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckJSCast):

2020-06-17  Mark Lam  <mark.lam@apple.com>

        Add a shiftAndAdd() emitter in AssemblyHelpers.
        https://bugs.webkit.org/show_bug.cgi?id=213255

        Reviewed by Michael Saboff.

        void shiftAndAdd(RegisterID base, RegisterID index, uint8_t shift, RegisterID dest, Optional<RegisterID> = { });

        Emits code to compute: dest = base + index << shift.

        * assembler/testmasm.cpp:
        (doubleOperands):
        (floatOperands):
        (int32Operands):
        (int64Operands):
        (JSC::testShiftAndAdd):
        (JSC::run):
        (JSC::doubleOperands): Deleted.
        (JSC::floatOperands): Deleted.
        (JSC::int32Operands): Deleted.
        (JSC::int64Operands): Deleted.
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::shiftAndAdd):

2020-06-17  Michael Saboff  <msaboff@apple.com>

        [Wasm] Reduce the amount of memory used by the Air register coloring allocator
        https://bugs.webkit.org/show_bug.cgi?id=212106

        Reviewed by Yusuke Suzuki.

        Changed InterferenceEdge to be a templated class so we can instantiate an unsigned
        short version to cut memory in half for code that has less than 2^16 temps.
        Through instrumentation, my testing showed that almost all compilations use the
        16bit implementation.  Although this change is for all B3/Air compilations at O2,
        Wasm compilations are usally larger and therefore get the greatest benefit.

        This allowed increasing the default value for the option webAssemblyBBQFallbackSize,
        with a small increase in memory usage.

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * runtime/OptionsList.h:

2020-06-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Check NullSetterFunction under strict-mode context since structure / PropertyCondition are unaware of this
        https://bugs.webkit.org/show_bug.cgi?id=213266

        Reviewed by Mark Lam.

        Our PropertyCondition is tracking the shape of Structure. This is enough for IC except for one case: throwing an error when invoking null setters in strict code.

            "use strict";
            var object = { get value() { return 42; } }
            object.value = 42;

        In the above case, we need to throw an error. Let's consider the following scenario.

            1. Object has valid setter.
            2. IC is buffering OPC which includes (1)'s object in [[Prototype]] hit.
            3. IC commits buffered AccessCase with OPC. And PropertyCondition says Object + setter-offset => Presence.
            4. Object deletes its setter.
            5. Just after (4), DFG concurrently reads buffered committed OPCs.
            6. DFG see that PropertyCondition is valid even after (4) since accessor property does exist.
            7. Set up DFG sequence `GetSetter, Call`.
            8. DFG calls null-setter under strict code, which is not assumed to be called.

        In this patch, we insert NullSetterFunction check before setter invocation under strict mode. In IC, if we see NullSetterFunction,
        we replace the calling target with special function which throws an error. In DFG / FTL, we emit `CheckNotJSCast` DFG node which
        ensures that this setter is not null setter.

        In IC code, we already have null-setter checking code before. So this change does not have any impact in terms of performance.
        In DFG / FTL code, we only insert this check when we do not inline this setter. This is because inlining emits `CheckCell` anyway so
        we can know that this is not NullSetterFunction. And this means that DFG Call opcode exists after CheckNotJSCast. Since Call opcode
        loads the fields of call target anyway, this also does not affect on performance.

        * bytecode/AccessCase.cpp:
        (JSC::AccessCase::generateImpl):
        * bytecode/PolymorphicAccess.cpp:
        (JSC::PolymorphicAccess::regenerate):
        * bytecode/PolymorphicAccess.h:
        (JSC::AccessGenerationState::AccessGenerationState):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::addAccessCase):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handlePutById):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasClassInfo const):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckJSCast):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureAbstractValue.cpp:
        (JSC::DFG::StructureAbstractValue::isNotSubClassOf const):
        * dfg/DFGStructureAbstractValue.h:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckJSCast):
        * jit/Repatch.cpp:
        (JSC::tryCacheGetBy):
        (JSC::tryCacheArrayGetByVal):
        (JSC::tryCachePutByID):
        (JSC::tryCacheDeleteBy):
        (JSC::tryCacheInByID):
        (JSC::tryCacheInstanceOf):
        * jit/ThunkGenerators.cpp:
        (JSC::virtualThunkFor):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        * runtime/JSCast.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::nullSetterStrictFunction const):
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/NullSetterFunction.cpp:
        (JSC::NullSetterFunctionInternal::callThrowError):
        (JSC::NullSetterFunction::NullSetterFunction):
        * runtime/NullSetterFunction.h:

2020-06-16  Mark Lam  <mark.lam@apple.com>

        Make Options::useJIT() be the canonical source of truth on whether we should use the JIT.
        https://bugs.webkit.org/show_bug.cgi?id=212556
        <rdar://problem/63780436>

        Reviewed by Saam Barati.

        After r263055, Options::useJIT() always equals VM::canUseJIT() after canUseJIT()
        has been computed.  This patch removes VM::canUseJIT(), and replaces all calls to
        it with calls to Options::useJIT().

        In the old code, VM::canUseJIT() would assert s_canUseJITIsSet to ensure that
        its clients will not access s_canUseJIT before it is initialized.  We not have an
        equivalent mechanism with Options.  This is how it works:

        1. There are 2 new Options flags in the g_jscConfig:
                g_jscConfig.options.isFinalized
                g_jscConfig.options.allowUnfinalizedAccess

           g_jscConfig.options.isFinalized means that all Options values are finalized
           i.e. initialization is complete and ready to be frozen in the Config.

           g_jscConfig.options.isFinalized is set by initializeThreading() by calling
           Options::finalize() once options initialization is complete.

           g_jscConfig.options.allowUnfinalizedAccess is an allowance for clients to
           access Options values before they are finalized.  This is only needed in
           options initialization code where Options values are read and written to.

           g_jscConfig.options.allowUnfinalizedAccess is set and cleared using the
           Options::AllowUnfinalizedAccessScope RAII object.  The few pieces of code that
           do options initialization will instantiate this scope object.

        2. All Options accessors (e.g. Option::useJIT()) will now assert that either
           g_jscConfig.options.allowUnfinalizedAccess or g_jscConfig.options.isFinalized
           is set.

        3. Since r263055, Options::recomputeDependentOptions() ensures that if useJIT() is
           false, all other JIT options (e.g. useBaselineJIT(), useDFTJIT(), useFTLJIT(),
           etc.) are also false.  This patch also adds useBBQJIT() and useOMGJIT() to that
           list.

           With this, checks for useJIT() are now redundant if there's also another JIT
           option check, e.g. useRegExpJIT() or useDFGJIT().  When redundant, this patch
           elides the useJIT() check (which used to be a VM::canUseJIT() check).

        Ideally, we should also introduce a separate abstraction for requested option
        values before finalization than the finalized option values that will be adopted
        by the system.  We'll do this as a separate exercise in a later patch.

        * API/tests/ExecutionTimeLimitTest.cpp:
        (testExecutionTimeLimit):
        * API/tests/FunctionOverridesTest.cpp:
        (testFunctionOverrides):
        * API/tests/PingPongStackOverflowTest.cpp:
        (testPingPongStackOverflow):
        - Removed redundant calls to Options::initialize().

        * API/tests/testapi.c:
        (main):
        - move the call to testExecutionTimeLimit() to after finalizeMultithreadedMultiVMExecutionTest()
          returns.  This is because testExecutionTimeLimit() modifies JIT options at runtime
          as part of its testing.  This can wreak havoc on the rest of the system that expects
          the options to be frozen.  Ideally, we'll find a way for testExecutionTimeLimit() to
          do its work without changing JIT options, but that is not easy to do.  For now,
          we'll just run it at the end as a workaround.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::setNumParameters):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfArgumentValueProfiles):
        (JSC::CodeBlock::valueProfileForArgument):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::isSupported):
        * heap/Heap.cpp:
        (JSC::Heap::completeAllJITPlans):
        (JSC::Heap::iterateExecutingAndCompilingCodeBlocks):
        (JSC::Heap::gatherScratchBufferRoots):
        (JSC::Heap::removeDeadCompilerWorklistEntries):
        (JSC::Heap::stopThePeriphery):
        (JSC::Heap::suspendCompilerThreads):
        (JSC::Heap::resumeCompilerThreads):
        (JSC::Heap::addCoreConstraints):
        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):
        * jit/JITThunks.cpp:
        (JSC::JITThunks::ctiNativeCall):
        (JSC::JITThunks::ctiNativeConstruct):
        (JSC::JITThunks::ctiNativeTailCall):
        (JSC::JITThunks::ctiNativeTailCallWithoutSavedTags):
        (JSC::JITThunks::ctiInternalFunctionCall):
        (JSC::JITThunks::ctiInternalFunctionConstruct):
        (JSC::JITThunks::hostFunctionStub):
        * jsc.cpp:
        (CommandLine::parseArguments):
        (jscmain):
        * llint/LLIntEntrypoint.cpp:
        (JSC::LLInt::setFunctionEntrypoint):
        (JSC::LLInt::setEvalEntrypoint):
        (JSC::LLInt::setProgramEntrypoint):
        (JSC::LLInt::setModuleProgramEntrypoint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::shouldJIT):
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSCConfig.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::numberToStringWatchpointSet):
        * runtime/Options.cpp:
        (JSC::jitEnabledByDefault):
        (JSC::disableAllJITOptions):

        (JSC::Options::initialize):
        - Move the calls to dumpOptionsIfNeeded() and ensureOptionsAreCoherent() to the
          end after all the options have been initialized because this where they belong.

        (JSC::Options::finalize):
        (JSC::Options::setOptions):
        (JSC::Options::setOption):
        (JSC::Options::dumpAllOptions):
        (JSC::Options::ensureOptionsAreCoherent):
        * runtime/Options.h:
        (JSC::Options::AllowUnfinalizedAccessScope::AllowUnfinalizedAccessScope):
        (JSC::Options::AllowUnfinalizedAccessScope::~AllowUnfinalizedAccessScope):
        * runtime/OptionsList.h:
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileMatchOnly):
        * runtime/SymbolTable.h:
        (JSC::SymbolTableEntry::isWatchable const):
        * runtime/VM.cpp:
        (JSC::VM::computeCanUseJIT):
        (JSC::VM::VM):
        (JSC::VM::getHostFunction):
        (JSC::VM::getCTIInternalFunctionTrampolineFor):
        * runtime/VM.h:
        (JSC::VM::isInMiniMode):
        (JSC::VM::canUseJIT): Deleted.
        * wasm/WasmCapabilities.h:
        (JSC::Wasm::isSupported):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::shouldJIT):
        * wasm/WasmSlowPaths.cpp:
        (JSC::LLInt::shouldJIT):

2020-06-16  Robin Morisset  <rmorisset@apple.com>

        Optimize Air::TmpWidth analysis in IRC
        https://bugs.webkit.org/show_bug.cgi?id=152478

        Reviewed by Filip Pizlo.

        AirTmpWidth currently uses a HashMap to map tmps to their width.
        Since tmps have consecutive indices, we can instead use vectors (one for GP and one for FP tmps).
        As a bonus, we can just compute the width of the tmps of the bank the register allocator is currently looking at.
        This cuts the time spent in the register allocator in JetStream2 by about 100ms out of 3.4s
        (or sometimes 80ms out of 2.4, the bimodality of the time spent is due to a huge function in tagcloud-SP which usually but not always reach the FTL, I'll check later if it can be fixed by tweaking the inliner).

        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        (JSC::B3::Air::allocateRegistersByGraphColoring):
        * b3/air/AirTmpWidth.cpp:
        (JSC::B3::Air::TmpWidth::TmpWidth):
        (JSC::B3::Air::TmpWidth::recompute):
        * b3/air/AirTmpWidth.h:
        (JSC::B3::Air::TmpWidth::width const):
        (JSC::B3::Air::TmpWidth::requiredWidth):
        (JSC::B3::Air::TmpWidth::defWidth const):
        (JSC::B3::Air::TmpWidth::useWidth const):
        (JSC::B3::Air::TmpWidth::Widths::Widths):
        (JSC::B3::Air::TmpWidth::widths):
        (JSC::B3::Air::TmpWidth::widths const):
        (JSC::B3::Air::TmpWidth::addWidths):
        (JSC::B3::Air::TmpWidth::widthsVector):

2020-06-16  Fujii Hironori  <Hironori.Fujii@sony.com>

        [CMake][Visual Studio] CombinedDomains.json is generated twice in JavaScriptCore.vcxproj and InspectorBackendCommands.vcxproj
        https://bugs.webkit.org/show_bug.cgi?id=213225

        Reviewed by Don Olmstead.

        Since r262203 (Bug 210014) added a new target
        InspectorBackendCommands, CombinedDomains.json is generated twice
        in JavaScriptCore.vcxproj and InspectorBackendCommands.vcxproj.
        This caused unnecessary incremental builds.

        The fundamental issue of this issue was fixed in CMake side.
        <https://gitlab.kitware.com/cmake/cmake/issues/16767>
        However, JavaScriptCore target needs to have a direct or indirect
        dependency of InspectorBackendCommands target for CMake Visual
        Studio generator to eliminate duplicated custom commands.

        * CMakeLists.txt: Added add_dependencies(JavaScriptCore InspectorBackendCommands).

2020-06-16  Mark Lam  <mark.lam@apple.com>

        Add SIGABRT handler for non OS(DARWIN) builds to the jsc shell with the -s option.
        https://bugs.webkit.org/show_bug.cgi?id=213200

        Reviewed by Michael Catanzaro.

        This is needed because non OS(DARWIN) builds uses abort as their "CRASH"ing
        mechanism.

        * jsc.cpp:
        (CommandLine::parseArguments):

2020-06-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        WTF signal machinery is guarded by #if USE(PTHREADS) && HAVE(MACHINE_CONTEXT) but does not use pthreads or machine context
        https://bugs.webkit.org/show_bug.cgi?id=213223

        Reviewed by Mark Lam.

        Use #if OS(UNIX) here too. This should fix stress/ensure-crash.js when
        HAVE(MACHINE_CONTEXT) is false.

        * jsc.cpp:
        (printUsageStatement):
        (CommandLine::parseArguments):

2020-06-15  Pavel Feldman  <pavel.feldman@gmail.com>

        Web Inspector: introduce request interception
        https://bugs.webkit.org/show_bug.cgi?id=207446

        Reviewed by Devin Rousso.

        This change introduces network request interception to the Network 
        protocol domain. It adds Network.interceptWithRequest notification that
        can be continued, modified or fulfilled. NetworkStage enum can now have
        'request' and 'response' values.

        * inspector/protocol/Network.json:

2020-06-15  Tadeu Zagallo  <tzagallo@apple.com>

        op_iterator_open getNext checkpoint needs to declare it uses m_iterator
        https://bugs.webkit.org/show_bug.cgi?id=213106
        <rdar://problem/63416838>

         Reviewed by Keith Miller.

        Currently, we have no way of specifying that a checkpoint uses an operand defined at an earlier
        point in the same bytecode, which is the case for op_iterator_open: we assume that it will have
        already allocated the iterator and stored it in m_iterator by the time we get to the getNext
        checkpoint. In order to support that, we change tmpLivenessForCheckpoint to livenessForCheckpoint
        and allow it to also declare the use of the operands defined within the bytecode.

        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::livenessForCheckpoint):
        (JSC::tmpLivenessForCheckpoint): Deleted.
        * bytecode/BytecodeLivenessAnalysis.h:
        * bytecode/FullBytecodeLiveness.h:
        * dfg/DFGForAllKills.h:
        (JSC::DFG::forAllKilledOperands):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::isLiveInBytecode):
        * dfg/DFGGraph.h:

2020-06-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        Expand JSObject::defineOwnIndexedProperty() fast path for existing properties
        https://bugs.webkit.org/show_bug.cgi?id=213133

        Reviewed by Yusuke Suzuki.

        This patch expands fast path of JSObject::defineOwnIndexedProperty() to cover existing properties
        if given data descriptor has no falsy attributes, preventing the object from entering SparseMode.
        The optimization is possible due to this invariant: indexed properties of non-SparseMode objects
        have attributes of PropertyAttribute::None (except for typed arrays; added assert covers it).

        PropertyDescriptor::attributesOverridingCurrent() with PropertyAttribute::None descriptor
        is used to support partial descriptors like {value: 1, writable: true}.

        This change advances Object.defineProperty microbenchmark by 35%; array read/write benchmark
        following property redefinition is progressed by a factor of 16 due to avoiding SparseMode.

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnIndexedProperty):

2020-06-15  Robin Morisset  <rmorisset@apple.com>

        testB3::testReportUsedRegistersLateUseFollowedByEarlyDefDoesNotMarkUseAsDead() has a validation failure in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=196103
        <rdar://problem/57808549>

        Reviewed by Keith Miller.

        The problem was trivial: patchpoints were referring to constants that were defined after them.
        Just exchanging the order of the definition was enough to make this test pass.

        * b3/testb3_1.cpp:
        (shouldRun):
        * b3/testb3_7.cpp:
        (testReportUsedRegistersLateUseFollowedByEarlyDefDoesNotMarkUseAsDead):

2020-06-15  Mark Lam  <mark.lam@apple.com>

        Do not install the VMTraps signal handler if Options::useJIT=false.
        https://bugs.webkit.org/show_bug.cgi?id=212543
        <rdar://problem/63772519>

        Reviewed by Keith Miller.

        VMTraps is only needed for JITted code.  Hence, if the JIT is disabled, we should
        set Options::usePollingTraps() to true to indicate that we won't be using VMTraps.

        With this change, we no longer install any signal handling machinery if
        Options::useJIT() is false.

        Because we may still disable the JIT even if useJIT() is true (due to failure to
        allocate JIT memory or a number of other factors), we will also add a check of
        VM::canUseJIT() in initializeThreading(), and disable useJIT() if needed.  Of
        course, this also means we need to call Options::recomputeDependentOptions() to
        make other options consistent with useJIT() being false.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/Options.cpp:
        (JSC::disableAllJITOptions):
        (JSC::Options::recomputeDependentOptions):
        (JSC::recomputeDependentOptions): Deleted.
        * runtime/Options.h:
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::initializeSignals):
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::SigillCrashAnalyzer::instance):

2020-06-15  Keith Miller  <keith_miller@apple.com>

        CheckIsConstant should not use BadCache exit kind
        https://bugs.webkit.org/show_bug.cgi?id=213141

        Reviewed by Yusuke Suzuki.

        The BadCache exit kind causes the OSR exit compilers to try to
        update ArrayProfiles.  This is just incorrect for CheckIsConstant
        since the node's origin may not even have an
        ArrayProfile... BadCache also strongly assumes the value it's
        profiling is a cell, which is clearly not always the case for
        CheckIsConstant.

        CheckIsConstant now uses the BadConstantValue (BadValue conflicts
        with macros exported by X11 on GTK) exit kind for all use kinds,
        which is just a rename of BadCell.  All existing places where we
        can emit a CheckIsConstant already have a story for BadConstantValue.

        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        (JSC::CallLinkStatus::computeExitSiteData):
        * bytecode/ExitKind.cpp:
        (JSC::exitKindToString):
        * bytecode/ExitKind.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        (JSC::DFG::ByteCodeParser::handleModuleNamespaceLoad):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ByteCodeParser::handleCreateInternalFieldObject):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isPseudoTerminal):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckIsConstant):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckIsConstant):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckBadValue):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckBadCell): Deleted.

2020-06-15  Yusuke Suzuki  <ysuzuki@apple.com>

        Webkit Feature BigInt on webkit.org
        https://bugs.webkit.org/show_bug.cgi?id=197546

        Reviewed by Sam Weinig.

        Add BigInt entry to JSC features.json.

        * features.json:

2020-06-15  Keith Miller  <keith_miller@apple.com>

        JIT thunks should work on arm64_32
        https://bugs.webkit.org/show_bug.cgi?id=213103

        Reviewed by Saam Barati.

        This patch fixes various issues when running JSC on arm64_32 with
        useJIT=1 and useBaselineJIT=0. In particular this patch makes the
        following changes:

        1) ScalePtr is now just part of the Scale enum and is set based on
        the size of the address space.

        2) MacroAssembler::*Ptr functions call 32/64 bit variants based on
        Address space size rather than cpu architecture. Vetting of callsites
        using Ptr as 64 will happen in future patches since it's hard to
        comprehensively vet.

        3) Add some missing variants of functions for when pointers are 32-bit.

        4) Add a load/storeReg function that stores a full register regardless
        of pointer size for storing/loading callee saves.

        5) numberOfDFGCompiles should report a big number for
        useBaselineJIT=0 as some tests fail by default if useBaselineJIT=0
        but useJIT=1.

        6) Assert BaseIndex has a scale of PtrSize or TimesOne (for pre-scaled
        values) when passed to a load/storePtr function.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::timesPtr): Deleted.
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::rotateRightPtr):
        (JSC::MacroAssembler::loadPtr):
        (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch):
        (JSC::MacroAssembler::branchPtr):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::shouldBlindDouble):
        (JSC::MacroAssembler::moveDouble):
        (JSC::MacroAssembler::store64):
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::add32):
        (JSC::MacroAssemblerARM64::signExtend32ToPtr):
        (JSC::MacroAssemblerARM64::loadPtr):
        (JSC::MacroAssemblerARM64::call):
        (JSC::MacroAssemblerARM64::farJump):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::rotateRight32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::rotateRight32):
        * assembler/MacroAssemblerX86.h:
        * assembler/MacroAssemblerX86_64.h:
        * b3/B3LowerMacros.cpp:
        * b3/testb3_6.cpp:
        (testInterpreter):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitSwitchIntJump):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitLoadStructure):
        (JSC::AssemblyHelpers::emitAllocateVariableSized):
        (JSC::AssemblyHelpers::restoreCalleeSavesFromEntryFrameCalleeSavesBuffer):
        (JSC::AssemblyHelpers::copyCalleeSavesToEntryFrameCalleeSavesBufferImpl):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::storeReg):
        (JSC::AssemblyHelpers::loadReg):
        (JSC::AssemblyHelpers::emitMaterializeTagCheckRegisters):
        (JSC::AssemblyHelpers::emitGetFromCallFrameHeaderPtr):
        (JSC::AssemblyHelpers::emitGetFromCallFrameHeader32):
        (JSC::AssemblyHelpers::emitGetFromCallFrameHeader64):
        (JSC::AssemblyHelpers::emitPutToCallFrameHeader):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_enumerator_structure_pname):
        (JSC::JIT::emit_op_enumerator_generic_pname):
        * jit/ThunkGenerators.cpp:
        (JSC::nativeForGenerator):
        * runtime/TestRunnerUtils.cpp:
        (JSC::numberOfDFGCompiles):

2020-06-15  Caitlin Potter  <caitp@igalia.com>

        [JSC] add machinery to disable JIT tiers when experimental features are enabled
        https://bugs.webkit.org/show_bug.cgi?id=213193

        Reviewed by Mark Lam.

        A new macro FOR_EACH_JSC_EXPERIMENTAL_OPTION() supplies flags indicating the supported
        JIT tiers (or, in the future, other options) of a particular feature,
        in an easy to understand format. These flags are then used to
        recompute dependent feature flags.

        This should simplify the incremental development of language features.

        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * runtime/Options.cpp:
        (JSC::recomputeDependentOptions):
        * runtime/OptionsList.h:

2020-06-15  Keith Miller  <keith_miller@apple.com>

        Signal handlers should have a two phase installation.
        https://bugs.webkit.org/show_bug.cgi?id=213160

        Reviewed by Mark Lam.

        * jsc.cpp:
        (CommandLine::parseArguments):
        (jscmain):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/VMTraps.cpp:
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::installCrashHandler):
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::enableFastMemory):
        (JSC::Wasm::prepareFastMemory):
        * wasm/WasmFaultSignalHandler.h:

2020-06-15  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix LLInt
        https://bugs.webkit.org/show_bug.cgi?id=157972

        loadi only takes address.

        * llint/LowLevelInterpreter64.asm:

2020-06-15  Alexey Shvayka  <shvaikalesh@gmail.com>

        super should not depend on __proto__
        https://bugs.webkit.org/show_bug.cgi?id=157972

        Reviewed by Saam Barati.

        Before this change, both super() call [1] and super.property [2] relied on
        Object.prototype.__proto__ to acquire super base, which was observable and
        incorrect if __proto__ gets removed.

        This patch introduces get_prototype_of bytecode, ensuring returned values
        are profiled so the op can be wired to existing DFG and FTL implementations.
        In order to avoid performance regression w/o DFG (__proto__ is optimized via
        IntrinsicGetterAccessCase), fast paths for LLInt and baseline JIT are added
        (64-bit only), utilizing OverridesGetPrototypeOutOfLine type info flag.

        This change aligns JSC with V8 and SpiderMonkey, progressing microbenchmarks/
        super-get-by-{id,val}-with-this-monomorphic.js by 7-10%. SixSpeed is neutral.

        Also, extracts JSValue::getPrototype() method to avoid code duplication and
        utilizes it in objectConstructorGetPrototypeOf(), advancing provided
        microbenchmark by 40%.

        [1]: https://tc39.es/ecma262/#sec-getsuperconstructor (step 5)
        [2]: https://tc39.es/ecma262/#sec-getsuperbase (step 5)

        * builtins/BuiltinNames.h:
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetPrototypeOf):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::emitSuperBaseForCallee):
        (JSC::emitGetSuperFunctionForConstruct):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_getPrototypeOf):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicGetter):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGOperations.cpp:
        * jit/IntrinsicEmitter.cpp:
        (JSC::IntrinsicGetterAccessCase::canEmitIntrinsicGetter):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_get_prototype_of):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::getPrototype const):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncProtoGetter):
        * runtime/JSObject.cpp:
        (JSC::JSObject::calculatedClassName):
        * runtime/JSObject.h:
        (JSC::JSObject::getPrototype):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::canPerformFastPutInlineExcludingProto):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::getNonIndexPropertySlot):
        * runtime/JSProxy.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::overridesGetPrototype const):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
        * runtime/ProxyObject.h:
        * runtime/Structure.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):

2020-06-13  Devin Rousso  <drousso@apple.com>

        Make `errors` an own property of `AggregateError` instead of a prototype accessor
        https://bugs.webkit.org/show_bug.cgi?id=212677

        Reviewed by Yusuke Suzuki.

        * runtime/AggregateError.h:
        (JSC::AggregateError::destroy): Deleted.
        (JSC::AggregateError::subspaceFor): Deleted.
        (JSC::AggregateError::errors): Deleted.
        * runtime/AggregateError.cpp:
        (JSC::AggregateError::AggregateError):
        (JSC::AggregateError::finishCreation): Added.
        (JSC::AggregateError::visitChildren): Deleted.

        * runtime/AggregateErrorPrototype.h:
        * runtime/AggregateErrorPrototype.cpp:
        (JSC::AggregateErrorPrototype::finishCreation):
        (JSC::aggregateErrorPrototypeAccessorErrors): Deleted.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initializeAggregateErrorConstructor):

        * runtime/VM.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionalFinalizers):
        Remove `aggregateErrorSpace` since `AggregateError` doesn't add any new member variables.
        Ensure that it can share an `IsoSubspace` with `ErrorInstance`.

        * runtime/CommonIdentifiers.h:
        Add `errors`.

2020-06-12  Robin Morisset  <rmorisset@apple.com>

        The ||= operator (and similar ones) should produce valid bytecode even if the right side is a static error
        https://bugs.webkit.org/show_bug.cgi?id=213154

        Reviewed by Devin Rousso.

        There were two minor issues here that interacted:
        - emitThrowReferenceError did not take an optional `dst` argument like everything else, and instead always returned a new temporary.
          As a result, the various functions that sometimes did "return emitThrowReferenceError(..);" could return a different RegisterID than the one
          provided to them through `dst`, breaking the invariant stated at the top of the file.
        - ShortCircuitReadModifyResolveNode::emitBytecode used the result of such a function, unnecessarily, and (correctly) relied on the invariant being upheld.
        The combination of these led to the bytecode trying to do a move of a temporary that was only defined in one of the predecessors of the basic block it was on,
        which was caught by validateBytecode.

        I fixed both issues, and verified that either fix is enough to stop the bug.
        I fixed the first because other code may depend on that invariant in more subtle ways.
        I fixed the second because it was just unnecessary complexity and made the code misleading.

        I also reworded the comment at the top of NodesCodegen.cpp based on Keith's explanation and Mark's advice to make it less cryptic.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ThrowableExpressionData::emitThrowReferenceError):
        (JSC::PostfixNode::emitBytecode):
        (JSC::DeleteBracketNode::emitBytecode):
        (JSC::DeleteDotNode::emitBytecode):
        (JSC::PrefixNode::emitBytecode):
        (JSC::ShortCircuitReadModifyResolveNode::emitBytecode):
        (JSC::AssignErrorNode::emitBytecode):
        * parser/Nodes.h:

2020-06-12  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] el(Greek) characters' upper-case conversion is locale-sensitive
        https://bugs.webkit.org/show_bug.cgi?id=213155
        <rdar://problem/55018467>

        Reviewed by Darin Adler.

        CLDR defines 4 locales which has language-sensitive case conversions. "az", "el", "lt", and "tr", where,

            az = Azerbaijani
            el = Greek
            lt = Lithuanian
            tr = Turkish

        We can ensure it easily like this.

            1. Download CLDR data
            2. `ls common/transforms/*Upper.xml`

                common/transforms/az-Upper.xml
                common/transforms/el-Upper.xml
                common/transforms/lt-Upper.xml
                common/transforms/tr-Upper.xml

        And ECMA-402 String.prototype.{toLocaleLowerCase,toLocaleUpperCase} requires these locales are listed as `availableLocales`.

            > 7. Let availableLocales be a List with language tags that includes the languages for which the Unicode Character
            >    Database contains language sensitive case mappings. Implementations may add additional language tags if they
            >    support case mapping for additional locales.

            https://tc39.es/ecma402/#sup-string.prototype.tolocalelowercase

        This patch adds "el" to our maintained availableLocales list. Previously we only had "az", "lt", and "tr".

        * runtime/StringPrototype.cpp:
        (JSC::toLocaleCase):
        (JSC::stringProtoFuncToLocaleUpperCase):

2020-06-12  Keith Miller  <keith_miller@apple.com>

        Tests expecting a crash should use a signal handler in the JSC CLI process
        https://bugs.webkit.org/show_bug.cgi?id=212479

        Reviewed by Yusuke Suzuki.

        Have the -s option use WTF::Signals and make sure it adds breakpoint catching
        as well.

        * jsc.cpp:
        (printUsageStatement):
        (CommandLine::parseArguments):
        * tools/SigillCrashAnalyzer.cpp:
        (JSC::installCrashHandler):

2020-06-12  Alexey Shvayka  <shvaikalesh@gmail.com>

        AsyncGenerator should await "return" completions
        https://bugs.webkit.org/show_bug.cgi?id=212774

        Reviewed by Ross Kirsling.

        This patch fixes 2 spec discrepancies, observable with async generators if the
        value of "return" completion is a Promise, aligning JSC with V8 and SpiderMonkey.

        * builtins/AsyncGeneratorPrototype.js:
        (onFulfilled):
        This change implements step 8 of AsyncGeneratorYield [1], that is executed after
        step 15 of AsyncGeneratorResumeNext [2] (implemented as @doAsyncGeneratorBodyCall).
        We are safe to rely on [[AsyncGeneratorState]] being "suspendedYield" (set in
        step 6 of AsyncGeneratorYield [1]) instead of adding extra field to AsyncGenerator:
        AsyncGeneratorResumeNext [2] does not overwrite "suspendedYield" state.
        This change fixes most of test262 cases.

        [1]: https://tc39.es/ecma262/#sec-asyncgeneratoryield
        [2]: https://tc39.es/ecma262/#sec-asyncgeneratorresumenext

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitDelegateYield):
        This change implements step 7.c.iii.1 of yield* runtime semantics [3], that is
        observable only if [[Value]] has userland "then" getter. Awaited result is discarded.
        This change fixes async-generator/yield-star-return-then-getter-ticks.js test262 case.

        [3]: https://tc39.es/ecma262/#sec-generator-function-definitions-runtime-semantics-evaluation

2020-06-12  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, address Darin's feedback on r262890.

        * runtime/IntlObject.cpp:
        (JSC::addScriptlessLocaleIfNeeded):
        Use != instead of < for clarity.

2020-06-12  Adrian Perez de Castro  <aperez@igalia.com>

        Build is broken with EVENT_LOOP_TYPE=GLib
        https://bugs.webkit.org/show_bug.cgi?id=212987

        Reviewed by Konstantin Tokarev.

        * PlatformJSCOnly.cmake: Add sources needed to support the remote inspector to
        JavaScriptCore_SOURCES.

2020-06-11  Saam Barati  <sbarati@apple.com>

        Linear Scan uses the wrong Interval for spills for tmps with roles of early def or late use
        https://bugs.webkit.org/show_bug.cgi?id=213055
        <rdar://problem/59874018>

        Reviewed by Yusuke Suzuki.

        There was a bug in linear scan when computing the live range interval for
        spill tmps that had early defs or late uses.  When linear scan spills a
        tmp, it creates a new tmp that it loads to and stores from, and replaces the old tmp
        with the new tmp, and emits stores/loads around pertinent instructions. The live
        interval for such tmps is small by nature, it's contained in the interval for the
        instruction itself. However, we'd build this interval purely based off the
        original tmp's arg timing. So, for example, let's consider a program like this:
        
        RandoInsn: LateUse:Tmp1, Use:Tmp2, [early = N, late = N+1]
        Let's say that Tmp1's last use is RandoInsn, and it had a def before
        RandoInsn, therefore, its live range will be something like:
        [J where J < N, N+1]
        
        and now imagine we spilled Tmp1 for some reason, and rewrote the
        program to be:
        Move Addr(spill for Tmp1), TmpSpill
        RandoInsn: LateUse:TmpSpill, Use:Tmp2, [early = N, late = N+1]
        
        We used to incorrectly mark the live range for TmpSpill to just be [N+1, N+2).
        However, the bug here is that we neglected that TmpSpill actually had an earlier
        def at [N, N+1). So, the live range for TmpSpill was wrong. This could incorrectly
        lead us to allocate Tmp2 and TmpSpill to the same register, since their live
        ranges may not intersect if Tmp2 dies at RandoInsn.
        
        We also had the symmetric bug for EarlyDefs: we wouldn't account for the
        store-spill that'd happen after something like RandoInsn.
        
        The fix is to account for the loads/stores of spill tmps when assigning
        them a live range.
        
        This patch contains a standalone test in testair. It also fixes crashes we had when
        running B3O1 tests using typed arrays on arm64e since we had patchpoints that utilized
        LateUse for signing and auth.

        * b3/B3Procedure.h:
        * b3/air/AirAllocateRegistersAndStackByLinearScan.cpp:
        * b3/air/testair.cpp:

2020-06-11  Saam Barati  <sbarati@apple.com>

        Replace uses of black/white list with block/allow list
        https://bugs.webkit.org/show_bug.cgi?id=213084

        Reviewed by Keith Miller.

        We should be using racially neutral names in our code. From Chromium style guide:
        
        "Terms such as 'blacklist' and 'whitelist' reinforce the notion that
        black==bad and white==good."

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * b3/air/AirLowerAfterRegAlloc.cpp:
        (JSC::B3::Air::lowerAfterRegAlloc):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::ensureGlobalDFGAllowlist):
        (JSC::DFG::compileImpl):
        (JSC::DFG::ensureGlobalDFGWhitelist): Deleted.
        * dfg/DFGTierUpCheckInjectionPhase.cpp:
        (JSC::DFG::ensureGlobalFTLAllowlist):
        (JSC::DFG::TierUpCheckInjectionPhase::run):
        (JSC::DFG::ensureGlobalFTLWhitelist): Deleted.
        * heap/MachineStackMarker.cpp:
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator.should_generate_types_for_domain):
        (ObjCGenerator.should_generate_commands_for_domain):
        (ObjCGenerator.should_generate_events_for_domain):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::ensureGlobalJITAllowlist):
        (JSC::LLInt::shouldJIT):
        (JSC::LLInt::ensureGlobalJITWhitelist): Deleted.
        * runtime/OptionsList.h:
        * tools/FunctionAllowlist.cpp: Copied from Source/JavaScriptCore/tools/FunctionWhitelist.cpp.
        (JSC::FunctionAllowlist::FunctionAllowlist):
        (JSC::FunctionAllowlist::contains const):
        (JSC::FunctionWhitelist::FunctionWhitelist): Deleted.
        (JSC::FunctionWhitelist::contains const): Deleted.
        * tools/FunctionAllowlist.h: Copied from Source/JavaScriptCore/tools/FunctionWhitelist.h.
        * tools/FunctionWhitelist.cpp: Removed.
        * tools/FunctionWhitelist.h: Removed.

2020-06-11  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Return DisposableCallSiteIndex when destroying GCAwareJITStubRoutineWithExceptionHandler
        https://bugs.webkit.org/show_bug.cgi?id=213069
        <rdar://problem/64205186>

        Reviewed by Saam Barati.

        Inside GCAwareJITStubRoutineWithExceptionHandler::observeZeroRefCount, we are returning DisposableCallSiteIndex to freelist.
        However, GCAwareJITStubRoutineWithExceptionHandler::observeZeroRefCount can be called even if the code of GCAwareJITStubRoutineWithExceptionHandler is
        on the stack. Let's consider the following scenario.

            1. Execute GCAwareJITStubRoutineWithExceptionHandler's code. Set CallSiteIndex to the stack.
            2. Execute more code. (1)'s GCAwareJITStubRoutineWithExceptionHandler's code is on the stack.
            3. (1)'s GCAwareJITStubRoutineWithExceptionHandler's refcount becomes zero.
            4. CallSiteIndex of GCAwareJITStubRoutineWithExceptionHandler is returned.
            5. Execute StackVisitor to construct frames. But we cannot find CodeOrigin corresponding to CallSiteIndex stored in (1) since it is already returned.

        DisposableCallSiteIndex should be returned after ensuring that GCAwareJITStubRoutineWithExceptionHandler's code is not on the stack. Detecting this is the functionality
        what GCAwareJITStubRoutineWithExceptionHandler can offer. It is destroyed after ensuring that GCAwareJITStubRoutineWithExceptionHandler's code is not on the stack.

        This patch delays DisposableCallSiteIndex returning until we destroy owner GCAwareJITStubRoutineWithExceptionHandler. But it is possible that CodeBlock* corresponding to
        GCAwareJITStubRoutineWithExceptionHandler is already destroyed. To avoid this condition, we extract CodeOrigins vector as Ref<DFG::CodeOriginPool> and keep it alive from
        GCAwareJITStubRoutineWithExceptionHandler too. And since CodeOrigin addition / removal happens only from the main thread after finishing the compilation, and
        GCAwareJITStubRoutineWithExceptionHandler's destructor is called from the Heap's finalizer, which must be executed from the main thread, we can just modify it without a lock.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::newExceptionHandlingCallSiteIndex):
        (JSC::CodeBlock::codeOrigins):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::codeOrigin):
        * dfg/DFGCodeOriginPool.cpp: Added.
        (JSC::DFG::CodeOriginPool::addCodeOrigin):
        (JSC::DFG::CodeOriginPool::addUniqueCallSiteIndex):
        (JSC::DFG::CodeOriginPool::lastCallSite const):
        (JSC::DFG::CodeOriginPool::addDisposableCallSiteIndex):
        (JSC::DFG::CodeOriginPool::removeDisposableCallSiteIndex):
        (JSC::DFG::CodeOriginPool::shrinkToFit):
        * dfg/DFGCodeOriginPool.h: Added.
        (JSC::DFG::CodeOriginPool::create):
        (JSC::DFG::CodeOriginPool::get):
        (JSC::DFG::CodeOriginPool::size const):
        * dfg/DFGCommonData.cpp:
        (JSC::DFG::CommonData::shrinkToFit):
        (JSC::DFG::CommonData::addCodeOrigin): Deleted.
        (JSC::DFG::CommonData::addUniqueCallSiteIndex): Deleted.
        (JSC::DFG::CommonData::lastCallSite const): Deleted.
        (JSC::DFG::CommonData::addDisposableCallSiteIndex): Deleted.
        (JSC::DFG::CommonData::removeDisposableCallSiteIndex): Deleted.
        * dfg/DFGCommonData.h:
        (JSC::DFG::CommonData::CommonData):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exceptionCheck):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addCallSite):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutById):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileDirectCallOrConstruct):
        (JSC::FTL::DFG::LowerDFGToB3::compileTailCall):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargsSpread):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallOrConstructVarargs):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallEval):
        (JSC::FTL::DFG::LowerDFGToB3::compileInById):
        (JSC::FTL::DFG::LowerDFGToB3::compileInstanceOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileLogShadowChickenTail):
        (JSC::FTL::DFG::LowerDFGToB3::getById):
        (JSC::FTL::DFG::LowerDFGToB3::getByIdWithThis):
        (JSC::FTL::DFG::LowerDFGToB3::lazySlowPath):
        (JSC::FTL::DFG::LowerDFGToB3::callPreflight):
        * ftl/FTLSlowPathCall.cpp:
        (JSC::FTL::callSiteIndexForCodeOrigin):
        * jit/GCAwareJITStubRoutine.cpp:
        (JSC::GCAwareJITStubRoutineWithExceptionHandler::GCAwareJITStubRoutineWithExceptionHandler):
        (JSC::GCAwareJITStubRoutineWithExceptionHandler::~GCAwareJITStubRoutineWithExceptionHandler):
        (JSC::GCAwareJITStubRoutineWithExceptionHandler::aboutToDie):
        (JSC::GCAwareJITStubRoutineWithExceptionHandler::observeZeroRefCount):
        * jit/GCAwareJITStubRoutine.h:

2020-06-11  Alexey Shvayka  <shvaikalesh@gmail.com>

        RegExp.prototype getters should throw on cross-realm access
        https://bugs.webkit.org/show_bug.cgi?id=213075

        Reviewed by Saam Barati.

        This patch makes RegExp.prototype getters throw TypeError when called on
        RegExp.prototype object from another realm, aligning JSC with V8 and SpiderMonkey.

        The spec [1] allows same-realm access to avoid breaking the web, while makes
        RegExp.prototype an ordinary object (rather than RegExp instance) where possible.

        [1]: https://tc39.es/ecma262/#sec-get-regexp.prototype.global (step 3.a)

        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoGetterGlobal):
        (JSC::regExpProtoGetterIgnoreCase):
        (JSC::regExpProtoGetterMultiline):
        (JSC::regExpProtoGetterDotAll):
        (JSC::regExpProtoGetterSticky):
        (JSC::regExpProtoGetterUnicode):
        (JSC::regExpProtoGetterSource):

2020-06-11  Paulo Matos  <pmatos@igalia.com>

        Add missing include to JSONObject.cpp - non-unified build
        https://bugs.webkit.org/show_bug.cgi?id=213073

        Reviewed by Adrian Perez de Castro.

        * runtime/JSONObject.cpp:

2020-06-10  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r260697): [Intl] "missing script" locales like zh-TW are no longer mapped
        https://bugs.webkit.org/show_bug.cgi?id=213007

        Reviewed by Darin Adler.

        addMissingScriptLocales was removed from IntlObject when changing our locale resolution to depend more directly
        on ICU, but apparently even latest ICU won't perform this legacy "region implies script" mapping for us.

        ICU 65+ does have uloc_openAvailableByType which will do the trick, so perhaps we should use this in the future,
        but it still doesn't seem to help us with Collator, which has its own separate set of "available locales".

        The exact set of locales which should be mapped is currently under discussion here:
        https://github.com/tc39/ecma402/issues/159
        But the crux seems to be that we should ensure we have an xx-ZZ alias for all available xx-Yyyy-ZZ locales.

        * runtime/IntlObject.cpp:
        (JSC::addScriptlessLocaleIfNeeded):
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):

2020-06-10  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSCallbackObject::deleteProperty should redirect to Parent::deletePropertyByIndex if propertyName is index
        https://bugs.webkit.org/show_bug.cgi?id=213041
        <rdar://problem/64204300>

        Reviewed by Darin Adler.

        We have an infinite recursion here.

        -> JSCallbackObject::deletePropertyByIndex
            -> JSCell::deleteProperty
                -> JSCallbackObject::deleteProperty
                    -> JSObject::deleteProperty
                        -> JSCallbackObject::deletePropertyByIndex

        When propertyName in JSCallbackObject::deleteProperty is an index, we should go to JSObject::deletePropertyByIndex instead of JSObject::deleteProperty.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::deleteProperty):

2020-06-09  Mark Lam  <mark.lam@apple.com>

        Stringifier::appendStringifiedValue() should not assume it is always safe to recurse.
        https://bugs.webkit.org/show_bug.cgi?id=213006
        <rdar://problem/64154840>

        Reviewed by Keith Miller.

        In r262727, I suggested that Alexey Shvayka add an assertion in
        Stringifier::appendStringifiedValue() to assert that it is safe to recurse because
        we don't expect it to recurse into itself.  Turns out this is a bad idea because
        a client may be doing the recursing before calling Stringifier::appendStringifiedValue().
        As a result, Stringifier::appendStringifiedValue() ends up being executed with
        the stack pointer already in the reserved zone.  This is legal, and is what the
        reserved zone is intended for as long as we don't recurse from here.  However,
        this also means that asserting vm.isSafeToRecurseSoft() here will surely fail
        because we are already in the reserved zone area.  The fix is simply to remove
        this faulty assertion.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):

2020-06-09  Mark Lam  <mark.lam@apple.com>

        Disambiguate the OverridesGetPropertyNames structure flag
        https://bugs.webkit.org/show_bug.cgi?id=212909
        <rdar://problem/63823557>

        Reviewed by Saam Barati.

        Previously, the OverridesGetPropertyNames structure flag could mean 2 different
        things:
        1. the getPropertyNames() method is overridden, or
        2. any of the forms of getPropertyName() is overridden:
           getPropertyName, getOwnPropertyNames, getOwnNonIndexPropertyNames

        Some parts of the code expects one definition while other parts expect the other.
        This patch disambiguates between the 2 by introducing OverridesAnyFormOfGetPropertyNames
        for definition (2).  OverridesGetPropertyNames now only means definition (1).

        Note: we could have implemented overridesGetPropertyNames() by doing a comparison
        of the getPropertyNames pointer in the MethodTable.  This is a little slower than
        checking a TypeInfo flag, but probably doesn't matter a lot in the code paths
        where overridesGetPropertyNames() is called.  However, we have bits in TypeInfo
        left.  So, we'll might as well use it.

        This ambiguity resulted in JSObject::getPropertyNames() recursing infinitely
        when it didn't think it could recurse.  This is demonstrated in
        JSTests/stress/unexpected-stack-overflow-below-JSObject-getPropertyNames.js as
        follows:

        1. The test case invokes JSObject::getPropertyNames on a JSArray.

        2. In the while loop at the bottom of JSObject::getPropertynames(), we check
           `if (prototype->structure(vm)->typeInfo().overridesGetPropertyNames()) {`.

        3. The test overrides proto as follows:
           `arg0.__proto__ = arr1` where both arg0 and arr1 are JArrays.

        4. In the old code, JSArray sets OverridesGetPropertyNames but does not override
           getPropertyNames().  It actually meant to set OverridesAnyFormOfGetPropertyNames
           (after we disambiguated it) because JSArray overrides getOwnNonIndexPropertyNames().

        5. When we get to the check at (2), we ask if the prototype overridesGetPropertyNames().
           Since JSArray sets OverridesGetPropertyNames, the answer is yes / true.

           JSObject::getPropertynames() then proceeds to invoke
           `prototype->methodTable(vm)->getPropertyNames(prototype, globalObject, propertyNames, mode);`

           But because JSArray does not actually overrides getPropertyNames(), we're
           actually invoking JSObject::getPropertyNames() here.  Viola!  Infinite loop.

        With this patch, JSArray is disambiguated to set OverridesAnyFormOfGetPropertyNames
        instead of OverridesGetPropertyNames, and this infinite loop no longer exists.

        This patch also made the following changes:

        1. Templatized TypeInfo::isSetOnFlags1() and TypeInfo::isSetOnFlags2() so that
           we can used static_asserts instead of a debug ASSERT to verify the integrity of
           the flag we're checking against.

        2. Added a Structure::validateFlags() called from the Structure constructor.
           validateFlags() will verify the following:
           a. OverridesGetOwnPropertySlot must be set in the flags if getOwnPropertySlot
              is overridden in the MethodTable.
           b. InterceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero must be set in
              the flags if getOwnPropertySlotByIndex is overridden in the MethodTable.
           c. HasPutPropertySecurityCheck must be set in the flags if doPutPropertySecurityCheck
              is overridden in the MethodTable.
           d. OverridesGetPropertyNames must be set in the flags if getPropertyNames
              is overridden in the MethodTable.
           e. OverridesAnyFormOfGetPropertyNames must be set in the flags if any of
              getPropertyNames, getOwnPropertyNames, or getOwnNonIndexPropertyNames are
              overridden in the MethodTable.

           An alternate solution would be to automatically set these flags if we detect
           their corresponding methods are overridden.  However, this alternate solution
           requires this laundry list to be checked every time a structure is constructed.
           The current implementation of having the required flags already pre-determined
           as a constant is more efficient in terms of performance and code space.

           Also, it only takes one instantiation of the structure to verify that the flags
           are valid.  Since we only write JSCell / JSObject classes when we need them
           and we always write tests to exercise new code (especially such classes), we're
           guaranteed the flags validation will be exercised.

        3. Made JSObject::getOwnPropertySlot() and JSObject::doPutPropertySecurityCheck()
           not inlined when ASSERT_ENABLED.  This is needed in order for Structure::validateFlags()
           to do its checks using function pointer comparisons.  Otherwise, the inline
           functions can result in multiple instantiations of these functions.  For
           example, WebCore can get its own copy of JSObject::getOwnPropertySlot() and
           the comparisons will think the function is overridden even when it's not.

        4. Structure::validateFlags() found the following problems which are now fixed:

           GetterSetter was not using its StructureFlags.  As a result, it was missing the
           OverridesGetOwnPropertySlot flag.

           JSDataView did not define its StructureFlags.  It was missing the
           OverridesGetOwnPropertySlot and OverridesAnyFormOfGetPropertyNames flags.

        5. Changed a TypeInfo constructor to not have a default argument for the flags value.
           Also grepped for all uses of this constructor to make sure that it is passed
           the StructureFlags field.  This exercise found the following issue:

           JSAPIValueWrapper was not using its StructureFlags when creating its structure.
           Previously, it was just ignoring the StructureIsImmortal flag in StructureFlags.

        6. Hardened the assertions for hasReadOnlyOrGetterSetterPropertiesExcludingProto()
           and hasGetterSetterProperties() in the Structure constructor.

           Previously, if the flag is set, it verifies that the ClassInfo has the
           appropriate data expected by the flag.  However, it does not assert the reverse
           i.e. that if the ClassInfo data exists, then the flag must also be set.
           The new assertions now checks both.

           Moved the overridesGetCallData() assertion into Structure::validateFlags()
           because it concerns the OverridesGetCallData flag.  This assertion has also
           ben hardened.

        * API/JSAPIValueWrapper.h:
        * API/JSCallbackObject.h:
        * debugger/DebuggerScope.h:
        * inspector/JSInjectedScriptHostPrototype.h:
        * inspector/JSJavaScriptCallFramePrototype.h:
        * runtime/ClonedArguments.h:
        * runtime/ErrorInstance.h:
        * runtime/GenericArguments.h:
        * runtime/GetterSetter.h:
        * runtime/JSArray.h:
        * runtime/JSDataView.h:
        * runtime/JSFunction.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSLexicalEnvironment.h:
        * runtime/JSModuleEnvironment.h:
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::doPutPropertySecurityCheck):
        (JSC::JSObject::getOwnPropertySlot):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnPropertySlotImpl):
        (JSC::JSObject::getOwnPropertySlot):
        * runtime/JSProxy.h:
        * runtime/JSString.h:
        * runtime/JSSymbolTableObject.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::masqueradesAsUndefined const):
        (JSC::TypeInfo::implementsHasInstance const):
        (JSC::TypeInfo::implementsDefaultHasInstance const):
        (JSC::TypeInfo::overridesGetCallData const):
        (JSC::TypeInfo::overridesToThis const):
        (JSC::TypeInfo::structureIsImmortal const):
        (JSC::TypeInfo::overridesGetPropertyNames const):
        (JSC::TypeInfo::overridesAnyFormOfGetPropertyNames const):
        (JSC::TypeInfo::prohibitsPropertyCaching const):
        (JSC::TypeInfo::getOwnPropertySlotIsImpure const):
        (JSC::TypeInfo::getOwnPropertySlotIsImpureForPropertyAbsence const):
        (JSC::TypeInfo::hasPutPropertySecurityCheck const):
        (JSC::TypeInfo::newImpurePropertyFiresWatchpoints const):
        (JSC::TypeInfo::isImmutablePrototypeExoticObject const):
        (JSC::TypeInfo::interceptsGetOwnPropertySlotByIndexEvenWhenLengthIsNotZero const):
        (JSC::TypeInfo::isSetOnFlags1 const):
        (JSC::TypeInfo::isSetOnFlags2 const):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorAssign):
        * runtime/ProxyObject.h:
        * runtime/RegExpObject.h:
        * runtime/StringObject.h:
        * runtime/Structure.cpp:
        (JSC::Structure::validateFlags):
        (JSC::Structure::Structure):
        * runtime/Structure.h:
        * runtime/StructureInlines.h:
        (JSC::Structure::canCacheOwnKeys const):
        * tools/JSDollarVM.cpp:

2020-06-09  Jonathan Bedard  <jbedard@apple.com>

        JavaScriptCore: Support tvOS and watchOS builds with the public SDK
        https://bugs.webkit.org/show_bug.cgi?id=212788
        <rdar://problem/64000087>

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Link to tvOS and watchOS framework stubs.
        * Configurations/JavaScriptCore.xcconfig: Use iOS flags for all embedded platforms.

2020-06-09  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Shrink __DATA,(__data,__bss,__common) more
        https://bugs.webkit.org/show_bug.cgi?id=212863

        Reviewed by Sam Weinig.

        1. Use `unsigned` instead of `size_t` in GC size-class array. We know that this number never exceeds largeCutoff,
           which must be much maller than UINT32_MAX.
        2. Add missing const to various variables to put them DATA,__const instead of DATA,__data etc.

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::initializeSizeClassForStepSize):
        * heap/MarkedSpace.h:
        * heap/VisitRaceKey.cpp:
        * heap/VisitRaceKey.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        * inspector/agents/InspectorDebuggerAgent.h:
        * runtime/PropertyDescriptor.cpp:
        * runtime/PropertyDescriptor.h:

2020-06-08  Keith Miller  <keith_miller@apple.com>

        Removed unneeded POINTER_WIDTH macro from b3
        https://bugs.webkit.org/show_bug.cgi?id=212927

        Reviewed by Yusuke Suzuki.

        C++20 has real constexpr functions so we don't need the
        POINTER_WIDTH macro anymore.

        * b3/B3Width.h:
        (JSC::B3::pointerWidth):
        * b3/air/opcode_generator.rb:

2020-06-08  Alexey Shvayka  <shvaikalesh@gmail.com>

        JSON.stringify should throw stack overflow error
        https://bugs.webkit.org/show_bug.cgi?id=143511

        Reviewed by Ross Kirsling and Mark Lam.

        This change adds m_holderStack.size() check, reusing the limit of JSON.parse,
        and throws StackOverflowError if exceeded, aligning JSC with V8 and SpiderMonkey.
        Even with all the cyclic structure checks in place, excess is possible due to
        very deeply nested object, user-provided "toJSON" method or functional replacer.

        While Stringifier::appendStringifiedValue() and Holder::appendNextProperty()
        mutually call each other, recursion is avoided by !holderStackWasEmpty check and
        do/while loop at the end of appendStringifiedValue(), as well as cyclic structure
        check as per spec [1].

        [1]: https://tc39.es/ecma262/#sec-serializejsonobject (step 1)

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Walker::walk):

2020-06-08  Jonathan Bedard  <jbedard@apple.com>

        JavaScriptCore: Fix PLATFORM(TVOS) macro
        https://bugs.webkit.org/show_bug.cgi?id=212900
        <rdar://problem/64118879>

        Unreviewed build fix.

        * tools/JSDollarVM.cpp:
        (JSC::functionIsMemoryLimited): PLATFORM(TVOS) should be PLATFORM(APPLETV).

2020-06-07  Philippe Normand  <pnormand@igalia.com>

        Remove ENABLE_VIDEO_TRACK ifdef guards
        https://bugs.webkit.org/show_bug.cgi?id=212568

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_VIDEO_TRACK, which is now enabled by
        default under the ENABLE_VIDEO guard.

2020-06-07  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Checksum for generated files should be emitted at the end of the files
        https://bugs.webkit.org/show_bug.cgi?id=212875

        Reviewed by Mark Lam.

        If the offlineasm file generation is interrupted in the middle of the generation, it already emitted checksum.
        So next file generation can accept this broken file as a result of offlineasm and skip file generation.
        We should emit checksum at the end of files. For now, this patch takes a quick way: just iterating lines, getting
        a last line and use it for checksum comparison.

        * generator/GeneratedFile.rb:
        * offlineasm/asm.rb:

2020-06-06  Mark Lam  <mark.lam@apple.com>

        Make CodeBlockHash robust against unreasonably long source code.
        https://bugs.webkit.org/show_bug.cgi?id=212847
        <rdar://problem/64024279>

        Reviewed by Saam Barati.

        This patch adds a heuristic to avoid trying to compute the CodeBlockHash on
        unreasonably long source code strings.  This is done by first applying a length
        check and, if needed, computing the hash with an alternate method.

        This is OK to do because:
        1. CodeBlockHash is not a critical hash.
        2. In practice, reasonable source code are not that long.
        3. And if they are that long, then we are still diversifying the hash on their
           length. But if they do collide, it's OK.

        The only invariant here is that we should always produce the same hash for the
        same source string.  Since the algorithm is deterministic, this invariant is not
        violated.

        * bytecode/CodeBlockHash.cpp:
        (JSC::CodeBlockHash::CodeBlockHash):

2020-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: unify the naming scheme for agents used by instrumentation
        https://bugs.webkit.org/show_bug.cgi?id=212859

        Reviewed by Timothy Hatcher.

        Inspector agents fall into one of three categories:
         - "persistent" when Web Inspector is connected
         - "enabled" when that agent is `enable`d, such as if the corresponding tab is visible
         - "tracking" when that agent is part of a timeline recording.

        The only exception to this is the Console agent, as that exists regardless of whether Web
        Inspector is connected as it needs to preserve messages logged before Web Inspector connects.

        Also remove the "Inspector" prefix from getter/setter methods as it adds confusion if that
        agent also has subclasses (e.g. `InspectorRuntimeAgent` and `PageRuntimeAgent`).

        * inspector/JSGlobalObjectConsoleClient.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        * inspector/agents/InspectorConsoleAgent.h:

2020-06-05  Michael Saboff  <msaboff@apple.com>

        Make FAST_JIT_PERMISSIONS check in LinkBuffer::copyCompactAndLinkCode a runtime check
        https://bugs.webkit.org/show_bug.cgi?id=212825

        Reviewed by Saam Barati.

        Added useFastJITPermissions() for runtime checks of FAST_JIT_PERMISSIONS
        including the cases where it is conditional on OS settings. This is now
        used in a few places to declutter the code.

        When using the fast JIT permissions path, the JIT memory is the direct output
        of the linking. Modified BranchCompactionLinkBuffer to hold a pointer to that
        output "buffer" or a temporarily allocated buffer depending on if fast JIT
        permissions are enabled.

        Broke out the "verify hash" conditionally compiled code with a file local
        ENABLE_VERIFY_JIT_HASH macro for readability.

        * assembler/LinkBuffer.cpp:
        (JSC::BranchCompactionLinkBuffer::BranchCompactionLinkBuffer):
        (JSC::BranchCompactionLinkBuffer::~BranchCompactionLinkBuffer):
        Changed this to use a provided buffer or a malloc'ed buffer. When using
        a malloc'ed buffer, we put it in a thread local cache.

        (JSC::LinkBuffer::copyCompactAndLinkCode):
        * jit/ExecutableAllocator.h:
        (JSC::useFastJITPermissions):
        (JSC::performJITMemcpy):

2020-06-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Put dfgOpNames in __DATA,__const section instead of __DATA,__data
        https://bugs.webkit.org/show_bug.cgi?id=212840

        Reviewed by Saam Barati.

        dfgOpNames array itself is not const annotated, and the compiler makes it __DATA,__data instead of __DATA,__const.
        We should annotate it with const to ensure that this is compiled into __DATA,__const. We also remove unused CallFrame::describeFrame
        since it allocates some bss memory, while we have more sophisticated mechanism (VMInspector) for this functionality and this function
        is no longer used.

        * dfg/DFGDoesGCCheck.cpp:
        (JSC::DFG::DoesGCCheck::verifyCanGC):
        * dfg/DFGGraph.cpp:
        * dfg/DFGGraph.h:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::describeFrame): Deleted.
        * interpreter/CallFrame.h:

2020-06-05  Tadeu Zagallo  <tzagallo@apple.com>

        REGRESSION(r262523): Fix testb3
        https://bugs.webkit.org/show_bug.cgi?id=212791

        Reviewed by Mark Lam.

        * b3/testb3_1.cpp:
        (run):
        (main):

2020-06-05  Paulo Matos  <pmatos@igalia.com>

        Add missing ECMAMode header to fix NonUnified Build
        https://bugs.webkit.org/show_bug.cgi?id=212838

        Reviewed by Darin Adler.

        * bytecode/PutByValFlags.h:

2020-06-05  Saam Barati  <sbarati@apple.com>

        Audit safe to execute
        https://bugs.webkit.org/show_bug.cgi?id=207075
        <rdar://problem/59085094>

        Reviewed by Yusuke Suzuki.

        This audit found one interesting case for DOMJIT nodes. We emit safety checks
        for CallDOM/CallDOMGetter inside fixup phase and the bytecode parser. When
        determining if these nodes are safe to execute, we need to also ensure that
        these checks hold.
        
        I've also added a helper to JSDollarVM to ensure that this patch doesn't break
        LICM of DOMJIT.
        
        This patch also moves some nodes we will never hoist to return false.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::attemptToMakeCallDOM):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::classInfo):
        (JSC::DFG::Node::requiredDOMJITClassInfo):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateDOMJITGetterNoEffectsObject):
        (JSC::JSDollarVM::finishCreation):

2020-06-05  Devin Rousso  <drousso@apple.com>

        Logical Assignment: perform NamedEvaluation of anonymous functions
        https://bugs.webkit.org/show_bug.cgi?id=212679

        Reviewed by Ross Kirsling.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeAssignNode):

2020-06-05  Yusuke Suzuki  <ysuzuki@apple.com>

        DOM constructor should only accept Ref<> / ExceptionOr<Ref<>> for creation to ensure toJSNewlyCreated is always returning object
        https://bugs.webkit.org/show_bug.cgi?id=212767

        Reviewed by Darin Adler.

        * runtime/JSObject.h:
        (JSC::asObject):

2020-06-05  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541
        <rdar://problem/63781452>

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:

2020-06-05  Caitlin Potter  <caitp@igalia.com>

        [JSC] Add support for private class fields
        https://bugs.webkit.org/show_bug.cgi?id=206431

        Reviewed by Saam Barati.

        Expanding upon the earlier public class fields patch, we implement the remaining (and
        significant parts) of the instance fields (https://tc39.es/proposal-class-fields/).

        There are a variety of key changes here:

            - Parser now understands the concept of private names (Token PRIVATENAME).
            - 1 new opcode (op_get_private_name), one changed opcode (op_put_by_val_direct).
            - A method for creating Symbol objects with a null PrivateSymbolImpl is exposed as a
              LinkTimeConstant (@createPrivateSymbol).
            - Null Private Symbols are stored by name (not a valid identifier) in a JSScope, and
              are loaded from the outer scope whenever they are used by the modified opcodes.

        The changes to op_put_by_val_direct include a new bytecode operand (PutByValFlags) which are
        used to distinguish between overwriting or defining a new private field. Specifically, when it
        comes to private field accesses, it's necessary to throw an exception when accessing a field
        which does not exist, or when attempting to define a private field which has already been
        defined.

        During the evaluation of a class expression, before the class element list is evaluated (in case
        any computed property names expressions refer to a new private field), a new PrivateSymbol is
        created for each individual private field name, and stored in the class lexical scope.

        Private field names are loaded from scope before their use. This prevents multiple evaluations
        of the same class source from accessing each other's private fields, because the values of the
        symbols loaded from the class scope would be distinct. This is required by the proposal text,
        and is the key reason why we use ByVal lookups rather than ById lookups.

        To illustrate, typical private field access will look like:

        <Field Reads>
        resolve_scope      <scope=>, <currentScope>, "#x", GlobalProperty, 0
        get_from_scope     <symbol=>, <scope>, "#x", 1050624<DoNotThrowIfNotFound|GlobalProperty|NotInitialization>, 0, 0
        get_private_name   <value=>, <receiver --- probably 'this'>, <symbol>

        <Field Writes>
        resolve_scope      <scope=>, <currentScope>, "#x", GlobalProperty, 0
        get_from_scope     <symbol=>, <scope>, "#x", 1050624<DoNotThrowIfNotFound|GlobalProperty|NotInitialization>, 0, 0
        put_by_val_direct  <receiver, probably 'this'>, <symbol>, <value>, <PutByValPrivateName>

        <Field Definition>
        resolve_scope      <scope=>, <currentScope>, "#x", GlobalProperty, 0
        get_from_scope     <symbol=>, <scope>, "#x", 1050624<DoNotThrowIfNotFound|GlobalProperty|NotInitialization>, 0, 0
        put_by_val_direct  <receiver, probably 'this'>, <symbol>, <value>, <PutByValPrivateName|PutByValThrowIfExists>

        The feature is currently hidden behind the feature flag JSC::Options::usePrivateClassFields.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        * bytecode/Fits.h:
        * bytecode/LinkTimeConstant.h:
        * bytecode/PutByValFlags.cpp: Copied from Source/JavaScriptCore/bytecode/PutKind.h.
        (WTF::printInternal):
        * bytecode/PutByValFlags.h: Added.
        (JSC::PutByValFlags::create):
        (JSC::PutByValFlags::createDirect):
        (JSC::PutByValFlags::createDefinePrivateField):
        (JSC::PutByValFlags::createPutPrivateField):
        (JSC::PutByValFlags::isDirect const):
        (JSC::PutByValFlags::ecmaMode const):
        (JSC::PutByValFlags::privateFieldAccessKind const):
        (JSC::PutByValFlags::isPrivateFieldAccess const):
        (JSC::PutByValFlags::isPrivateFieldPut const):
        (JSC::PutByValFlags::isPrivateFieldAdd const):
        (JSC::PutByValFlags::PutByValFlags):
        * bytecode/PutKind.h:
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::generateUnlinkedFunctionCodeBlock):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::instantiateLexicalVariables):
        (JSC::BytecodeGenerator::emitDirectGetByVal):
        (JSC::BytecodeGenerator::emitDirectPutByVal):
        (JSC::BytecodeGenerator::emitDefinePrivateField):
        (JSC::BytecodeGenerator::emitPrivateFieldPut):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitDeclarePrivateFieldNames):
        (JSC::PropertyListNode::emitBytecode):
        (JSC::PropertyListNode::emitPutConstantProperty):
        (JSC::DotAccessorNode::emitBytecode):
        (JSC::BaseDotNode::emitGetPropertyValue):
        (JSC::BaseDotNode::emitPutProperty):
        (JSC::FunctionCallDotNode::emitBytecode):
        (JSC::PostfixNode::emitDot):
        (JSC::PrefixNode::emitDot):
        (JSC::AssignDotNode::emitBytecode):
        (JSC::ReadModifyDotNode::emitBytecode):
        (JSC::DefineFieldNode::emitBytecode):
        (JSC::ClassExprNode::emitBytecode):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ecmaMode):
        (JSC::DFG::ecmaMode<OpPutByValDirect>):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutById):
        * generator/DSL.rb:
        * jit/ICStats.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        (JSC::JITPutByIdGenerator::slowPathFunction):
        * jit/JITInlineCacheGenerator.h:
        (JSC::JITPutByIdGenerator::JITPutByIdGenerator):
        * jit/JITInlines.h:
        (JSC::JIT::ecmaMode):
        (JSC::JIT::ecmaMode<OpPutById>):
        (JSC::JIT::ecmaMode<OpPutByValDirect>):
        (JSC::JIT::privateFieldAccessKind):
        (JSC::JIT::privateFieldAccessKind<OpPutByValDirect>):
        * jit/JITOperations.cpp:
        (JSC::putPrivateField):
        (JSC::definePrivateField):
        * jit/JITOperations.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitPutByValWithCachedId):
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        * jit/Repatch.cpp:
        (JSC::appropriateGenericPutByIdFunction):
        (JSC::appropriateOptimizingPutByIdFunction):
        (JSC::tryCachePutByID):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LLIntSlowPaths.h:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createDotAccess):
        (JSC::ASTBuilder::isPrivateLocation):
        (JSC::ASTBuilder::makeFunctionCallNode):
        (JSC::ASTBuilder::makeAssignNode):
        * parser/Lexer.cpp:
        (JSC::Lexer<LChar>::parseIdentifier):
        (JSC::Lexer<UChar>::parseIdentifier):
        (JSC::Lexer<CharacterType>::parseIdentifierSlowCase):
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/NodeConstructors.h:
        (JSC::BaseDotNode::BaseDotNode):
        (JSC::DotAccessorNode::DotAccessorNode):
        (JSC::FunctionCallDotNode::FunctionCallDotNode):
        (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode):
        (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode):
        (JSC::HasOwnPropertyFunctionCallDotNode::HasOwnPropertyFunctionCallDotNode):
        (JSC::AssignDotNode::AssignDotNode):
        (JSC::ReadModifyDotNode::ReadModifyDotNode):
        * parser/Nodes.cpp:
        (JSC::PropertyListNode::shouldCreateLexicalScopeForClass):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isPrivateLocation const):
        (JSC::BaseDotNode::base const):
        (JSC::BaseDotNode::identifier const):
        (JSC::BaseDotNode::type const):
        (JSC::BaseDotNode::isPrivateField const):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseVariableDeclarationList):
        (JSC::Parser<LexerType>::parseDestructuringPattern):
        (JSC::Parser<LexerType>::parseClass):
        (JSC::Parser<LexerType>::parseInstanceFieldInitializerSourceElements):
        (JSC::Parser<LexerType>::usePrivateName):
        (JSC::Parser<LexerType>::parseMemberExpression):
        (JSC::Parser<LexerType>::parseUnaryExpression):
        (JSC::Parser<LexerType>::printUnexpectedTokenText):
        * parser/Parser.h:
        (JSC::Scope::isPrivateNameScope const):
        (JSC::Scope::setIsPrivateNameScope):
        (JSC::Scope::hasPrivateName):
        (JSC::Scope::copyUndeclaredPrivateNamesTo):
        (JSC::Scope::hasUsedButUndeclaredPrivateNames const):
        (JSC::Scope::usePrivateName):
        (JSC::Scope::declarePrivateName):
        (JSC::Parser::findPrivateNameScope):
        (JSC::Parser::privateNameScope):
        (JSC::Parser::copyUndeclaredPrivateNamesToOuterScope):
        (JSC::Parser::matchAndUpdate):
        (JSC::Parser<LexerType>::parse):
        (JSC::parse):
        * parser/ParserTokens.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createDotAccess):
        (JSC::SyntaxChecker::operatorStackPop):
        * parser/VariableEnvironment.cpp:
        (JSC::VariableEnvironment::operator=):
        (JSC::VariableEnvironment::swap):
        (JSC::CompactVariableEnvironment::CompactVariableEnvironment):
        * parser/VariableEnvironment.h:
        (JSC::VariableEnvironmentEntry::isPrivateName const):
        (JSC::VariableEnvironmentEntry::setIsPrivateName):
        (JSC::PrivateNameEntry::PrivateNameEntry):
        (JSC::PrivateNameEntry::isUsed const):
        (JSC::PrivateNameEntry::isDeclared const):
        (JSC::PrivateNameEntry::setIsUsed):
        (JSC::PrivateNameEntry::setIsDeclared):
        (JSC::PrivateNameEntry::bits const):
        (JSC::PrivateNameEntry::operator== const):
        (JSC::VariableEnvironment::VariableEnvironment):
        (JSC::VariableEnvironment::size const):
        (JSC::VariableEnvironment::mapSize const):
        (JSC::VariableEnvironment::declarePrivateName):
        (JSC::VariableEnvironment::usePrivateName):
        (JSC::VariableEnvironment::privateNames const):
        (JSC::VariableEnvironment::privateNamesSize const):
        (JSC::VariableEnvironment::hasPrivateName):
        (JSC::VariableEnvironment::copyPrivateNamesTo const):
        (JSC::VariableEnvironment::copyUndeclaredPrivateNamesTo const):
        (JSC::VariableEnvironment::RareData::RareData):
        (JSC::VariableEnvironment::getOrAddPrivateName):
        * runtime/CachedTypes.cpp:
        (JSC::CachedOptional::decodeAsPtr const):
        (JSC::CachedVariableEnvironmentRareData::encode):
        (JSC::CachedVariableEnvironmentRareData::decode const):
        (JSC::CachedVariableEnvironment::encode):
        (JSC::CachedVariableEnvironment::decode const):
        (JSC::CachedSymbolTableRareData::encode):
        (JSC::CachedSymbolTableRareData::decode const):
        (JSC::CachedSymbolTable::encode):
        (JSC::CachedSymbolTable::decode const):
        * runtime/CodeCache.cpp:
        (JSC::generateUnlinkedCodeBlockImpl):
        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        * runtime/CommonIdentifiers.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::createInvalidPrivateNameError):
        (JSC::createRedefinedPrivateNameError):
        * runtime/ExceptionHelpers.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::createPrivateSymbol):
        (JSC::JSGlobalObject::init):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPrivateFieldSlot):
        (JSC::JSObject::getPrivateField):
        (JSC::JSObject::putPrivateField):
        (JSC::JSObject::definePrivateField):
        * runtime/JSScope.cpp:
        (JSC::JSScope::collectClosureVariablesUnderTDZ):
        * runtime/OptionsList.h:
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTable::cloneScopePart):
        * runtime/SymbolTable.h:

2020-06-05  Paulo Matos  <pmatos@igalia.com>

        Fix includes to fix latest non-unified builds breakages
        https://bugs.webkit.org/show_bug.cgi?id=212802

        Reviewed by Adrian Perez de Castro.

        * dfg/DFGDoesGCCheck.cpp:
        * runtime/JSDateMath.h:

2020-06-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Report extra memory allocation from PropertyTable
        https://bugs.webkit.org/show_bug.cgi?id=212793

        Reviewed by Saam Barati.

        This patch adds extra memory reporting from PropertyTable to make GC
        responsive to the increase of memory in PropertyTable.

        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::add):
        (JSC::PropertyTable::remove):
        (JSC::PropertyTable::rehash):
        (JSC::PropertyTable::dataSize):
        * runtime/PropertyTable.cpp:
        (JSC::PropertyTable::finishCreation):
        (JSC::PropertyTable::visitChildren):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyTable):
        * runtime/StructureInlines.h:
        (JSC::Structure::add):
        (JSC::Structure::remove):

2020-06-04  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262583.
        https://bugs.webkit.org/show_bug.cgi?id=212799

        Internal source code has the same bug, needs to be landed
        after fixing internal source

        Reverted changeset:

        "DOM constructor should only accept Ref<> / ExceptionOr<Ref<>>
        for creation to ensure toJSNewlyCreated is always returning
        object"
        https://bugs.webkit.org/show_bug.cgi?id=212767
        https://trac.webkit.org/changeset/262583

2020-06-04  Michael Saboff  <msaboff@apple.com>

        Add a Thread Specific Cache for LinkBuffer::CompactAndLinkCode()
        https://bugs.webkit.org/show_bug.cgi?id=212765

        Reviewed by Saam Barati.

        Added a thread local buffer for CPU types that use a second buffer when compacting.
        This is very similary to the work done in https://bugs.webkit.org/show_bug.cgi?id=212562.

        * assembler/LinkBuffer.cpp:
        (JSC::threadSpecificBranchCompactionLinkBuffer):
        (JSC::BranchCompactionLinkBuffer::BranchCompactionLinkBuffer):
        (JSC::BranchCompactionLinkBuffer::~BranchCompactionLinkBuffer):
        (JSC::BranchCompactionLinkBuffer::data):
        (JSC::BranchCompactionLinkBuffer::takeBufferIfLarger):
        (JSC::BranchCompactionLinkBuffer::size):
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2020-06-04  Mark Lam  <mark.lam@apple.com>

        Add Options::validateDoesGC() for turning DoesGC validation on/off.
        https://bugs.webkit.org/show_bug.cgi?id=212773

        Reviewed by Saam Barati.

        It will default to on if ASSERT_ENABLED because we want testing to be done with
        the validation on.  When needed, we can turn it off if we need to e.g. to
        de-clutter disassembly dumps while debugging.

        If Options::validateDoesGC() is false, we turn off JIT code emission for this
        check, as well as skip the validation checks.  There are still places in C++
        code that store to DoesGC::m_value without checking Options::validateDoesGC().
        It doesn't hurt to just let these stores proceed, and performance-wise, it's
        probably cheaper to just do the store unconditionally than to gate it on a load of
        Options::validateDoesGC() first.

        Also made it explicit that the check on validateDFGDoesGC is a constexpr check.

        * dfg/DFGDoesGCCheck.cpp:
        (JSC::DFG::DoesGCCheck::verifyCanGC):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * runtime/OptionsList.h:

2020-06-04  Ross Kirsling  <ross.kirsling@sony.com>

        Intl classes should have meaningful @@toStringTag values
        https://bugs.webkit.org/show_bug.cgi?id=212769

        Reviewed by Yusuke Suzuki.

        Implementation of https://github.com/tc39/ecma402/pull/430, which achieved consensus this week.
        This ensures we get "[object Intl.Collator]" (etc.) instead "[object Object]" for older Intl classes.

        * runtime/IntlCollatorPrototype.cpp:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        * runtime/IntlNumberFormatPrototype.cpp:
        * runtime/IntlPluralRulesPrototype.cpp:

2020-06-04  Alexey Shvayka  <shvaikalesh@gmail.com>

        GetMethod isn't performed properly on iterators
        https://bugs.webkit.org/show_bug.cgi?id=212771

        Reviewed by Saam Barati.

        Before this change, iterator's "return" and "throw" methods with value of `null` were
        considered incorrect rather than missing, causing TypeError to be thrown.

        This patch aligns method lookup of iterators with the spec [1], V8, and SpiderMonkey
        by utilizing isUndefinedOrNull(), which doesn't special-case [[IsHTMLDDA]] objects [2],
        fixing a few Annex B tests.

        for/of microbenchmarks are neutral.

        [1]: https://tc39.es/ecma262/#sec-getmethod (step 3)
        [2]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot

        * builtins/AsyncFromSyncIteratorPrototype.js:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitIteratorGenericClose):
        (JSC::BytecodeGenerator::emitGetAsyncIterator):
        (JSC::BytecodeGenerator::emitDelegateYield):
        * runtime/IteratorOperations.cpp:
        (JSC::iteratorClose):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayViewWithArguments):

2020-06-04  Mark Lam  <mark.lam@apple.com>

        Reduce DFGDoesGCCheck to only storing a uint32_t.
        https://bugs.webkit.org/show_bug.cgi?id=212734

        Reviewed by Saam Barati and Caio Lima.

        This patch changes the encoding of DoesGCCheck so that it will fit better in a
        uint32_t.  This has the following benefits:
        1. speed improvement for debug builds because it now takes less instructions
           (especially in JITted code) to store to DoesGCCheck::m_value.
        2. enables this check for 32-bit platforms as well.

        Fun fact: we currently have 373 DFG::NodeTypes.  Hence, 9 bits for nodeOp.

        The new encoding provides 21 bis for the nodeIndex.  This gives us up to 2097152
        node indexes.  In my experience, I've never seen more than 3 decimal digits for
        the nodeIndex so far.  If we ever find that we need more than 21 bits of nodeIndex,
        we have 2 options to deal with it:

        1. We can just ignore the high bits.  After all, it is the nodeOp that is the
           most interesting piece of data we need to debug doesGC issues.

        2. We can make DoesGCCheck use uint64_t for storage.  This encoding automatically
           scales to 64-bit, while still allowing the more efficient form of storing a
           32-bit immediate to be used for the common cases.

        This patch also makes ENABLE_DFG_DOES_GC_VALIDATION dependent on ENABLE(DFG_JIT).
        DoesGC is only relevant for the DFG and FTL JITs.

        * dfg/DFGDoesGCCheck.cpp:
        (JSC::DFG::DoesGCCheck::verifyCanGC):
        * dfg/DFGDoesGCCheck.h:
        (JSC::DFG::DoesGCCheck::encode):
        (JSC::DFG::DoesGCCheck::expectDoesGC const):
        (JSC::DFG::DoesGCCheck::isSpecial const):
        (JSC::DFG::DoesGCCheck::special):
        (JSC::DFG::DoesGCCheck::nodeOp):
        (JSC::DFG::DoesGCCheck::nodeIndex):
        (JSC::DFG::DoesGCCheck::expectDoesGC): Deleted.
        (JSC::DFG::DoesGCCheck::isSpecial): Deleted.
        (JSC::DFG::DoesGCCheck::specialIndex): Deleted.
        (JSC::DFG::DoesGCCheck::bits): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * heap/Heap.h:

2020-06-04  Tim Horton  <timothy_horton@apple.com>

        Work around broken system version macro
        https://bugs.webkit.org/show_bug.cgi?id=212726

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig:

2020-06-04  Andy Estes  <aestes@apple.com>

        [watchOS] Re-enable content filtering in the simulator build
        https://bugs.webkit.org/show_bug.cgi?id=212711
        <rdar://problem/63938350>

        Reviewed by Wenson Hsieh.

        * Configurations/FeatureDefines.xcconfig:

2020-06-04  Mark Lam  <mark.lam@apple.com>

        SpeculativeJIT::compileDateGet()'s slow path does not need an exception check.
        https://bugs.webkit.org/show_bug.cgi?id=212645

        Reviewed by Yusuke Suzuki.

        SpeculativeJIT::compileDateGet() implements a bunch of Date intrinsics which call
        into a C++ operation function do their work.  However, the call to these operation
        functions were done using a slow path generator configured to automatically
        emit exception checks after the call.  These exception checks are unneeded because
        those functions will not throw any exceptions.

        This issue was found with JSC stress test runs on a debug build.  The doesGC
        verifier was failing on the exceptionFuzz/date-format-xparb.js test.  The reason
        is because doesGC does not expect any these Date intrinsics to throw any exceptions,
        but SpeculativeJIT was emitting the unneeded exception checks there.  These
        exception check sites get turned into throw sites by the exceptionFuzzer, and
        they allocate an Error object there.  This allocation made the doesGC verifier
        not happy.

        This patch fixes this issue by changing SpeculativeJIT::compileDateGet() to
        pass ExceptionCheckRequirement::CheckNotNeeded to the slow path generator.

        The patch also proves that all the operation functions cannot throw any exceptions.
        Previously, the operations passes a VM& to the Date functions.  The purpose for
        doing this is so that the Date functions can work with a few date cache data
        structures stored as VM fields.

        This patch refactors those VM fields into a VM::DateCache struct, and changed all
        those Date functions to take a VM::DateCache& instead of a VM&.  Since the Date
        functions no longer take a VM&, this proves that they cannot throw because they
        would need a VM& to make a ThrowScope in order to throw.

        Update: Yusuke pointed out that the lack of a JSGlobalObject* argument is sufficient
        to guarantee that the Date functions cannot throw.  However, we'll keep this
        DateCache refactoring since it provides additional info that the Date functions
        only operate on the DateCache fields and nothing else in VM.

        Also removed DFG::JITCompile's fastExceptionCheck() which is unused.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::fastExceptionCheck): Deleted.
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileDateGet):
        * runtime/DateConstructor.cpp:
        (JSC::millisecondsFromComponents):
        (JSC::callDate):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::calculateGregorianDateTime const):
        (JSC::DateInstance::calculateGregorianDateTimeUTC const):
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        (JSC::formateDateInstance):
        (JSC::dateProtoFuncToISOString):
        (JSC::dateProtoFuncGetFullYear):
        (JSC::dateProtoFuncGetUTCFullYear):
        (JSC::dateProtoFuncGetMonth):
        (JSC::dateProtoFuncGetUTCMonth):
        (JSC::dateProtoFuncGetDate):
        (JSC::dateProtoFuncGetUTCDate):
        (JSC::dateProtoFuncGetDay):
        (JSC::dateProtoFuncGetUTCDay):
        (JSC::dateProtoFuncGetHours):
        (JSC::dateProtoFuncGetUTCHours):
        (JSC::dateProtoFuncGetMinutes):
        (JSC::dateProtoFuncGetUTCMinutes):
        (JSC::dateProtoFuncGetSeconds):
        (JSC::dateProtoFuncGetUTCSeconds):
        (JSC::dateProtoFuncGetTimezoneOffset):
        (JSC::setNewValueFromTimeArgs):
        (JSC::setNewValueFromDateArgs):
        (JSC::dateProtoFuncSetYear):
        (JSC::dateProtoFuncGetYear):
        * runtime/JSDateMath.cpp:
        (JSC::localTimeOffset):
        (JSC::gregorianDateTimeToMS):
        (JSC::msToGregorianDateTime):
        (JSC::parseDate):
        * runtime/JSDateMath.h:
        * runtime/VM.cpp:
        (JSC::VM::resetDateCache):
        * runtime/VM.h:

2020-06-04  Paulo Matos  <pmatos@igalia.com>

        Fix 32bit build broken at r262513
        https://bugs.webkit.org/show_bug.cgi?id=212735

        Unreviewed Gardening.

        Proper fix is being worked out under https://bugs.webkit.org/show_bug.cgi?id=212734

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):

2020-06-03  Tadeu Zagallo  <tzagallo@apple.com>

        Disable B3 hoistLoopInvariantValues by default
        https://bugs.webkit.org/show_bug.cgi?id=212511
        <rdar://problem/63813245>

        Reviewed by Mark Lam.

        The hoistLoopInvariantValues optimization in B3 does not calculate the cost of hoisting the candidates.
        For example, in the test case provided with the bug, a switch inside a loop can lead to hoisting the body
        of several switch cases which would never be executed. Other than leading to worse runtime, this also
        increases the pressure in the register allocate, leading to worse compile times (~10x worse in this case).
        I have added a FIXME to consider adding cost calculation and re-enabling this pass, but given that we
        already have LICM in DFG, it should be ok to disable it for now.

        * b3/B3Generate.cpp:
        (JSC::B3::generateToAir):
        * runtime/OptionsList.h:

2020-06-03  Mark Lam  <mark.lam@apple.com>

        Gardening: fix broken Windows debug build.
        https://bugs.webkit.org/show_bug.cgi?id=212680

        Not reviewed.

        * dfg/DFGDoesGCCheck.cpp:
        (JSC::DFG::DoesGCCheck::verifyCanGC):
        * dfg/DFGDoesGCCheck.h:

2020-06-03  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Enhance DoesGC verification to print more useful info when verification fails.
        https://bugs.webkit.org/show_bug.cgi?id=212680

        Reviewed by Yusuke Susuki.

        When DoesGC verification fails, the first step of debugging it would be to find
        out what and which DFG node resulted in the failed verification.  In pre-existing
        code, all we get is an assertion failure.

        This patch makes it so that the verifier will dump useful info.  Here's an example:

            Error: DoesGC failed @ D@34 DateGetInt32OrNaN in #DtCHMz:[0x1135bd1d0->0x1135bcab0->0x1135e5c80, DFGFunctionCall, 150 (DidTryToEnterInLoop)]
                [0] frame 0x7ffee8285660 {
                  name: 
                  sourceURL: 
                  isInlinedFrame: false
                  callee: 0x1135f6820
                  returnPC: 0x50ce61248ae6
                  callerFrame: 0x7ffee82856f0
                  rawLocationBits: 5 0x5
                  codeBlock: 0x1135bd1d0 #DtCHMz:[0x1135bd1d0->0x1135bcab0->0x1135e5c80, DFGFunctionCall, 150 (DidTryToEnterInLoop)]
                    hasCodeOrigins: true
                    callSiteIndex: 5 of 13
                    jitCode: 0x113020200 start 0x50ce61214c60 end 0x50ce61219b00
                    line: 1
                    column: 60
                  EntryFrame: 0x7ffee8285860
                }
                [1] frame 0x7ffee82856f0 {
                  name: 
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1135f65a0
                  returnPC: 0x50ce61227e99
                  callerFrame: 0x7ffee8285770
                  rawLocationBits: 4 0x4
                  codeBlock: 0x1135bd0a0 #BU6Zcd:[0x1135bd0a0->0x1135bc260->0x1135e5180, DFGFunctionCall, 112 (DidTryToEnterInLoop)]
                    hasCodeOrigins: true
                    callSiteIndex: 4 of 12
                    jitCode: 0x113004000 start 0x50ce61212c60 end 0x50ce61214960
                    line: 26
                    column: 22
                  EntryFrame: 0x7ffee8285860
                }
                [2] frame 0x7ffee8285770 {
                  name: 
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1135f64e0
                  returnPC: 0x108058eb1
                  callerFrame: 0x7ffee82857e0
                  rawLocationBits: 1001 0x3e9
                  codeBlock: 0x1135bc130 #DAS9xe:[0x1135bc130->0x1135e5100, BaselineFunctionCall, 1149]
                    bc#1001 of 1149
                    line: 417
                    column: 38
                  EntryFrame: 0x7ffee8285860
                }
                [3] frame 0x7ffee82857e0 {
                  name: global code
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1130f97b8
                  returnPC: 0x108039043
                  callerFrame: 0x0
                  rawLocationBits: 23 0x17
                  codeBlock: 0x1135bc000 <global>#CukXvt:[0x1135bc000->0x1130cd768, LLIntGlobal, 81]
                    bc#23 of 81
                    line: 425
                    column: 3
                  EntryFrame: 0x7ffee8285860
                }

            ASSERTION FAILED: expectDoesGC()

        The error message now comes with the node index, NodeType, codeBlock which this
        failure was found in, and the JS call stack that led to the failure.

        Changes made:

        1. Introduced a DoesGCCheck value that is used to encode some of the above data.

           Previously, we only recorded whether doesGC() returns true or false for the
           Node.  Now, we record the nodeIndex and nodeOp as well.

           Note that we also set DoesGC expectations for OSR exits.  So, DoesGCCheck
           includes Special cases for those.

        2. Added store64(TrustedImm64 imm, const void* address) emitters for X86_64 and ARM64.
           Also added a test for this new emitter in testmasm.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::store64):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::store64):
        * assembler/testmasm.cpp:
        (JSC::testStore64Imm64AddressPointer):
        (JSC::run):
        * dfg/DFGDoesGCCheck.cpp: Copied from Source/JavaScriptCore/dfg/DFGDoesGCCheck.cpp.
        * dfg/DFGDoesGCCheck.h: Copied from Source/JavaScriptCore/dfg/DFGDoesGCCheck.h.
        * dfg/DFGGraph.cpp:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::operationCompileOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        (JSC::FTL::operationCompileFTLOSRExit):
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::tryAllocateSlow):
        (JSC::CompleteSubspace::reallocatePreciseAllocationNonVirtual):
        * heap/CompleteSubspaceInlines.h:
        (JSC::CompleteSubspace::allocateNonVirtual):
        * heap/DeferGC.h:
        (JSC::DeferGC::~DeferGC):
        * heap/GCDeferralContextInlines.h:
        (JSC::GCDeferralContext::~GCDeferralContext):
        * heap/Heap.cpp:
        (JSC::Heap::collectNow):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectIfNecessaryOrDefer):
        * heap/Heap.h:
        (JSC::Heap::addressOfDoesGC):
        (JSC::Heap::setDoesGCExpectation):
        (JSC::Heap::verifyCanGC):
        (JSC::Heap::expectDoesGC const): Deleted.
        (JSC::Heap::setExpectDoesGC): Deleted.
        (JSC::Heap::addressOfExpectDoesGC): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::acquireAccess):
        (JSC::Heap::stopIfNecessary):
        * heap/LocalAllocatorInlines.h:
        (JSC::LocalAllocator::allocate):
        * heap/PreciseAllocation.cpp:
        (JSC::PreciseAllocation::tryCreate):
        (JSC::PreciseAllocation::createForLowerTier):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::JSString::toAtomString const):
        (JSC::JSString::toExistingAtomString const):
        (JSC::JSString::value const):
        (JSC::JSString::tryGetValue const):
        (JSC::JSRopeString::unsafeView const):
        (JSC::JSRopeString::viewWithUnderlyingString const):
        (JSC::JSString::unsafeView const):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):

2020-06-03  Mark Lam  <mark.lam@apple.com>

        DFGSSAConversionPhase.cpp needs to #include OperandsInlines.h.
        https://bugs.webkit.org/show_bug.cgi?id=212687

        Reviewed by Keith Miller.

        Without this, strange build failures can happen with unified builds.

        For example, the Windows build started failing due a linkage error in this file
        when the patch from https://bugs.webkit.org/show_bug.cgi?id=212680 landed.
        212680 introduced a new .cpp file, and that probably bumped DFGSSAConversionPhase.cpp
        into another unified unit, thereby depriving it from seeing the OperandsInlines.h
        #include'd by another .cpp.

        * dfg/DFGSSAConversionPhase.cpp:

2020-06-03  Mark Lam  <mark.lam@apple.com>

        Fix non-unified --jsc-only build.
        https://bugs.webkit.org/show_bug.cgi?id=212707

        Reviewed by Yusuke Suzuki.

        These files need JSGlobalObjectInlines.h.  But rather than adding yet another
        #include, we'll just remove many individual ones and just #include JSCInlines.h
        instead.

        * wasm/js/JSToWasmICCallee.cpp:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        * wasm/js/WebAssemblyModulePrototype.cpp:
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:

2020-06-03  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Jonathan Bedard.

        Update inspector protocol generator and rebaseline the tests.

        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * yarr/generateYarrUnicodePropertyTables.py:

2020-06-02  Mark Lam  <mark.lam@apple.com>

        Rolling out r262475 to unbreak Windows bot.
        https://bugs.webkit.org/show_bug.cgi?id=212680

        Not reviewed.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerARM64.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/testmasm.cpp:
        (JSC::testCountTrailingZeros64WithoutNullCheck):
        (JSC::run):
        (JSC::testStore64Imm64AddressPointer): Deleted.
        * dfg/DFGDoesGCCheck.cpp: Removed.
        * dfg/DFGDoesGCCheck.h: Removed.
        * dfg/DFGGraph.cpp:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::operationCompileOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        (JSC::FTL::operationCompileFTLOSRExit):
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::tryAllocateSlow):
        (JSC::CompleteSubspace::reallocatePreciseAllocationNonVirtual):
        * heap/CompleteSubspaceInlines.h:
        (JSC::CompleteSubspace::allocateNonVirtual):
        * heap/DeferGC.h:
        (JSC::DeferGC::~DeferGC):
        * heap/GCDeferralContextInlines.h:
        (JSC::GCDeferralContext::~GCDeferralContext):
        * heap/Heap.cpp:
        (JSC::Heap::collectNow):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectIfNecessaryOrDefer):
        * heap/Heap.h:
        (JSC::Heap::expectDoesGC const):
        (JSC::Heap::setExpectDoesGC):
        (JSC::Heap::addressOfExpectDoesGC):
        (JSC::Heap::addressOfDoesGC): Deleted.
        (JSC::Heap::setDoesGCExpectation): Deleted.
        (JSC::Heap::verifyCanGC): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::acquireAccess):
        (JSC::Heap::stopIfNecessary):
        * heap/LocalAllocatorInlines.h:
        (JSC::LocalAllocator::allocate):
        * heap/PreciseAllocation.cpp:
        (JSC::PreciseAllocation::tryCreate):
        (JSC::PreciseAllocation::createForLowerTier):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::JSString::toAtomString const):
        (JSC::JSString::toExistingAtomString const):
        (JSC::JSString::value const):
        (JSC::JSString::tryGetValue const):
        (JSC::JSRopeString::unsafeView const):
        (JSC::JSRopeString::viewWithUnderlyingString const):
        (JSC::JSString::unsafeView const):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):

2020-06-02  Mark Lam  <mark.lam@apple.com>

        Enhance DoesGC verification to print more useful info when verification fails.
        https://bugs.webkit.org/show_bug.cgi?id=212680

        Reviewed by Yusuke Suzuki.

        When DoesGC verification fails, the first step of debugging it would be to find
        out what and which DFG node resulted in the failed verification.  In pre-existing
        code, all we get is an assertion failure.

        This patch makes it so that the verifier will dump useful info.  Here's an example:

            Error: DoesGC failed @ D@34 DateGetInt32OrNaN in #DtCHMz:[0x1135bd1d0->0x1135bcab0->0x1135e5c80, DFGFunctionCall, 150 (DidTryToEnterInLoop)]
                [0] frame 0x7ffee8285660 {
                  name: 
                  sourceURL: 
                  isInlinedFrame: false
                  callee: 0x1135f6820
                  returnPC: 0x50ce61248ae6
                  callerFrame: 0x7ffee82856f0
                  rawLocationBits: 5 0x5
                  codeBlock: 0x1135bd1d0 #DtCHMz:[0x1135bd1d0->0x1135bcab0->0x1135e5c80, DFGFunctionCall, 150 (DidTryToEnterInLoop)]
                    hasCodeOrigins: true
                    callSiteIndex: 5 of 13
                    jitCode: 0x113020200 start 0x50ce61214c60 end 0x50ce61219b00
                    line: 1
                    column: 60
                  EntryFrame: 0x7ffee8285860
                }
                [1] frame 0x7ffee82856f0 {
                  name: 
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1135f65a0
                  returnPC: 0x50ce61227e99
                  callerFrame: 0x7ffee8285770
                  rawLocationBits: 4 0x4
                  codeBlock: 0x1135bd0a0 #BU6Zcd:[0x1135bd0a0->0x1135bc260->0x1135e5180, DFGFunctionCall, 112 (DidTryToEnterInLoop)]
                    hasCodeOrigins: true
                    callSiteIndex: 4 of 12
                    jitCode: 0x113004000 start 0x50ce61212c60 end 0x50ce61214960
                    line: 26
                    column: 22
                  EntryFrame: 0x7ffee8285860
                }
                [2] frame 0x7ffee8285770 {
                  name: 
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1135f64e0
                  returnPC: 0x108058eb1
                  callerFrame: 0x7ffee82857e0
                  rawLocationBits: 1001 0x3e9
                  codeBlock: 0x1135bc130 #DAS9xe:[0x1135bc130->0x1135e5100, BaselineFunctionCall, 1149]
                    bc#1001 of 1149
                    line: 417
                    column: 38
                  EntryFrame: 0x7ffee8285860
                }
                [3] frame 0x7ffee82857e0 {
                  name: global code
                  sourceURL: date-format-xparb.js
                  isInlinedFrame: false
                  callee: 0x1130f97b8
                  returnPC: 0x108039043
                  callerFrame: 0x0
                  rawLocationBits: 23 0x17
                  codeBlock: 0x1135bc000 <global>#CukXvt:[0x1135bc000->0x1130cd768, LLIntGlobal, 81]
                    bc#23 of 81
                    line: 425
                    column: 3
                  EntryFrame: 0x7ffee8285860
                }

            ASSERTION FAILED: expectDoesGC()

        The error message now comes with the node index, NodeType, codeBlock which this
        failure was found in, and the JS call stack that led to the failure.

        Changes made:

        1. Introduced a DoesGCCheck value that is used to encode some of the above data.

           Previously, we only recorded whether doesGC() returns true or false for the
           Node.  Now, we record the nodeIndex and nodeOp as well.

           Note that we also set DoesGC expectations for OSR exits.  So, DoesGCCheck
           includes Special cases for those.

        2. Added store64(TrustedImm64 imm, const void* address) emitters for X86_64 and ARM64.
           Also added a test for this new emitter in testmasm.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::store64):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::store64):
        * assembler/testmasm.cpp:
        (JSC::testStore64Imm64AddressPointer):
        (JSC::run):
        * dfg/DFGDoesGCCheck.cpp: Added.
        (JSC::DFG::DoesGCCheck::verifyCanGC):
        * dfg/DFGDoesGCCheck.h: Added.
        (JSC::DFG::DoesGCCheck::DoesGCCheck):
        (JSC::DFG::DoesGCCheck::encode):
        (JSC::DFG::DoesGCCheck::set):
        (JSC::DFG::DoesGCCheck::expectDoesGC):
        (JSC::DFG::DoesGCCheck::special):
        (JSC::DFG::DoesGCCheck::nodeIndex):
        (JSC::DFG::DoesGCCheck::nodeOp):
        (JSC::DFG::DoesGCCheck::isSpecial):
        (JSC::DFG::DoesGCCheck::specialIndex):
        (JSC::DFG::DoesGCCheck::bits):
        * dfg/DFGGraph.cpp:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::operationCompileOSRExit):
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        (JSC::FTL::operationCompileFTLOSRExit):
        * heap/CompleteSubspace.cpp:
        (JSC::CompleteSubspace::tryAllocateSlow):
        (JSC::CompleteSubspace::reallocatePreciseAllocationNonVirtual):
        * heap/CompleteSubspaceInlines.h:
        (JSC::CompleteSubspace::allocateNonVirtual):
        * heap/DeferGC.h:
        (JSC::DeferGC::~DeferGC):
        * heap/GCDeferralContextInlines.h:
        (JSC::GCDeferralContext::~GCDeferralContext):
        * heap/Heap.cpp:
        (JSC::Heap::collectNow):
        (JSC::Heap::collectAsync):
        (JSC::Heap::collectSync):
        (JSC::Heap::stopIfNecessarySlow):
        (JSC::Heap::collectIfNecessaryOrDefer):
        * heap/Heap.h:
        (JSC::Heap::addressOfDoesGC):
        (JSC::Heap::setDoesGCExpectation):
        (JSC::Heap::verifyCanGC):
        (JSC::Heap::expectDoesGC const): Deleted.
        (JSC::Heap::setExpectDoesGC): Deleted.
        (JSC::Heap::addressOfExpectDoesGC): Deleted.
        * heap/HeapInlines.h:
        (JSC::Heap::acquireAccess):
        (JSC::Heap::stopIfNecessary):
        * heap/LocalAllocatorInlines.h:
        (JSC::LocalAllocator::allocate):
        * heap/PreciseAllocation.cpp:
        (JSC::PreciseAllocation::tryCreate):
        (JSC::PreciseAllocation::createForLowerTier):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::JSString::toAtomString const):
        (JSC::JSString::toExistingAtomString const):
        (JSC::JSString::value const):
        (JSC::JSString::tryGetValue const):
        (JSC::JSRopeString::unsafeView const):
        (JSC::JSRopeString::viewWithUnderlyingString const):
        (JSC::JSString::unsafeView const):
        * runtime/RegExpMatchesArray.h:
        (JSC::createRegExpMatchesArray):

2020-06-02  Mark Lam  <mark.lam@apple.com>

        VMInspector APIs should be taking a VM* instead of a JSGlobalObject*.
        https://bugs.webkit.org/show_bug.cgi?id=212676

        Reviewed by Saam Barati and Robin Morisset.

        This because:
        1. None of the functions currently taking a JSGlobalObject* actually need the
           globalObject.  All of them need the VM.
        2. The role of the VMInspector is to enable inspection of the VM.  By requiring
           that it be passed a JSGlobalObject*, we were actually preventing the VMInspector
           from being used in code that have a VM to inspect but don't have a JSGlobalObject
           to use.

        The reason I'm choosing to pass VM* instead of VM& is because it makes these
        functions trivial to call using lldb interactively.  The VMInspector functions
        are also intentionally designed so that they can be used for this purpose.
        On occasion, I may have to cast literal numbers (addresses) to VM*.  Technically,
        I could cast a number to VM* and dereference it to get a VM& too.  However, at
        present, lldb is often buggy and not always reliable with casts.  I would like to
        lessen the chance that lldb fails on me when I'm deep in the middle of a debugging
        session, and have a need to call one of these functions.

        * tools/JSDollarVM.cpp:
        (JSC::functionGC):
        (JSC::functionEdenGC):
        (JSC::functionCodeBlockForFrame):
        (JSC::codeBlockFromArg):
        (JSC::functionDumpCallFrame):
        (JSC::functionDumpStack):
        * tools/VMInspector.cpp:
        (JSC::VMInspector::currentThreadOwnsJSLock):
        (JSC::ensureCurrentThreadOwnsJSLock):
        (JSC::VMInspector::gc):
        (JSC::VMInspector::edenGC):
        (JSC::VMInspector::isValidCodeBlock):
        (JSC::VMInspector::codeBlockForFrame):
        (JSC::VMInspector::dumpCallFrame):
        (JSC::VMInspector::dumpStack):
        * tools/VMInspector.h:

2020-06-02  Keith Rollin  <krollin@apple.com>

        Revert FEATURES_DEFINES related changes
        https://bugs.webkit.org/show_bug.cgi?id=212664
        <rdar://problem/63893033>

        Reviewed by Andy Estes.

        Bug 262310, Bug 262311, Bug 262318, and Bug 262331 involve changes to
        FEATURE_DEFINES and how the values there relate to those found in the
        Platform*.h files. Those changes break XCBuild (by removing the
        .xcfilelist related to UnifiedSources and the process for generating
        them), and so are being reverted.

        * Configurations/FeatureDefines.xcconfig:

2020-06-02  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r262424.

        Caused webkitpy test failure

        Reverted changeset:

        "Make generated C++ code use modern C++"
        https://bugs.webkit.org/show_bug.cgi?id=190714
        https://trac.webkit.org/changeset/262424

2020-06-02  Mark Lam  <mark.lam@apple.com>

        Change Gigacage::Config to use storage in WebConfig::g_config instead of its own.
        https://bugs.webkit.org/show_bug.cgi?id=212585
        <rdar://problem/63812487>

        Reviewed by Yusuke Suzuki.

        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::cageTypedArrayStorage):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::caged):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::cageConditionally):
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSCConfig.h:
        (JSC::Config::isPermanentlyFrozen):

2020-06-02  Saam Barati  <sbarati@apple.com>

        MultiDeleteByOffset should not always def
        https://bugs.webkit.org/show_bug.cgi?id=212621
        <rdar://problem/63824182>

        Reviewed by Yusuke Suzuki.

        Clobberize used to claim that MultiDeleteByOffset always defd a value.
        That's an incorrect modeling of MultiDeleteByOffset though, since it might
        have delete misses in its variant list. This would lead us to incorrectly
        CSE when we shouldn't. This patch fixes this by saying MultiDeleteByOffset
        only defs when all its cases write out a value (are hits).

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGNode.cpp:
        (JSC::DFG::MultiDeleteByOffsetData::allVariantsStoreEmpty const):
        * dfg/DFGNode.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiDeleteByOffset):

2020-06-02  Rob Buis  <rbuis@igalia.com>

        Make generated C++ code use modern C++
        https://bugs.webkit.org/show_bug.cgi?id=190714

        Reviewed by Sam Weinig.

        Update inspector protocol generator and rebaseline the tests.

        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/expected/enum-values.json-result:
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result:
        * inspector/scripts/tests/expected/same-type-id-different-domain.json-result:
        * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result:
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result:
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result:
        * yarr/generateYarrUnicodePropertyTables.py:

2020-06-02  Paulo Matos  <pmatos@igalia.com>

        Fix assert message formatting
        https://bugs.webkit.org/show_bug.cgi?id=212591

        Reviewed by Adrian Perez de Castro.

        Fixes warning by gcc - lineParts.size() is size_t, %zu should be used.

        * runtime/FuzzerPredictions.cpp:
        (JSC::FuzzerPredictions::FuzzerPredictions):

2020-06-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Graphics: should use the `id` (name) of the animation if it exists
        https://bugs.webkit.org/show_bug.cgi?id=212618

        Reviewed by Timothy Hatcher.

        * inspector/protocol/Animation.json:
         - added an optional `name` property to the `Animation.Animation` type
         - created a new `Animation.nameChanged` event

2020-06-01  Saam Barati  <sbarati@apple.com>

        Correct misunderstandings on how ThreadSpecific work
        https://bugs.webkit.org/show_bug.cgi?id=212616

        Reviewed by Michael Saboff.

        There were two misunderstandings I had when writing code using ThreadSpecific
        when doing LLInt bytecode buffer caching in Wasm.
        
        1. For ThreadSpecific<Vector>, I was calling Vector's constructor twice
        unnecessarily, and incorrectly, since we ended up constructing over an
        already constructed Vector for the second call. When doing operator* or
        operator-> on a ThreadSpecific<T>, T() is called if it has not been
        initialized yet. So there is no need to do manually call the constructor
        the second time.
        
        2. There is no need to try to destroy entries for ThreadSpecific manually
        since we already run destructors when the thread goes away.
        
        This patch removes code for (1) and (2) both from the Wasm bytecode
        buffer and from AssemblerData.

        * assembler/AssemblerBuffer.cpp:
        (JSC::clearAssembleDataThreadSpecificCache): Deleted.
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::getThreadSpecificAssemblerData): Deleted.
        * dfg/DFGWorklist.cpp:
        * jit/JITWorklist.cpp:
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::LLIntGenerator::LLIntGenerator):
        (JSC::Wasm::clearLLIntThreadSpecificCache): Deleted.
        * wasm/WasmLLIntGenerator.h:
        * wasm/WasmWorklist.cpp:

2020-06-01  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix build failure in ARMv7k
        https://bugs.webkit.org/show_bug.cgi?id=212595

        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toThisSlowCase const):

2020-06-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSBigInt::rightTrim can miss |this| pointer and leads to incorrect GC collection
        https://bugs.webkit.org/show_bug.cgi?id=212601

        Reviewed by Saam Barati.

        This is pretty rare case. But in some optimization level, JSBigInt::rightTrim could store |this| + offset pointer into the stack instead of |this|
        and make conservative GC think that |this| JSBigInt is unreachable. We put ensureStillAliveHere(this) to ensure that this is alive.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::rightTrim):

2020-06-01  Mark Lam  <mark.lam@apple.com>

        x86.rb's LabelReference.x86LoadOperand()'s address operand should be a pointer type.
        https://bugs.webkit.org/show_bug.cgi?id=212603

        Reviewed by Saam Barati.

        The current implementation mistakenly sets the address type to that of the value
        being loaded.  I encountered this issue when I was trying to do a loadb from a
        global address.  Because of this bug, the emitted code was trying do a load using
        %al (8 byte register) as the pointer to load from.  With this fix, it now loads
        from %rax.

        * offlineasm/x86.rb:

2020-06-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSValue::toThis should not throw exception
        https://bugs.webkit.org/show_bug.cgi?id=212595

        Reviewed by Mark Lam.

        Including WebCore code, there are a lot of code which assume JSValue::toThis should not throw an exception.
        This assumption was now broken after making JSBigInt allocation graceful for OOM. But for this particular JSValue::toThis case,
        we can make it non-throwing code.

        This patch makes JSValue::toThis non-throwing code to fix exception-missing debug assertions.
        We ensure that BigIntObject can hold BigInt32 (actually, it can already if toObjectSlowCase path is taken).

        * runtime/BigIntObject.cpp:
        (JSC::BigIntObject::create):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toThisSlowCase const):

2020-06-01  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt operations should handle exception correctly
        https://bugs.webkit.org/show_bug.cgi?id=212596

        Reviewed by Mark Lam.

        Some places miss exception check / explicit scope-release while BigInt operations can now throw an exception.
        This patch adds them. They are covered by existing stress tests with Debug build.

        * runtime/Operations.h:
        (JSC::compareBigIntToOtherPrimitive):
        (JSC::compareBigInt32ToOtherPrimitive):
        (JSC::jsInc):
        (JSC::jsDec):
        (JSC::jsBitwiseNot):

2020-05-31  Michael Saboff  <msaboff@apple.com>

        Consider a Thread Specific Cache for AssemblerBuffers
        https://bugs.webkit.org/show_bug.cgi?id=212562

        Reviewed by Filip Pizlo.

        This patch creates a thread local cache of AssemblerData in the hopes that it will reduce
        memory allocation churn.  The cache is cleared when a thread is destroyed.
        If an AssemblerData is destroyed in another thread, its storage is cached by the
        destroying thread.

        Made a few changes described below to facilite the swap as well as returning a
        clear()'ed AssemblerData back to its original state.

        Reviewed by Filip Pizlo.

        * assembler/AssemblerBuffer.cpp:
        (JSC::threadSpecificAssemblerData):
        (JSC::clearAssembleDataThreadSpecificCache):
        * assembler/AssemblerBuffer.h:

        (JSC::AssemblerData::AssemblerData):
        (JSC::AssemblerData::operator=):
        The copy constructor and assignment operator now perform complete AssemblerBuffer swaps.

        (JSC::AssemblerData::takeBufferIfLarger):
        A new method that will conditionally copy the enclosed buffer of the argument to "this"
        if the argument's buffer is larger than the current buffer of "this".

        (JSC::AssemblerData::~AssemblerData):
        (JSC::AssemblerData::clear):
        The destructor now calls clear which has been changed to reset the buffer to one with
        inline capacity.

        (JSC::AssemblerBuffer::AssemblerBuffer):
        Take the cached out of line buffer if there is one.

        (JSC::AssemblerBuffer::~AssemblerBuffer):
        Cache the enclosed out of line buffer if it is larger than the currently cached one.

        (JSC::AssemblerBuffer::getThreadSpecificAssemblerData):
        * dfg/DFGWorklist.cpp:
        * jit/JITWorklist.cpp:
        * wasm/WasmWorklist.cpp:

2020-05-31  Mark Lam  <mark.lam@apple.com>

        Change JSC::Config to use storage in WTF::Config instead of its own.
        https://bugs.webkit.org/show_bug.cgi?id=212575
        <rdar://problem/63796584>

        Reviewed by Yusuke Suzuki.

        Since Configs must be rounded up to CeilingOnPageSize, this will save us some
        memory since the contents of both Configs do not add up to CeilingOnPageSize.

        g_jscConfig is now located at g_wtfConfig.spaceForExtensions.

        * runtime/JSCConfig.cpp:
        (JSC::Config::disableFreezingForTesting):
        (JSC::Config::enableRestrictedOptions):
        (JSC::Config::permanentlyFreeze): Deleted.
        * runtime/JSCConfig.h:
        (JSC::Config::permanentlyFreeze):
        (JSC::Config::isPermanentlyFrozen):
        (): Deleted.
        * runtime/Options.cpp:
        (JSC::Options::setOptions):
        * tools/JSDollarVM.cpp:
        (JSC::functionCallWithStackSize):

2020-05-30  Mark Lam  <mark.lam@apple.com>

        Rename Signal::BadAccess to Signal::AccessFault.
        https://bugs.webkit.org/show_bug.cgi?id=212577

        Reviewed by Yusuke Suzuki.

        * runtime/VMTraps.cpp:
        * wasm/WasmFaultSignalHandler.cpp:
        (JSC::Wasm::enableFastMemory):

2020-05-30  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] for-in should allocate new temporary register for base
        https://bugs.webkit.org/show_bug.cgi?id=212519
        <rdar://problem/63722044>

        Reviewed by Saam Barati.

        While r262233 keeps for-in's enumerated object in variable register if possible to use this register for heuristics driving an optimization,
        for-in body can replace the content of this register during enumeration and confuse enumerator.

        Instead, we record Variable information in StructureForInContext. This allows us to detect patterns using heap-variables too.
        Further, this patch extends pattern-matching code to support ThisNode too.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::pushStructureForInScope):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::Variable::Variable):
        (JSC::Variable::isResolved const):
        (JSC::Variable::symbolTableConstantIndex const):
        (JSC::Variable::ident const):
        (JSC::Variable::offset const):
        (JSC::Variable::isLocal const):
        (JSC::Variable::local const):
        (JSC::Variable::isReadOnly const):
        (JSC::Variable::isSpecial const):
        (JSC::Variable::isConst const):
        (JSC::Variable::setIsReadOnly):
        (JSC::Variable::operator== const):
        (JSC::StructureForInContext::StructureForInContext):
        (JSC::StructureForInContext::baseVariable const):
        (JSC::StructureForInContext::base const): Deleted.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::HasOwnPropertyFunctionCallDotNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeFunctionCallNode):
        * parser/Nodes.h:
        (JSC::ExpressionNode::isThisNode const):

2020-05-30  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix JSC debug tests' exception checking
        https://bugs.webkit.org/show_bug.cgi?id=212512

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createWithLength):
        (JSC::JSBigInt::allocateFor):

2020-05-30  Mark Lam  <mark.lam@apple.com>

        AssemblyHelpers::callExceptionFuzz() is passing a wrong argument to operationExceptionFuzz().
        https://bugs.webkit.org/show_bug.cgi?id=212561

        Reviewed by Yusuke Suzuki.

        There's 2 possible solution to this issue:
        1. Thread the globalObject from all the way up the clients calling into
           callExceptionFuzz(), or
        2. Introduce a operationExceptionFuzzWithCallFrame() wrapper take receives a VM*
           and CallFrame*, and use these to get the lexicalGlobalObject.

        This patch applies solution 2.

        Solution 1 is too unwieldy because it will cause the threading of the globalObject
        argument to fan out to many clients, and almost all of those clients currently
        do not need the globalObject.  Hence, implementing this solution may incur some
        performance penalty in normal code, for the sole benefit of this one fuzzing tool.

        Secondly, the exception fuzzer doesn't really care which globalObject is used.
        It only cares that an exception is thrown, and we need a globalObject in order to
        throw that exception.  Hence, there is no benefit to threading the globalObject
        down from all the clients.

        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::callExceptionFuzz):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:

2020-05-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSBigInt allocation should be graceful for OOM
        https://bugs.webkit.org/show_bug.cgi?id=212512

        Reviewed by Mark Lam.

        This patch allows JSBigInt's storage allocation to fail gracefully if OOM condition happens.
        We thread JSGlobalObject* instead of VM& and throw OOM error if storage allocation failed.
        We also rename `JSGlobalObject* globalObject` parameter to `JSGlobalObject* nullOrGlobalObjectForOOM`
        if it can be nullptr.

        * jit/JITOperations.cpp:
        * jsc.cpp:
        (functionCreateHeapBigInt):
        * parser/ParserArena.cpp:
        (JSC::IdentifierArena::makeBigIntDecimalIdentifier):
        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::callBigIntConstructor):
        * runtime/BigIntPrototype.cpp:
        (JSC::toThisBigIntValue):
        (JSC::bigIntProtoFuncToString):
        (JSC::bigIntProtoFuncToLocaleString):
        (JSC::bigIntProtoFuncValueOf):
        * runtime/CachedTypes.cpp:
        (JSC::CachedBigInt::decode const):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatFuncFormat):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createZero):
        (JSC::JSBigInt::tryCreateZero):
        (JSC::JSBigInt::createWithLength):
        (JSC::JSBigInt::tryCreateWithLength):
        (JSC::JSBigInt::createFrom):
        (JSC::JSBigInt::tryCreateFrom):
        (JSC::JSBigInt::createFromImpl):
        (JSC::JSBigInt::parseInt):
        (JSC::HeapBigIntImpl::toHeapBigInt):
        (JSC::Int32BigIntImpl::toHeapBigInt):
        (JSC::zeroImpl):
        (JSC::JSBigInt::exponentiateImpl):
        (JSC::JSBigInt::multiplyImpl):
        (JSC::JSBigInt::divideImpl):
        (JSC::JSBigInt::copy):
        (JSC::JSBigInt::unaryMinusImpl):
        (JSC::JSBigInt::unaryMinus):
        (JSC::JSBigInt::remainderImpl):
        (JSC::JSBigInt::incImpl):
        (JSC::JSBigInt::decImpl):
        (JSC::JSBigInt::addImpl):
        (JSC::JSBigInt::subImpl):
        (JSC::JSBigInt::bitwiseAndImpl):
        (JSC::JSBigInt::bitwiseOrImpl):
        (JSC::JSBigInt::bitwiseXorImpl):
        (JSC::JSBigInt::absoluteAdd):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::absoluteDivWithDigitDivisor):
        (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
        (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAnd):
        (JSC::JSBigInt::absoluteOr):
        (JSC::JSBigInt::absoluteAndNot):
        (JSC::JSBigInt::absoluteXor):
        (JSC::JSBigInt::absoluteAddOne):
        (JSC::JSBigInt::absoluteSubOne):
        (JSC::JSBigInt::leftShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByMaximum):
        (JSC::JSBigInt::toStringBasePowerOfTwo):
        (JSC::JSBigInt::toStringGeneric):
        (JSC::JSBigInt::rightTrim):
        (JSC::JSBigInt::tryRightTrim):
        (JSC::JSBigInt::allocateFor):
        (JSC::JSBigInt::asIntNImpl):
        (JSC::JSBigInt::asUintNImpl):
        (JSC::JSBigInt::truncateToNBits):
        (JSC::JSBigInt::truncateAndSubFromPowerOfTwo):
        (JSC::JSBigInt::createWithLengthUnchecked): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toThisSlowCase const):
        * runtime/VM.cpp:
        (JSC::VM::VM):

2020-05-29  Saam Barati  <sbarati@apple.com>

        We need to properly model heap ranges of Delete in DFG/B3
        https://bugs.webkit.org/show_bug.cgi?id=212538
        <rdar://problem/63670964>

        Reviewed by Filip Pizlo.

        We need to properly model the aliasing dependencies of an inlined delete 
        operation. 
        
        We had a bug in the B3 IR we generated from code like this for a delete
        followed by a property addition:
        ```
        const o = { y: 0 };
        delete o.y;
        o.z = 0;
        ```
        
        generated:
        
        ```
        note: bb#5 dominates bb#10, bb#10 dominates bb#15
        
        bb#5
        Void b@125 = Store($-562949953421312(b@282), b@112, offset = 16, ControlDependent|Writes:129, D@30)
        bb#10
        Void b@171 = Store($0(b@2), b@112, offset = 16, ControlDependent|Writes:129, D@37)
        bb#15
        Void b@217 = Store($-562949953421312(b@282), b@112, offset = 16, ControlDependent|Writes:130, D@44)
        ```
        
        Notice that "y" and "z" ended up at the same property offset.
        
        In the above program, B3 proves the pointer we're storing to is the same value
        in all three stores (b@112). However, because of how it does store forwarding,
        it determined it could eliminate b@217 because b@125 already stored the same
        value to the same pointer. It didn't know that b@171 was a write because its
        heap range is different than @217. Generally, when using two heap ranges, it's
        telling B3 that two pointers don't alias.
        ```
        @A, Heap_H
        @B, Heap_H
        ```
        In the above program, 
        - If @B reads H and @A writes H, then @B is dependent on @A.
        - If @B writes H, then @B is dependent on @A if @A reads or writes H.
        
        So for delete, we need to model the deletion of a property as actually
        writing to all named properties that may exist at that slot given a
        series of structure transitions. We model this by saying the PutStructure
        for an inlined delete, or MultiDeleteByOffset, writes to all named properties
        (which is a superset of all named properties that may exist at that slot
        through a series of transitions).

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * ftl/FTLAbstractHeap.cpp:
        (JSC::FTL::IndexedAbstractHeap::dump):
        (JSC::FTL::NumberedAbstractHeap::dump):
        (JSC::FTL::AbsoluteAbstractHeap::dump):
        (JSC::FTL::IndexedAbstractHeap::dump const): Deleted.
        (JSC::FTL::NumberedAbstractHeap::dump const): Deleted.
        (JSC::FTL::AbsoluteAbstractHeap::dump const): Deleted.
        * ftl/FTLAbstractHeap.h:
        (JSC::FTL::IndexedAbstractHeap::atAnyIndex):
        (JSC::FTL::NumberedAbstractHeap::atAnyNumber):
        (JSC::FTL::AbsoluteAbstractHeap::atAnyAddress):
        (JSC::FTL::IndexedAbstractHeap::atAnyIndex const): Deleted.
        (JSC::FTL::NumberedAbstractHeap::atAnyNumber const): Deleted.
        (JSC::FTL::AbsoluteAbstractHeap::atAnyAddress const): Deleted.
        * ftl/FTLAbstractHeapRepository.cpp:
        (JSC::FTL::AbstractHeapRepository::AbstractHeapRepository):
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compilePutStructure):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiDeleteByOffset):

2020-05-29  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove conditionals for ENABLE_APPLE_PAY_SESSION_V(3|4)
        https://bugs.webkit.org/show_bug.cgi?id=212541

        Reviewed by Darin Adler.

        APPLE_PAY_SESSION_V(3|4) is now enabled whenever APPLE_PAY itself is enabled.

        * Configurations/FeatureDefines.xcconfig:

2020-05-29  Darin Adler  <darin@apple.com>

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Rubber-stamped by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig: Add back ENABLE_CSS_CONIC_GRADIENTS, removed
        by accident.

2020-05-27  Darin Adler  <darin@apple.com>

        Remove things from FeatureDefines.xcconfig that are covered by PlatformEnableCocoa.h
        https://bugs.webkit.org/show_bug.cgi?id=212418

        Reviewed by Andy Estes.

        * Configurations/FeatureDefines.xcconfig: Removed 83 of the 119 things defined in
        this file. There are 36 more that are slightly more complex that we can remove
        carefully later.

2020-05-29  Darin Adler  <darin@apple.com>

        [Cocoa] Pass all defines from Platform.h to various scripts, not just the ones from .xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=212451

        Reviewed by Sam Weinig.

        * DerivedSources.make: Run the preprocessor on Platform.h and parse the output into
        FEATURE_AND_PLATFORM_DEFINES. Use that and FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES
        whenever we need a list of defines. Also took out some Windows-specific stuff since
        this is now only used on Mac platforms. Use ":=" when calling $(shell) to make sure
        the same shell command is not invoked over and over again.

2020-05-29  Keith Rollin  <krollin@apple.com>

        Revert switch to XCBuild
        https://bugs.webkit.org/show_bug.cgi?id=212530
        <rdar://problem/63764632>

        Unreviewed build fix.

        Bug 209890 enabled the use of XCBuild by default. Since then, some
        build issues have shown up. While addressing them, temporarily turn
        off the use of XCBuild by default.

        * Configurations/JavaScriptCore.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-05-29  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r262245.
        https://bugs.webkit.org/show_bug.cgi?id=212531

        "Caused WebCore's 'Check .xcfilelists' build phase to be ~100x
        slower"

        Reverted changeset:

        "[Cocoa] Pass all defines from Platform.h to various scripts,
        not just the ones from .xcconfig"
        https://bugs.webkit.org/show_bug.cgi?id=212451
        https://trac.webkit.org/changeset/262245

2020-05-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: add ITML debuggable/target type
        https://bugs.webkit.org/show_bug.cgi?id=203300
        <rdar://problem/56545896>

        Reviewed by Joseph Pecoraro and Brian Burg.

        * API/JSContextPrivate.h:
        * API/JSContext.mm:
        (-[JSContext _setITMLDebuggableType]): Added.
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::setIsITML): Added.
        Create an SPI for marking a `JSContext` as an ITML context for Web Inspector.

        * runtime/JSGlobalObjectDebuggable.h:
        (isType):
        * inspector/remote/RemoteControllableTarget.h:
        * inspector/remote/RemoteInspectionTarget.h:
        * inspector/remote/RemoteInspectorConstants.h:

        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::connectFrontend):
        Don't dispatch `Inspector.activateExtraDomains` unless we're a basic `JavaScript` debuggable.

        * inspector/remote/cocoa/RemoteInspectorCocoa.mm:
        (Inspector::RemoteInspector::listingForInspectionTarget const):

        * inspector/scripts/codegen/models.py:
        (validate_target_types):
        * inspector/scripts/codegen/objc_generator.py:
        (ObjCGenerator):
        * inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error:
        * inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error:

        * inspector/protocol/Audit.json:
        * inspector/protocol/CSS.json:
        * inspector/protocol/Console.json:
        * inspector/protocol/DOM.json:
        * inspector/protocol/DOMStorage.json:
        * inspector/protocol/Database.json:
        * inspector/protocol/Debugger.json:
        * inspector/protocol/Heap.json:
        * inspector/protocol/Inspector.json:
        * inspector/protocol/Network.json:
        * inspector/protocol/Page.json:
        * inspector/protocol/Runtime.json:
        * inspector/protocol/Security.json:
        Add support for `itml` debuggables and targets, marking non-ITML commands/events with `page`.

2020-05-29  Mark Lam  <mark.lam@apple.com>

        Add a check for errors when computing a utf string in jsc shell's runInteractive().
        https://bugs.webkit.org/show_bug.cgi?id=212526
        <rdar://problem/63757892>

        Reviewed by Michael Saboff.

        * jsc.cpp:
        (runInteractive):

2020-05-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: add missing condition guards when generating objc protocol files
        https://bugs.webkit.org/show_bug.cgi?id=212494

        Reviewed by Timothy Hatcher.

        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_forward_declarations):
        * inspector/scripts/codegen/generate_objc_configuration_header.py:
        (ObjCConfigurationHeaderGenerator._generate_properties_for_domain):
        * inspector/scripts/codegen/generate_objc_configuration_implementation.py:
        (ObjCConfigurationImplementationGenerator._generate_configuration_implementation_for_domains):
        (ObjCConfigurationImplementationGenerator._generate_ivars):
        (ObjCConfigurationImplementationGenerator._generate_dealloc):
        (ObjCConfigurationImplementationGenerator._generate_event_dispatcher_getter_for_domain):
        (ObjCConfigurationImplementationGenerator._variable_name_prefix_for_domain): Deleted.
        * inspector/scripts/codegen/generate_objc_frontend_dispatcher_implementation.py:
        (ObjCFrontendDispatcherImplementationGenerator._generate_event_dispatcher_implementations):
        (ObjCFrontendDispatcherImplementationGenerator._generate_event):
        * inspector/scripts/codegen/generate_objc_header.py:
        (ObjCHeaderGenerator._generate_forward_declarations):
        (ObjCHeaderGenerator._generate_enums):
        (ObjCHeaderGenerator._generate_types):
        (ObjCHeaderGenerator._generate_command_protocols):
        (ObjCHeaderGenerator._generate_event_interfaces):
        (ObjCHeaderGenerator._generate_single_event_interface):
        * inspector/scripts/codegen/generate_objc_internal_header.py:
        (ObjCInternalHeaderGenerator._generate_event_dispatcher_private_interfaces):
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_functions):
        * inspector/scripts/tests/definitions-with-mac-platform.json:
        * inspector/scripts/tests/expected/definitions-with-mac-platform.json-result:

2020-05-27  Keith Miller  <keith_miller@apple.com>

        for-of should check the iterable is a JSArray for FastArray in DFG iterator_open
        https://bugs.webkit.org/show_bug.cgi?id=212383

        Reviewed by Saam Barati.

        This patch fixes an issue where we didn't check that the iterable operand to
        iterator_open was a JSArray when lowering the FastArray only variant of the bytecode to the DFG.
        This meant we would OSR exit at the iterator_next's lowering then assertion failure in the
        checkpoint OSR exit helper. To make this work, this patch extends (and renames from CheckSubClass)
        CheckJSCast to use the same JSType information that we use for the jsCast function. In order to
        get the JSType range from a ClassInfo* the macro that autogenerates MethodTable now also fills
        a Optional<JSTypeRange> into the ClassInfo as well.

        Lastly, speculationFromClassInfo was misused by AI. This patch
        renames it to speculationFromClassInfoInheritance to better
        reflect how AI was using it. The only other user of
        speculationFromClassInfo was speculationFromStructure. Any case
        where speculationFromClassInfoInteritance would differ from what a
        Structure would tell you has been hoisted to
        speculationFromStructure.

        * assembler/testmasm.cpp:
        (JSC::testBranchIfType):
        (JSC::testBranchIfNotType):
        * bytecode/SpeculatedType.cpp:
        (JSC::speculationFromClassInfoInheritance):
        (JSC::speculationFromStructure):
        (JSC::speculationFromClassInfo): Deleted.
        * bytecode/SpeculatedType.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGAbstractValue.cpp:
        (JSC::DFG::AbstractValue::filterClassInfo):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::attemptToMakeCallDOM):
        (JSC::DFG::FixupPhase::fixupCheckJSCast):
        (JSC::DFG::FixupPhase::fixupCheckSubClass): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasClassInfo const):
        * dfg/DFGNodeType.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArray):
        (JSC::DFG::SpeculativeJIT::compileCheckJSCast):
        (JSC::DFG::SpeculativeJIT::compileCheckSubClass): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckJSCast):
        (JSC::FTL::DFG::LowerDFGToB3::isCellWithType):
        (JSC::FTL::DFG::LowerDFGToB3::isTypedArrayView):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass): Deleted.
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfType):
        (JSC::AssemblyHelpers::branchIfNotType):
        * runtime/ClassInfo.h:
        * runtime/JSCast.h:
        (JSC::JSTypeRange::contains const):
        (JSC::JSCastingHelpers::inheritsJSTypeImpl):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::assertTypeInfoFlagInvariants):
        * tools/JSDollarVM.cpp:
        (JSC::functionCreateDOMJITCheckJSCastObject):
        (JSC::JSDollarVM::finishCreation):
        (JSC::functionCreateDOMJITCheckSubClassObject): Deleted.

2020-05-27  Darin Adler  <darin@apple.com>

        [Cocoa] Pass all defines from Platform.h to various scripts, not just the ones from .xcconfig
        https://bugs.webkit.org/show_bug.cgi?id=212451

        Reviewed by Sam Weinig.

        * DerivedSources.make: Run the preprocessor on Platform.h and parse the output into
        FEATURE_AND_PLATFORM_DEFINES. Use that and FEATURE_AND_PLATFORM_DEFINE_DEPENDENCIES
        whenever we need a list of defines. Also took out some Windows-specific stuff since
        this is now only used on Mac platforms.

2020-05-28  Michael Catanzaro  <mcatanzaro@gnome.org>

        Web Inspector: generate_cpp_protocol_types_header.py:294: SyntaxWarning: "is" with a literal. Did you mean "=="?
        https://bugs.webkit.org/show_bug.cgi?id=212468

        Reviewed by Timothy Hatcher.

        Use "==" instead of "is" to compare against 0.

        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:

2020-05-28  Mark Lam  <mark.lam@apple.com>

        Gardening: Add an assertNoException() to placate the exception checker and green the bots.
        https://bugs.webkit.org/show_bug.cgi?id=212248

        Not reviewed.

        This solution was pointed out by Caio Lima in https://bugs.webkit.org/show_bug.cgi?id=212248#c10.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-05-27  Saam Barati  <sbarati@apple.com>

        hasOwnProperty inside structure property for-in loop should use an opcode like has_structure_property but for hasOwnProperty
        https://bugs.webkit.org/show_bug.cgi?id=212248

        Reviewed by Keith Miller.

        This patch applies the same principles from r262083 but to hasOwnProperty.
        
        In this patch, we have a fast path for this syntactic pattern when
        iterating structure properties:
        
        for (let <p> in <o>)
            if (<o>.hasOwnProperty(<p>))
        
        We look for both <p> and <o> as resolve nodes, and we look for them being the
        same values both in the header and inside the body.
        
        Using a simple static analysis, when we detect this pattern, we compare the
        result of `<o>.hasOwnProperty` to the original hasOwnProperty function. If
        it's the same, we execute the fast path new bytecode has_own_structure_property,
        which on the fast path is two loads, a compare and branch, and a materialization of
        the boolean constant true.
        
        On the slow path, has_own_structure_property just executes the runtime code 
        for hasOwnProperty.
        
        In my testing, this seems like it might be 3-5% faster on Speedometer 2's
        react subtests. I was getting some noise when running the tests locally,
        so I can't say for certain it's a definite speedup. But the data implies
        it has a good chance at being a speedup.

        * builtins/BuiltinNames.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/LinkTimeConstant.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitWideJumpIfNotFunctionHasOwnProperty):
        (JSC::BytecodeGenerator::recordHasOwnStructurePropertyInForInLoop):
        (JSC::BytecodeGenerator::emitHasOwnStructureProperty):
        (JSC::BytecodeGenerator::pushStructureForInScope):
        (JSC::StructureForInContext::finalize):
        (JSC::BytecodeGenerator::findStructureForInContext):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::StructureForInContext::StructureForInContext):
        (JSC::StructureForInContext::base const):
        (JSC::StructureForInContext::addHasOwnPropertyJump):
        * bytecompiler/Label.h:
        (JSC::GenericBoundLabel::GenericBoundLabel):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::HasOwnPropertyFunctionCallDotNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileHasStructureProperty):
        (JSC::DFG::SpeculativeJIT::compileHasOwnStructurePropertyImpl):
        (JSC::DFG::SpeculativeJIT::compileHasOwnStructureProperty):
        (JSC::DFG::SpeculativeJIT::compileInStructureProperty):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasOwnStructureProperty):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_has_structure_propertyImpl):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::emit_op_has_own_structure_property):
        (JSC::JIT::emit_op_in_structure_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_has_structure_propertyImpl):
        (JSC::JIT::emit_op_has_structure_property):
        (JSC::JIT::emit_op_has_own_structure_property):
        (JSC::JIT::emit_op_in_structure_property):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeFunctionCallNode):
        * parser/NodeConstructors.h:
        (JSC::HasOwnPropertyFunctionCallDotNode::HasOwnPropertyFunctionCallDotNode):
        * parser/Nodes.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectPrototypeHasOwnProperty):
        (JSC::objectProtoFuncHasOwnProperty):
        * runtime/ObjectPrototype.h:

2020-05-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [ macOS iOS ] REGRESSION(r261600?): imported/w3c/web-platform-tests/html/dom/reflection-embedded.html & imported/w3c/web-platform-tests/html/dom/reflection-forms.html are flaky failures
        https://bugs.webkit.org/show_bug.cgi?id=212430

        Reviewed by Saam Barati.

        r261600 added IsConstructor rule to DFG AI. That rule is saying that if the object is not JSFunction and not ProxyObject,
        then it must not be a constructor. But this is wrong since any objects can implement getConstructData and DOM constructors
        are actually implementing it while it is not JSFunction and it is not ProxyObject. This patch removes that rule.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * tools/JSDollarVM.cpp:

2020-05-27  Saam Barati  <sbarati@apple.com>

        Limit memory used by wasm/references/multitable.js on memory limited devices
        https://bugs.webkit.org/show_bug.cgi?id=212437

        Reviewed by Keith Miller.

        * tools/JSDollarVM.cpp:
        (JSC::functionIsMemoryLimited):
        (JSC::JSDollarVM::finishCreation):

2020-05-27  David Kilzer  <ddkilzer@apple.com>

        REGRESSION: Build errors during JavaScriptCore "Generate Derived Sources" about missing Availability.h header and invalid SDKROOT [-Wmissing-sysroot]
        <https://webkit.org/b/212436>

        Unreviewed build fix.

        * Scripts/generate-derived-sources.sh: Pass SDKROOT to `make`
        command from the current environment.

2020-05-27  Mark Lam  <mark.lam@apple.com>

        Add missing #include for when LLINT_TRACING is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=212433

        Reviewed by Tadeu Zagallo.

        * llint/LLIntExceptions.cpp:

2020-05-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace `featureGuard` and `availability` with a combined `condition` that accepts any macro
        https://bugs.webkit.org/show_bug.cgi?id=210014

        Reviewed by Brian Burg.

        Previously, the generated InspectorBackendCommands.js would include code for things that the
        backend doesn't actually support. By using actual macros and preprocessing that file, we can
        ensure that the frontend doesn't incorrectly think that something is supported by the page
        being inspected:
         - the `Canvas` commands and events related to shader programs/pipelines should only exist
           when the corresponding context type exists, namely `ENABLE(WEBGL)` and `ENABLE(WEBGPU)`.
         - iOS doesn't support showing rulers, so create a variant of `DOM.setInspectModeEnabled`
           that only exists for `PLATFORM(IOS_FAMILY)` that doesn't have the `showRulers` optional
           parameter, as well as removing `Page.setShowRulers` entirely.
         - setting the forced appearance should only be possible if dark mode is supported.
         - web archives only exist if CF is used.

        * inspector/protocol/CPUProfiler.json:
        * inspector/protocol/Canvas.json:
        * inspector/protocol/DOM.json:
        * inspector/protocol/IndexedDB.json:
        * inspector/protocol/Inspector.json:
        * inspector/protocol/Memory.json:
        * inspector/protocol/Page.json:
        * inspector/protocol/ServiceWorker.json:

        * Scripts/generate-derived-sources.sh:
        Set `CC` if it hasn't already been set.

        * DerivedSources.make:
        * DerivedSources-input.xcfilelist:
        Preprocess `InspectorBackendCommands.js.in` to get an accurate `InspectorBackendCommands.js`
        that follows the logic/description above.

        * CMakeLists.txt:
        Create a new `InspectorBackendCommands` target now that `InspectorBackendCommands.js` is
        generated seprately from the rest of the protocol files.

        * Configurations/FeatureDefines.xcconfig:
        Add `ENABLE_WEB_ARCHIVE` since it's always enabled in wtf/PlatformEnableCocoa.h.

        * inspector/scripts/generate-inspector-protocol-bindings.py:
        (generate_from_specification):
        (generate_from_specification.load_specification):
        * inspector/scripts/codegen/generator.py:
        (Generator.__init__):
        (Generator.model):
        (Generator.set_generator_setting):
        (Generator.type_declarations_for_domain):
        (Generator.commands_for_domain):
        (Generator.events_for_domain):
        (Generator.wrap_with_guard_for_condition): Added.
        (Generator.platform): Deleted.
        (Generator.can_generate_platform): Deleted.
        (Generator.wrap_with_guard_for_domain): Deleted.
        (Generator.wrap_with_guard): Deleted.
        * inspector/scripts/codegen/models.py:
        (Frameworks):
        (Protocol.parse_domain):
        (Protocol.parse_type_declaration):
        (Protocol.parse_command):
        (Protocol.parse_event):
        (Domain.__init__):
        (TypeDeclaration.__init__):
        (Command.__init__):
        (Event.__init__):
        (Platform): Deleted.
        (Platform.__init__): Deleted.
        (Platform.fromString): Deleted.
        (Platforms): Deleted.
        (Platforms.__metaclass__): Deleted.
        (Platforms.__metaclass__.__iter__): Deleted.
        * inspector/scripts/codegen/generator_templates.py:
        Remove `platform` as it is handled by `condition`.

        * inspector/scripts/codegen/preprocess.pl: Copied from Source/WebCore/bindings/scripts/preprocessor.pm.

        * inspector/scripts/codegen/generate_js_backend_commands.py:
        (JSBackendCommandsGenerator.output_filename):
        (JSBackendCommandsGenerator.generate_domain):
        Output to `InspectorBackendCommands.js.in` that includes `#if` for preprocessing.

        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_cpp_alternate_backend_dispatcher_header.py:
        (CppAlternateBackendDispatcherHeaderGenerator.generate_output):
        (CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        (CppAlternateBackendDispatcherHeaderGenerator._generate_handler_declaration_for_command):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:
        (CppBackendDispatcherHeaderGenerator._generate_alternate_handler_forward_declarations_for_domains.Alternate):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declarations_for_domain):
        (CppBackendDispatcherHeaderGenerator._generate_handler_declaration_for_command):
        (CppBackendDispatcherHeaderGenerator._generate_async_handler_declaration_for_command):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        (CppBackendDispatcherHeaderGenerator._generate_dispatcher_declaration_for_command):
        * inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:
        (CppBackendDispatcherImplementationGenerator.generate_output):
        (CppBackendDispatcherImplementationGenerator._generate_handler_class_destructor_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_small_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_large_dispatcher_switch_implementation_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_async_dispatcher_class_for_domain):
        (CppBackendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_command):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_header.py:
        (CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declarations_for_domain):
        (CppFrontendDispatcherHeaderGenerator._generate_dispatcher_declaration_for_event):
        * inspector/scripts/codegen/generate_cpp_frontend_dispatcher_implementation.py:
        (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementations_for_domain):
        (CppFrontendDispatcherImplementationGenerator._generate_dispatcher_implementation_for_event):
        * inspector/scripts/codegen/generate_cpp_protocol_types_header.py:
        (CppProtocolTypesHeaderGenerator._generate_versions):
        * inspector/scripts/codegen/generate_cpp_protocol_types_implementation.py:
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain.generate_conversion_method_body):
        (CppProtocolTypesImplementationGenerator._generate_enum_conversion_methods_for_domain):
        (CppProtocolTypesImplementationGenerator._generate_open_field_names):
        (CppProtocolTypesImplementationGenerator._generate_builders_for_domain):
        * inspector/scripts/codegen/objc_generator_templates.py:
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declarations_for_domain):
        (ObjCBackendDispatcherHeaderGenerator._generate_objc_handler_declaration_for_command):
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_implementation.py:
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_implementation_for_domain):
        (ObjCBackendDispatcherImplementationGenerator._generate_handler_implementation_for_command):
        * inspector/scripts/codegen/generate_objc_header.py:
        (add_newline):
        (ObjCHeaderGenerator.generate_output):
        (ObjCHeaderGenerator._generate_forward_declarations):
        (ObjCHeaderGenerator._generate_enums):
        (ObjCHeaderGenerator._generate_types):
        (ObjCHeaderGenerator._generate_type_interface):
        (ObjCHeaderGenerator._generate_command_protocols):
        (ObjCHeaderGenerator._generate_single_command_protocol):
        (ObjCHeaderGenerator._generate_event_interfaces):
        (ObjCHeaderGenerator._generate_single_event_interface):
        (ObjCHeaderGenerator._generate_enum_for_platforms): Deleted.
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_header.py:
        (add_newline):
        (ObjCProtocolTypeConversionsHeaderGenerator.generate_output):
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_functions):
        (ObjCProtocolTypeConversionsHeaderGenerator._generate_enum_conversion_for_platforms): Deleted.
        * inspector/scripts/codegen/generate_objc_protocol_type_conversions_implementation.py:
        (add_newline):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_interface):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_method_declaration):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_category_implementation):
        (ObjCProtocolTypeConversionsImplementationGenerator._generate_type_factory_method_implementation):
        * inspector/scripts/codegen/generate_objc_protocol_types_implementation.py:
        (add_newline):
        (ObjCProtocolTypesImplementationGenerator.generate_type_implementations):
        (ObjCProtocolTypesImplementationGenerator.generate_type_implementation):
        Wrap each domain, type, command, and event with the associated `condition` (if it exists).

        * inspector/scripts/tests/command-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/command-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/commands-with-async-attribute.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/commands-with-async-attribute.json.
        * inspector/scripts/tests/commands-with-optional-call-return-parameters.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/commands-with-optional-call-return-parameters.json.
        * inspector/scripts/tests/definitions-with-mac-platform.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/mac/definitions-with-mac-platform.json.
        * inspector/scripts/tests/domain-debuggableTypes.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/domain-debuggableTypes.json.
        * inspector/scripts/tests/domain-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/domain-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/domain-targetTypes.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/domain-targetTypes.json.
        * inspector/scripts/tests/domains-with-varying-command-sizes.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/domains-with-varying-command-sizes.json.
        * inspector/scripts/tests/enum-values.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/enum-values.json.
        * inspector/scripts/tests/event-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/event-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/events-with-optional-parameters.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/events-with-optional-parameters.json.
        * inspector/scripts/tests/expected/command-targetType-matching-domain-debuggableType.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/command-targetType-matching-domain-debuggableType.json-result.
        * inspector/scripts/tests/expected/commands-with-async-attribute.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result.
        * inspector/scripts/tests/expected/commands-with-optional-call-return-parameters.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result.
        * inspector/scripts/tests/expected/definitions-with-mac-platform.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result.
        * inspector/scripts/tests/expected/domain-debuggableTypes.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-debuggableTypes.json-result.
        * inspector/scripts/tests/expected/domain-targetType-matching-domain-debuggableType.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-targetType-matching-domain-debuggableType.json-result.
        * inspector/scripts/tests/expected/domain-targetTypes.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domain-targetTypes.json-result.
        * inspector/scripts/tests/expected/domains-with-varying-command-sizes.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result.
        * inspector/scripts/tests/expected/enum-values.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/enum-values.json-result.
        * inspector/scripts/tests/expected/event-targetType-matching-domain-debuggableType.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/event-targetType-matching-domain-debuggableType.json-result.
        * inspector/scripts/tests/expected/events-with-optional-parameters.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/events-with-optional-parameters.json-result.
        * inspector/scripts/tests/expected/fail-on-command-targetType-matching-domain-debuggableType.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-command-targetType-matching-domain-debuggableType.json-error.
        * inspector/scripts/tests/expected/fail-on-command-targetTypes-type.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-command-targetTypes-type.json-error.
        * inspector/scripts/tests/expected/fail-on-command-targetTypes-value.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-command-targetTypes-value.json-error.
        * inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-type.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-domain-debuggableTypes-type.json-error.
        * inspector/scripts/tests/expected/fail-on-domain-debuggableTypes-value.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-domain-debuggableTypes-value.json-error.
        * inspector/scripts/tests/expected/fail-on-domain-targetType-matching-domain-debuggableType.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-domain-targetType-matching-domain-debuggableType.json-error.
        * inspector/scripts/tests/expected/fail-on-domain-targetTypes-type.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-domain-targetTypes-type.json-error.
        * inspector/scripts/tests/expected/fail-on-domain-targetTypes-value.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-domain-targetTypes-value.json-error.
        * inspector/scripts/tests/expected/fail-on-duplicate-command-call-parameter-names.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-duplicate-command-call-parameter-names.json-error.
        * inspector/scripts/tests/expected/fail-on-duplicate-command-return-parameter-names.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-duplicate-command-return-parameter-names.json-error.
        * inspector/scripts/tests/expected/fail-on-duplicate-event-parameter-names.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-duplicate-event-parameter-names.json-error.
        * inspector/scripts/tests/expected/fail-on-duplicate-type-declarations.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-duplicate-type-declarations.json-error.
        * inspector/scripts/tests/expected/fail-on-duplicate-type-member-names.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-duplicate-type-member-names.json-error.
        * inspector/scripts/tests/expected/fail-on-enum-with-no-values.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-enum-with-no-values.json-error.
        * inspector/scripts/tests/expected/fail-on-event-targetType-matching-domain-debuggableType.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-event-targetType-matching-domain-debuggableType.json-error.
        * inspector/scripts/tests/expected/fail-on-event-targetTypes-type.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-event-targetTypes-type.json-error.
        * inspector/scripts/tests/expected/fail-on-event-targetTypes-value.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-event-targetTypes-value.json-error.
        * inspector/scripts/tests/expected/fail-on-number-typed-optional-parameter-flag.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-number-typed-optional-parameter-flag.json-error.
        * inspector/scripts/tests/expected/fail-on-number-typed-optional-type-member.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-number-typed-optional-type-member.json-error.
        * inspector/scripts/tests/expected/fail-on-string-typed-optional-parameter-flag.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-string-typed-optional-parameter-flag.json-error.
        * inspector/scripts/tests/expected/fail-on-string-typed-optional-type-member.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-string-typed-optional-type-member.json-error.
        * inspector/scripts/tests/expected/fail-on-type-declaration-using-type-reference.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-type-declaration-using-type-reference.json-error.
        * inspector/scripts/tests/expected/fail-on-type-reference-as-primitive-type.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-type-reference-as-primitive-type.json-error.
        * inspector/scripts/tests/expected/fail-on-type-with-lowercase-name.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-type-with-lowercase-name.json-error.
        * inspector/scripts/tests/expected/fail-on-unknown-type-reference-in-type-declaration.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-unknown-type-reference-in-type-declaration.json-error.
        * inspector/scripts/tests/expected/fail-on-unknown-type-reference-in-type-member.json-error: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/fail-on-unknown-type-reference-in-type-member.json-error.
        * inspector/scripts/tests/expected/generate-domains-with-feature-guards.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result.
        * inspector/scripts/tests/expected/same-type-id-different-domain.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/same-type-id-different-domain.json-result.
        * inspector/scripts/tests/expected/shadowed-optional-type-setters.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/shadowed-optional-type-setters.json-result.
        * inspector/scripts/tests/expected/should-strip-comments.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/should-strip-comments.json-result.
        * inspector/scripts/tests/expected/type-declaration-aliased-primitive-type.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-declaration-aliased-primitive-type.json-result.
        * inspector/scripts/tests/expected/type-declaration-array-type.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-declaration-array-type.json-result.
        * inspector/scripts/tests/expected/type-declaration-enum-type.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-declaration-enum-type.json-result.
        * inspector/scripts/tests/expected/type-declaration-object-type.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-declaration-object-type.json-result.
        * inspector/scripts/tests/expected/type-requiring-runtime-casts.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-requiring-runtime-casts.json-result.
        * inspector/scripts/tests/expected/type-with-open-parameters.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/type-with-open-parameters.json-result.
        * inspector/scripts/tests/expected/version.json-result: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/expected/version.json-result.
        * inspector/scripts/tests/fail-on-command-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-command-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/fail-on-command-targetTypes-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-command-targetTypes-type.json.
        * inspector/scripts/tests/fail-on-command-targetTypes-value.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-command-targetTypes-value.json.
        * inspector/scripts/tests/fail-on-domain-debuggableTypes-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-domain-debuggableTypes-type.json.
        * inspector/scripts/tests/fail-on-domain-debuggableTypes-value.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-domain-debuggableTypes-value.json.
        * inspector/scripts/tests/fail-on-domain-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-domain-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/fail-on-domain-targetTypes-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-domain-targetTypes-type.json.
        * inspector/scripts/tests/fail-on-domain-targetTypes-value.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-domain-targetTypes-value.json.
        * inspector/scripts/tests/fail-on-duplicate-command-call-parameter-names.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-duplicate-command-call-parameter-names.json.
        * inspector/scripts/tests/fail-on-duplicate-command-return-parameter-names.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-duplicate-command-return-parameter-names.json.
        * inspector/scripts/tests/fail-on-duplicate-event-parameter-names.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-duplicate-event-parameter-names.json.
        * inspector/scripts/tests/fail-on-duplicate-type-declarations.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-duplicate-type-declarations.json.
        * inspector/scripts/tests/fail-on-duplicate-type-member-names.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-duplicate-type-member-names.json.
        * inspector/scripts/tests/fail-on-enum-with-no-values.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-enum-with-no-values.json.
        * inspector/scripts/tests/fail-on-event-targetType-matching-domain-debuggableType.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-event-targetType-matching-domain-debuggableType.json.
        * inspector/scripts/tests/fail-on-event-targetTypes-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-event-targetTypes-type.json.
        * inspector/scripts/tests/fail-on-event-targetTypes-value.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-event-targetTypes-value.json.
        * inspector/scripts/tests/fail-on-number-typed-optional-parameter-flag.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-number-typed-optional-parameter-flag.json.
        * inspector/scripts/tests/fail-on-number-typed-optional-type-member.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-number-typed-optional-type-member.json.
        * inspector/scripts/tests/fail-on-string-typed-optional-parameter-flag.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-string-typed-optional-parameter-flag.json.
        * inspector/scripts/tests/fail-on-string-typed-optional-type-member.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-string-typed-optional-type-member.json.
        * inspector/scripts/tests/fail-on-type-declaration-using-type-reference.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-type-declaration-using-type-reference.json.
        * inspector/scripts/tests/fail-on-type-reference-as-primitive-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-type-reference-as-primitive-type.json.
        * inspector/scripts/tests/fail-on-type-with-lowercase-name.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-type-with-lowercase-name.json.
        * inspector/scripts/tests/fail-on-unknown-type-reference-in-type-declaration.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-unknown-type-reference-in-type-declaration.json.
        * inspector/scripts/tests/fail-on-unknown-type-reference-in-type-member.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/fail-on-unknown-type-reference-in-type-member.json.
        * inspector/scripts/tests/generate-domains-with-feature-guards.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/generate-domains-with-feature-guards.json.
        * inspector/scripts/tests/same-type-id-different-domain.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/same-type-id-different-domain.json.
        * inspector/scripts/tests/shadowed-optional-type-setters.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/shadowed-optional-type-setters.json.
        * inspector/scripts/tests/should-strip-comments.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/should-strip-comments.json.
        * inspector/scripts/tests/type-declaration-aliased-primitive-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-declaration-aliased-primitive-type.json.
        * inspector/scripts/tests/type-declaration-array-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-declaration-array-type.json.
        * inspector/scripts/tests/type-declaration-enum-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-declaration-enum-type.json.
        * inspector/scripts/tests/type-declaration-object-type.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-declaration-object-type.json.
        * inspector/scripts/tests/type-requiring-runtime-casts.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-requiring-runtime-casts.json.
        * inspector/scripts/tests/type-with-open-parameters.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/type-with-open-parameters.json.
        * inspector/scripts/tests/version.json: Renamed from Source/JavaScriptCore/inspector/scripts/tests/generic/version.json.
        * inspector/scripts/tests/generic/definitions-with-mac-platform.json: Removed.
        * inspector/scripts/tests/generic/expected/definitions-with-mac-platform.json-result: Removed.
        * inspector/scripts/tests/generic/fail-on-command-with-invalid-platform.json: Removed.
        * inspector/scripts/tests/generic/expected/fail-on-command-with-invalid-platform.json-error: Removed.
        * inspector/scripts/tests/generic/fail-on-type-with-invalid-platform.json: Removed.
        * inspector/scripts/tests/generic/expected/fail-on-type-with-invalid-platform.json-error: Removed.
        * inspector/scripts/tests/ios/definitions-with-mac-platform.json: Removed.
        * inspector/scripts/tests/ios/expected/definitions-with-mac-platform.json-result: Removed.
        * inspector/scripts/tests/all/definitions-with-mac-platform.json: Removed.
        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result: Removed.
        Don't separate the inspector generator tests by platform.

2020-05-27  Keith Miller  <keith_miller@apple.com>

        in_structure_property needs to handle constants on the RHS of the "in"
        https://bugs.webkit.org/show_bug.cgi?id=212399

        Reviewed by Saam Barati.

        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):

2020-05-27  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Unreviewed build fix. Check the value of XCODE_VERSION_ACTUAL rather
        than XCODE_VERSION_MAJOR when determining whether to use the XCBuild
        or non-XCBuild method of running header post-processing scripts.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-05-26  Mark Lam  <mark.lam@apple.com>

        Add some new emitters to the X86_64 and ARM64 MacroAssemblers.
        https://bugs.webkit.org/show_bug.cgi?id=212385

        Reviewed by Robin Morisset.

        This patch adds these MacroAssembler emitters: 
            clearBit64
            clearBits64WithMask
            countTrailingZeros64WithoutNullCheck

        clearBit64 clears a bit.

        clearBits64WithMask does the equivalent of and64 with the 1's complement of the
        provided mask.

        countTrailingZeros64WithoutNullCheck does the same thing as countTrailingZeros64,
        except that it assumes that the word in the register it is processing will never
        be null, and therefore skips the null check.  This is useful in code generation
        that already does a null check ahead of time.  So, there's no need to do a
        redundant null check.

        Also added testmasm tests for these emitters.

        * assembler/AbortReason.h:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::clearBit64):
        (JSC::MacroAssemblerARM64::clearBits64WithMask):
        (JSC::MacroAssemblerARM64::countTrailingZeros64WithoutNullCheck):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::countTrailingZeros64WithoutNullCheck):
        (JSC::MacroAssemblerX86_64::clearBit64):
        (JSC::MacroAssemblerX86_64::clearBits64WithMask):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::btrq_rr):
        * assembler/testmasm.cpp:
        (JSC::testClearBit64):
        (JSC::testClearBits64WithMask):
        (JSC::testClearBits64WithMaskTernary):
        (JSC::testCountTrailingZeros64Impl):
        (JSC::testCountTrailingZeros64):
        (JSC::testCountTrailingZeros64WithoutNullCheck):
        (JSC::run):

2020-05-26  Yoshiaki JITSUKAWA  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Enable RemoteWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=212312

        Reviewed by Don Olmstead.

        * API/JSRemoteInspectorServer.cpp:
        Fix compile error.
        * PlatformPlayStation.cmake:
        Add JSRemoteInspectorServer.h to the public header list.
        * inspector/remote/socket/posix/RemoteInspectorSocketPOSIX.cpp:
        Set PlayStation specific socket option.

2020-05-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        IteratorClose should suppress GetMethod errors
        https://bugs.webkit.org/show_bug.cgi?id=212378

        Reviewed by Keith Miller.

        This patch implements recent spec change [1] that prevents "return" method lookup error
        from overriding outer exception, aligning JSC with V8 and SpiderMonkey.

        It is accomplished by moving pushTry() before emitGetById() in BytecodeGenerator.cpp
        (covered by test262 suite) and removal of RETURN_IF_EXCEPTION in IteratorOperations.cpp
        (added a stress test).

        Before this patch, JSC partly implemented the spec change [1] by suppressing TypeError
        if "return" method of iterator was not callable.

        BytecodeGenerator::emitDelegateYield() is intentionally left unchanged.
        Also, this patch utilizes emitIteratorGenericClose() to avoid code duplication.
        for/of microbenchmarks are neutral.

        [1]: https://github.com/tc39/ecma262/pull/1408

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGenericEnumeration):
        (JSC::BytecodeGenerator::emitEnumeration):
        * runtime/IteratorOperations.cpp:
        (JSC::iteratorClose):

2020-05-26  Mark Lam  <mark.lam@apple.com>

        SamplingProfiler::takeSample() should not assume that ENABLE(WEBASSEMBLY) means Wasm is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=212382

        Reviewed by Saam Barati.

        Wasm can still be disabled at runtime with JSC options.  Fixing this will allow
        sampling profiler tests to run with JSC_useJIT=0 without crashing.

        * runtime/SamplingProfiler.cpp:
        (JSC::FrameWalker::FrameWalker):
        (JSC::FrameWalker::recordJITFrame):
        (JSC::CFrameWalker::CFrameWalker):
        (JSC::SamplingProfiler::takeSample):

2020-05-26  Keith Rollin  <krollin@apple.com>

        Enable the use of XCBuild by default in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=209890
        <rdar://problem/44182078>

        Reviewed by Darin Adler.

        Switch from the "legacy" Xcode build system to the "new" build system
        (also known as "XCBuild"). Switching to the new system speeds up
        builds by a small percentage, better validates projects for
        build-related issues (such as dependency cycles), lets WebKit benefit
        from future improvements in XCBuild such as those coming from the
        underlying llbuild open source project, and prepares us for any other
        tools built for this new ecosystem.

        Specific changes:

        - Remove Xcode project and workspace settings that selected the Build
          system, allowing the default to take hold (which is currently the
          New build system).
        - Updated webkitdirs.pm with a terser check for Xcode version.
        - Update build-webkit and Makefile.shared to be explicit when using
          the old build system (no longer treat it as a default or fall-back
          configuration).
        - Update various xcconfig files similarly to treat the default as
          using the new build system.
        - Update various post-processing build steps to check for Xcode 11.4
          and to no longer treat the default as using the old build system.

        * Configurations/JavaScriptCore.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-05-23  Paulo Matos  <pmatos@igalia.com>

        Fix non-unified builds for x86_64
        https://bugs.webkit.org/show_bug.cgi?id=212297

        Reviewed by Adrian Perez de Castro.

        * b3/B3BasicBlock.cpp:
        * b3/B3CaseCollection.cpp:
        * b3/B3DuplicateTails.cpp:
        * b3/B3EnsureLoopPreHeaders.cpp:
        * b3/B3FenceValue.cpp:
        * b3/B3HoistLoopInvariantValues.cpp:
        * b3/B3LegalizeMemoryOffsets.cpp:
        * b3/B3LowerMacrosAfterOptimizations.cpp:
        * b3/B3LowerToAir.cpp:
        * b3/B3MathExtras.cpp:
        * b3/B3MemoryValue.cpp:
        * b3/B3Procedure.cpp:
        * b3/B3StackmapValue.cpp:
        * b3/B3SwitchValue.cpp:
        * b3/B3UseCounts.cpp:
        * b3/B3Validate.cpp:
        * b3/B3VariableValue.cpp:
        * b3/B3WasmAddressValue.cpp:
        * b3/B3WasmBoundsCheckValue.cpp:
        * ftl/FTLCommonValues.cpp:
        * ftl/FTLCompile.cpp:
        * ftl/FTLOSREntry.cpp:
        * ftl/FTLOSRExitCompiler.cpp:
        * wasm/WasmInstance.cpp:
        * wasm/WasmStreamingParser.cpp:
        * wasm/js/JSToWasm.cpp:
        * wasm/js/JSToWasmICCallee.cpp:
        * wasm/js/JSWebAssembly.cpp:
        * wasm/js/JSWebAssemblyCodeBlock.cpp:
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        * wasm/js/WebAssemblyFunction.cpp:
        * wasm/js/WebAssemblyFunctionBase.cpp:
        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        * wasm/js/WebAssemblyMemoryConstructor.cpp:
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        * wasm/js/WebAssemblyModulePrototype.cpp:
        * wasm/js/WebAssemblyModuleRecord.cpp:
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        * wasm/js/WebAssemblyTableConstructor.cpp:
        * wasm/js/WebAssemblyTablePrototype.cpp:

2020-05-22  Yoshiaki JITSUKAWA  <yoshiaki.jitsukawa@sony.com>

        [PlayStation] Enable JSC shell to run
        https://bugs.webkit.org/show_bug.cgi?id=212294

        Reviewed by Ross Kirsling.

        * shell/PlatformPlayStation.cmake:
        Set working directory for Visual Studio
        * shell/playstation/Initializer.cpp:
        Load libJavaScriptCore as we now build it as SHARED.

2020-05-22  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array.prototype.splice doesn't set "length" of returned object
        https://bugs.webkit.org/show_bug.cgi?id=212285

        Reviewed by Darin Adler.

        This change implements step 12 of Array.prototype.splice [1], which is observable
        if result object is not JSArray, aligning JSC with V8 and SpiderMonkey.

        Only slow path of splice() is affected by this patch; zero-argument case already
        performs setLength(). Microbenchmarks are neutral.

        [1]: https://tc39.es/ecma262/#sec-array.prototype.splice

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):

2020-05-22  Saam Barati  <sbarati@apple.com>

        in_by_val inside structure property for-in loop should use an opcode like has_structure_property but for "in"
        https://bugs.webkit.org/show_bug.cgi?id=212239

        Reviewed by Tadeu Zagallo.

        There is code inside Speedometer 2 that is like:
        
        ```
        for (let p in o) {
            if (p in o2)
                ...
        }
        ```
        
        Where o and o2 frequently share the same structure. Elm does this when it's
        diffing two objects. We already optimize o2[p] (get_by_val) in the above loop
        for structure properties. This patch adds that same optimization for in_by_val.
        Because we already emit a "structure" loop for for-in, where we iterate structure
        properties, the fast path for the above, where o and o2 have the same
        structure is simply a structure check followed by return true.
        
        This patch introduces the new opcode: op_in_structure_property. Its fast path is identical
        to op_has_structure_property. Its slow path, however, behaves like "in", which
        uses the HasProperty internal method, unlike op_has_structure_property,
        which uses the GetOwnProperty internal method. This behavior difference is
        observable using Proxy.
        
        This a 5% perf improvement in the Elm subtest in Speedometer 2.

        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitInByVal):
        (JSC::rewriteOp):
        (JSC::StructureForInContext::finalize):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::StructureForInContext::addInInst):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileInStructureProperty):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasStructurePropertyImpl):
        (JSC::FTL::DFG::LowerDFGToB3::compileHasStructureProperty):
        (JSC::FTL::DFG::LowerDFGToB3::compileInStructureProperty):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_in_structure_property):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_in_structure_property):
        * llint/LLIntOffsetsExtractor.cpp:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasPropertyGeneric const):
        * runtime/JSPropertyNameEnumerator.h:

2020-05-22  Keith Miller  <keith_miller@apple.com>

        Checkpoint inlined call return handler needs an exception check when dispatching
        https://bugs.webkit.org/show_bug.cgi?id=212104

        Reviewed by Yusuke Suzuki.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::dispatchToNextInstruction):
        (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call):
        (JSC::LLInt::slow_path_checkpoint_osr_exit):

2020-05-22  Paulo Matos  <pmatos@igalia.com>

        Fix non-unified builds for i386 build
        https://bugs.webkit.org/show_bug.cgi?id=212258

        Reviewed by Adrian Perez de Castro.

        * API/JSContextRef.cpp:
        * bytecode/IntrinsicGetterAccessCase.cpp:
        * inspector/InjectedScriptHost.cpp:
        * llint/LLIntData.cpp:
        * llint/LLIntThunks.cpp:
        * runtime/Exception.cpp:
        * runtime/ExecutableBase.cpp:
        * runtime/JSBigInt.cpp:
        * runtime/JSInternalPromiseConstructor.cpp:
        * runtime/JSString.cpp:
        * runtime/ScopedArgumentsTable.cpp:
        * runtime/ScriptExecutable.cpp:
        * runtime/SparseArrayValueMap.cpp:
        * runtime/StructureRareData.cpp:

2020-05-22  Paulo Matos  <pmatos@igalia.com>

        Fix typo in JSCVirtualMachine documentation

        Unreviewed Typo Fix.

        * API/glib/JSCVirtualMachine.cpp:

2020-05-21  Robin Morisset  <rmorisset@apple.com>

        Various compile-time boolean flags could/should be marked constexpr
        https://bugs.webkit.org/show_bug.cgi?id=212244

        Reviewed by Mark Lam.

        This trivial patch saves roughly 16kB from the JavaScriptCore binary in release mode.

        * b3/B3OptimizeAssociativeExpressionTrees.cpp:
        * b3/air/AirAllocateRegistersByGraphColoring.cpp:
        * b3/air/AirSimplifyCFG.cpp:
        (JSC::B3::Air::simplifyCFG):
        * b3/air/AirTmpWidth.cpp:
        (JSC::B3::Air::TmpWidth::recompute):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * heap/GCIncomingRefCountedInlines.h:
        (JSC::GCIncomingRefCounted<T>::filterIncomingReferences):
        * heap/Heap.cpp:
        (JSC::Heap::updateAllocationLimits):
        * wasm/WasmEntryPlan.cpp:

2020-05-21  Robin Morisset  <rmorisset@apple.com>

        Remove AssemblerBufferWithConstantPool.h (as it has been dead for years)
        https://bugs.webkit.org/show_bug.cgi?id=212241

        Reviewed by Yusuke Suzuki.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AssemblerBufferWithConstantPool.h: Removed.

2020-05-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        Use @isUndefinedOrNull instead of abstract equality with null
        https://bugs.webkit.org/show_bug.cgi?id=210954

        Reviewed by Yusuke Suzuki.

        This patch:

        a) Replaces 2 `!== @undefined` comparisons in String.prototype.{replace,replaceAll}
        with @isUndefinedOrNull() as per spec [1], aligning JSC with V8 and SpiderMonkey.

        b) Replaces 3 `!= @undefined` and 7 `!= null` comparisons with @isUndefinedOrNull()
        as only the latter is correct with [[IsHTMLDDA]] aka MasqueradesAsUndefined objects [2].

        c) Removes @isDictionary() since it is unused, easy to inline and its name is quite
        misleading: one might expect it to perform Structure::isDictionary().

        [1]: https://tc39.es/ecma262/#sec-getmethod (step 3)
        [2]: https://tc39.es/ecma262/#sec-IsHTMLDDA-internal-slot

        * builtins/ArrayConstructor.js:
        * builtins/GlobalOperations.js:
        (globalPrivate.isDictionary): Deleted.
        * builtins/RegExpPrototype.js:
        (Symbol.split): Unobservable as there is `=== null` check in @regExpExec.
        * builtins/StringPrototype.js:
        (match):
        (replace):
        (replaceAll):
        (search):
        (split):
        * builtins/TypedArrayConstructor.js:

2020-05-21  Saam Barati  <sbarati@apple.com>

        Add an option that exposes functions on the global object to turn on and off the sampling profiler and the super sampler
        https://bugs.webkit.org/show_bug.cgi?id=212178

        Reviewed by Yusuke Suzuki.

        When profiling things like Speedometer inside the browser, it's important to
        to only enable the super sampler and the sampling profiler around the code
        that you want profiled. Otherwise, you will be profiling things that aren't
        relevant to the benchmark score. This patch adds a new option, exposeProfilersOnGlobalObject,
        which when true, will expose JS functions on the global object that allow
        enabling/disabling the super sampler and the sampling profiler. This way,
        we can change the Speedometer source code locally such that these profilers
        are only sampling code accounted for in the benchmark score.

        * bytecode/SuperSampler.cpp:
        (JSC::initializeSuperSampler):
        (JSC::enableSuperSampler):
        (JSC::disableSuperSampler):
        * bytecode/SuperSampler.h:
        * jsc.cpp:
        (jscmain):
        * runtime/JSGlobalObject.cpp:
        (JSC::enableSamplingProfiler):
        (JSC::disableSamplingProfiler):
        (JSC::enableSuperSampler):
        (JSC::disableSuperSampler):
        (JSC::JSGlobalObject::init):
        * runtime/OptionsList.h:

2020-05-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix 32bit JSBigInt with INT32_MAX < x <= UINT32_MAX
        https://bugs.webkit.org/show_bug.cgi?id=212193

        Reviewed by Mark Lam.

        In 32bit architecture, we are creating one-length JSBigInt for INT32_MIN <= x <= INT32_MAX, and two-length JSBigInt otherwise.
        This is wrong since one-length JSBigInt should cover from -UINT32_MAX <= x <= UINT32_MAX.

        This patch fixes the bug and cleans up createFrom(VM&, int64_t). And it also adds JSBigInt::createFrom(VM&, uint64_t) in preparation for [1]
        Currently, this path is not used while it was used previously because BigIntConstructor starts using JSBigInt::createFrom(VM&, double). But this
        will be used in [1], and simply the existing implementation is wrong.

        [1]: https://bugs.webkit.org/show_bug.cgi?id=190800

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createFromImpl):
        (JSC::JSBigInt::createFrom):
        * runtime/JSBigInt.h:

2020-05-21  Paulo Matos  <pmatos@igalia.com>

        Further non-unified build fixes
        https://bugs.webkit.org/show_bug.cgi?id=212195

        Reviewed by Adrian Perez de Castro.

        * bytecode/InstanceOfStatus.cpp:
        * heap/MarkedSpace.cpp:
        * runtime/ObjectInitializationScope.cpp:
        * runtime/ThrowScope.cpp:

2020-05-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array.prototype.concat is incorrect with objects whose "length" exceeds 2 ** 32 - 1
        https://bugs.webkit.org/show_bug.cgi?id=212167

        Reviewed by Saam Barati.

        This patch increases "length" limit of Array.prototype.concat result to @MAX_SAFE_INTEGER
        and changes thrown error to TypeError, aligning JSC with the spec [1], V8, and SpiderMonkey.

        Also, adds missing @MAX_SAFE_INTEGER overflow check in Array.from [2] (we implement similar
        checks in other methods). SunSpider and microbenchmarks/concat-append-one.js are both neutral.

        [1]: https://tc39.es/ecma262/#sec-array.prototype.concat (steps 5.c.iii, 5.d.ii)
        [2]: https://tc39.es/ecma262/#sec-array.from (step 5.e.i)

        * builtins/ArrayConstructor.js:
        (from):
        * builtins/ArrayPrototype.js:
        (globalPrivate.concatSlowPath):

2020-05-20  Michael Saboff  <msaboff@apple.com>

        [Wasm] Limit the size of Wasm function we optimize in OMG mode
        https://bugs.webkit.org/show_bug.cgi?id=212105

        Reviewed by Filip Pizlo.

        Given that memory grows O(N^2) compiling Wasm code through the OMG path,
        we can run out of memory when compiling large Wasm functions.  This change adds
        a limit option, webAssemblyBBQFallbackSize,  When the Wasm function size is
        equal to or greater than this limit we always compile using BBQ optimization
        parameters.

        As part of this change, we still go through the OMG loop entry OSR code
        generation path for functions that are at or above the threshold, but we
        compile such functions with BBQ compilation optimization levels.
        Also for Wasm functions at or above  the threashold, we don't tier up to an
        OMG compiled normal entry function.  Instead we stay with the BBQ compiled version.

        * runtime/OptionsList.h:
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::AirIRGenerator):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::B3IRGenerator):
        (JSC::Wasm::parseAndCompile):
        * wasm/WasmCompilationMode.cpp:
        (JSC::Wasm::wasmFunctionSizeCanBeOMGCompiled):
        * wasm/WasmCompilationMode.h:
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::operationWasmTriggerOSREntryNow):

2020-05-19  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r261755): Win/Linux non-unified builds have hundreds of link failures
        https://bugs.webkit.org/show_bug.cgi?id=212111

        Unreviewed build fix.

        * API/:
        * bindings/:
        * bytecode/:
        * bytecompiler/NodesCodegen.cpp:
        * debugger/:
        * dfg/:
        * heap/:
        * inspector/:
        * interpreter/:
        * jit/:
        * llint/LLIntEntrypoint.cpp:
        * parser/:
        * profiler/:
        * runtime/:
        Restore *Inlines.h includes for >300 files,
        but try to preserve the spirit of the original patch by pruning redundancies along the way.

2020-05-19  Mark Lam  <mark.lam@apple.com>

        Put PtrTagLookup data structures in Configs for freezing.
        https://bugs.webkit.org/show_bug.cgi?id=212089
        <rdar://problem/63401487>

        Reviewed by Robin Morisset.

        PtrTagLookup data structures were always meant to only be initialized once at
        initialization time and never modified thereafter.  This patch puts them in the
        Configs for freezing to document and enforce this invariant.

        * runtime/JSCConfig.h:
        * runtime/JSCPtrTag.cpp:
        (JSC::initializePtrTagLookup):

2020-05-19  Youenn Fablet  <youenn@apple.com>

        [ Mac wk1 Debug ] imported/w3c/web-platform-tests/fetch/api/basic/stream-safe-creation.any.html  is flaky crashing with alerts - WTFCrashWithInfo - SC::JSObject::get(JSC::JSGlobalObject*, JSC::PropertyName)
        https://bugs.webkit.org/show_bug.cgi?id=211923
        <rdar://problem/63244249>

        Reviewed by Mark Lam.

        * runtime/JSObject.h:
        (JSC::JSObject::get const):
        When calling get, a terminate exception might happen if running in workers.
        Return early in that case. Add an ASSERT that only terminated exceptions can actually happen.

2020-05-18  Andy Estes  <aestes@apple.com>

        http/tests/ssl/applepay/ApplePayInstallmentConfiguration.https.html fails in public SDK builds
        https://bugs.webkit.org/show_bug.cgi?id=212000
        <rdar://problem/63323082>

        Reviewed by Youenn Fablet.

        * Configurations/FeatureDefines.xcconfig:

2020-05-18  Saam Barati  <sbarati@apple.com>

        Do more speculation that a GetByVal/PutByVal will have an int32 index based on data from ArrayProfile
        https://bugs.webkit.org/show_bug.cgi?id=211877

        Reviewed by Yusuke Suzuki.

        Before this patch, when a GetByVal or PutByVal had a non int32 prediction for
        their incoming index, they'd fall completely off the fast path. However, there
        are programs where an int32 is boxed inside a double, but our notion of
        predicted types don't fully capture this fact. For example, if we have a double Add
        to produce an array index, that double Add will predict a full double result,
        not a SpecAnyIntAsDouble. However, for GetByVal and PutByVal, there is information
        from ArrayProfile we can use to determine if the incoming value is expected to
        be in int32 range. The heuristic this patch introduces is:
        
        isFullNumberSpeculation(indexSpeculation)
        && node->arrayMode().isSpecific()
        && node->arrayMode().isInBounds()
        && !m_graph.hasExitSite(node->origin.semantic, Overflow) // DoubleAsInt32 will exit with Overflow on failure
        
        If these conditions are met, we'll now emit a DoubleAsInt32 conversion node
        for the index. This puts along the fast path for GetByVal and PutByVal on
        array accesses where the incoming index is an int32 boxed in a double.
        
        To make the above isFullNumberSpeculation check more robust, this patch also
        makes it so non index double accesses result in marking the array profile as
        out of bounds. So this means indices greater than max safe index, and also,
        fractional doubles.
        
        
        This is a 3.75x speedup on microbenchmarks/get-and-put-by-val-double-index-dont-fall-off-a-cliff.js

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * jit/JITOperations.cpp:
        (JSC::getByVal):

2020-05-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt peephole compare should speculate appropriately
        https://bugs.webkit.org/show_bug.cgi?id=212037
        <rdar://problem/63346966>

        Reviewed by Saam Barati.

        SpeculativeJIT::nonSpeculativePeepholeBranch missed BigInt speculation. This patch renames it
        to SpeculativeJIT::genericJSValuePeepholeBranch and adds speculation checks appropriately.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::genericJSValuePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch): Deleted.
        * dfg/DFGSpeculativeJIT.h:

2020-05-18  Keith Miller  <keith_miller@apple.com>

        OSR loop entry to iterator_next generic needs to CheckNotEmpty on m_next
        https://bugs.webkit.org/show_bug.cgi?id=212001

        Reviewed by Saam Barati.

        If we happen to OSR enter into iterator_next during a for-of loop
        that has only profiled a generic iterator but is actually running
        a fast iterator we will incorrectly perform the Call node This
        could happen if we loop_hint OSR enter the first time have seen a
        fast iterator. If this happens right now, we generate the following
        code:

        D@113:<!2:loc15>    GetLocal(Check:Untyped:D@198, JS|MustGen|UseAsOther, Function|Empty, loc13(W~/FlushedJSValue), machine:loc10, R:Stack(loc13),Stack(loc5), bc#46, ExitValid)  predicting Function|Empty
          0x4913f1806151: mov -0x58(%rbp), %rsi
        D@114:<!0:->    FilterCallLinkStatus(Check:Untyped:D@113, MustGen, (Function: Object: 0x1053f47e0 with butterfly 0x0 (Structure 0x1053f9260:[0x6dad, Function, {}, NonArray, Proto:0x1050fc248]), StructureID: 28077; Executable: next#Ddkruz:[0x1053c0480->0x1053e4a80, BaselineFunctionCall, 54 (StrictMode)]), R:Stack(loc5), W:SideState, bc#46, ExitValid)
        D@115:<!6:loc15>    Call(Check:Untyped:D@113, Check:Untyped:D@110, JS|MustGen|VarArgs|UseAsOther, Final, R:World,Stack(loc5), W:Heap, ExitsForExceptions, ClobbersExit, bc#46, ExitValid)  predicting Final
          0x4913f1806155: mov $0x1, 0x10(%rsp)
          0x4913f180615d: mov %rax, 0x18(%rsp)
          0x4913f1806162: mov %rsi, 0x8(%rsp)
          0x4913f1806167: mov %rax, -0xa0(%rbp)
          0x4913f180616e: mov $0x0, 0x24(%rbp)
          0x4913f1806175: mov $0x0, %r11
          0x4913f180617f: cmp %r11, %rsi
          0x4913f1806182: jnz 0x4913f1806192
          0x4913f1806188: call 0x4913f180618d
          0x4913f180618d: jmp 0x4913f18061ae
          0x4913f1806192: mov %rsi, %rax
          0x4913f1806195: mov $0x1050cfcb0, %rdx
          0x4913f180619f: mov $0x1052fab68, %rcx
          0x4913f18061a9: call 0x4913f1801680
          0x4913f18061ae: lea -0xd0(%rbp), %rsp
        D@116:<!0:->    MovHint(Check:Untyped:D@115, MustGen, tmp0, R:Stack(loc5), W:SideState, ClobbersExit, bc#46, ExitInvalid)
        D@332:<!0:->    InvalidationPoint(MustGen, R:Stack(loc5), W:SideState, Exits, bc#46, exit: bc#46cp#1, ExitValid)
        D@335:<!0:->    CheckStructure(Check:Cell:D@115, MustGen, [%B2:Object], R:Stack(loc5),JSCell_structureID, Exits, bc#46, exit: bc#46cp#1, ExitValid)
          0x4913f18061b5: test %rax, %r15
          0x4913f18061b8: jnz 0x4913f18068db
          0x4913f18061be: cmp $0xcaae, (%rax)
          0x4913f18061c4: jnz 0x4913f18068f1

        Loc13 in this IR is the location of the next function. Since it's
        nullptr, we will pass the initial fast-path value of 0 and make a
        garbage call. This is because Call does not know how to handle
        empty values. Subsequently, we will fail a structure check for the
        Call's result and OSR exit to the getDone checkpoint. The fix for
        this is to simply put a CheckNotEmpty at the top of the generic
        case. 99.9% of the time this check will be eliminated so it
        doesn't really cost anything.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2020-05-17  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, link fix for our internal Debug build

        * heap/AlignedMemoryAllocator.cpp:

2020-05-17  Lauro Moura  <lmoura@igalia.com>

        [JSC] Silence unused-but-set-parameter warnings for older compilers
        https://bugs.webkit.org/show_bug.cgi?id=212006

        Reviewed by Mark Lam.

        GCC up to 9.x will emit unused-but-set-parameter for the sources
        parameter when NumberOfRegisters is zero (the if block is eliminated)
        and for destinations when also ASSERT_ENABLED is false.

        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupStubArgs):

2020-05-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Make OutOfMemory error as instance of RangeError
        https://bugs.webkit.org/show_bug.cgi?id=211952

        Reviewed by Mark Lam.

        The spec sometimes requires "check parameters and throw RangeError" before allocating an object.
        But we are just allocating an object and throwing an out-of-memory error since wrong parameter will
        cause out-of-memory. If out-of-memory error is RangeError, then we can keep our current behavior while
        we can make us spec compliant. And note that out-of-memory error is RangeError in SpiderMonkey and V8.

        This patch makes out-of-memory error as RangeError instead of Error. We also fix @throwOutOfMemoryError
        in builtin code: the previous thrown errors are not marked as out-of-memory error.

        * bytecode/BytecodeList.rb:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitThrowStaticError):
        (JSC::BytecodeGenerator::emitThrowReferenceError):
        (JSC::BytecodeGenerator::emitThrowTypeError):
        (JSC::BytecodeGenerator::emitThrowRangeError):
        (JSC::BytecodeGenerator::emitThrowOutOfMemoryError):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwTypeError):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_throwRangeError):
        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createOutOfMemoryError):
        * runtime/Error.h:
        * runtime/ErrorType.cpp:
        (JSC::errorTypeName):
        (WTF::printInternal):
        * runtime/ErrorType.h: We introduced ErrorTypeWithExtension separately from ErrorType to keep ErrorType one-on-one to spec-specified error types.

2020-05-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] getFunctionRealm should not use recursion
        https://bugs.webkit.org/show_bug.cgi?id=211965
        <rdar://problem/63268287>

        Reviewed by Saam Barati.

        This patch avoids using recursion in getFunctionRealm to avoid stack-overflow.

        * runtime/InternalFunction.cpp:
        (JSC::getFunctionRealm):

2020-05-15  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix internal arm64e build.

        * dfg/DFGSpeculativeJIT.cpp:

2020-05-15  Keith Miller  <keith_miller@apple.com>

        Unreviewed, fix internal fast tls build.

        * jit/AssemblyHelpers.cpp:

2020-05-15  Ross Kirsling  <ross.kirsling@sony.com>

        [IWYU] Remove unnecessary includes from JSC implementation files
        https://bugs.webkit.org/show_bug.cgi?id=211867

        Reviewed by Keith Miller.

        * API/:
        * assembler/:
        * b3/:
        * bindings/:
        * builtins/BuiltinExecutables.cpp:
        * bytecode/:
        * bytecompiler/:
        * debugger/:
        * dfg/:
        * disassembler/:
        * ftl/:
        * heap/:
        * inspector/:
        * interpreter/:
        * jit/:
        * jsc.cpp:
        * llint/:
        * parser/:
        * profiler/:
        * runtime/:
        * testRegExp.cpp:
        * tools/:
        * wasm/:
        * yarr/:

2020-05-15  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wtype-limits warning spam from CCallHelpers.h
        https://bugs.webkit.org/show_bug.cgi?id=211701

        Reviewed by Darin Adler.

        Skip the problematic loops when TargetSize or NumberOfRegisters is 0 using constexpr if.
        Solution suggested by Mark Lam.

        * jit/CCallHelpers.h:
        (JSC::CCallHelpers::setupStubArgs):
        (JSC::CCallHelpers::clampArrayToSize):

2020-05-15  Mark Lam  <mark.lam@apple.com>

        Remove debugging dataLogs in LinkBuffer::copyCompactAndLinkCode() for release builds.
        https://bugs.webkit.org/show_bug.cgi?id=211961
        <rdar://problem/63264848>

        Reviewed by Keith Miller.

        * assembler/LinkBuffer.cpp:
        (JSC::LinkBuffer::copyCompactAndLinkCode):

2020-05-15  Paulo Matos  <pmatos@igalia.com>

        Fix ARM NEON only assert
        https://bugs.webkit.org/show_bug.cgi?id=211889

        Reviewed by Mark Lam.

        Fix assert that breaks if ARM does not contain NEON extensions -
        the register d16 is only defined if NEON exists.

        * assembler/ARMv7Assembler.h:
        (JSC::RegisterNames::asSingle):
        (JSC::RegisterNames::asSingleUpper):

2020-05-14  Saam Barati  <sbarati@apple.com>

        GetByVal and PutByVal runtime operations shouldn't fall off a performance cliff when the property is an integer boxed as a double
        https://bugs.webkit.org/show_bug.cgi?id=211935

        Reviewed by Yusuke Suzuki and Mark Lam.

        There were parts in the runtime for get_by_val that weren't properly handling
        ints boxed as doubles along the fast path. This could lead to terrible
        performance as we could go from double -> string -> int while converting the
        subscript into a property to access.
        
        This patch fixes that, and removes the duplicate code we had throughout the
        codebase that does this conversion. I'm adding a new functions tryGetAsUint32Index
        and tryGetAsInt32 which will handle the double to int conversion.
        
        This is a 10x speedup on the microbenchmark get-and-put-by-val-double-index-dont-fall-off-a-cliff.js

        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByValInternal):
        * jit/JITOperations.cpp:
        (JSC::getByVal):
        * jsc.cpp:
        (functionAsDoubleNumber):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::tryGetAsUint32Index):
        (JSC::JSValue::tryGetAsInt32):

2020-05-14  Devin Rousso  <drousso@apple.com>

        [ESNext] enable logical assignment operators by default
        https://bugs.webkit.org/show_bug.cgi?id=211921

        Reviewed by Yusuke Suzuki.

        * runtime/OptionsList.h:
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        Remove `useLogicalAssignmentOperators` option.

2020-05-14  Keith Miller  <keith_miller@apple.com>

        Undecided Arrays shouldn't need to be OriginalArray to covert to GetArrayLength
        https://bugs.webkit.org/show_bug.cgi?id=211914

        Reviewed by Saam Barati.

        Also, fix a bug that arrayModesThatPassFiltering() can't handle
        Undecided arrays. Because we can now emit a CheckArray on
        Undecided AI will try to figure out what types flow out of the
        check. Since Undecided was unhandled by filtering, AI will assume
        bottom is the only possible value and the DFG/FTL will insert a
        breakpoint, causing a crash.

        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::refine const):
        * dfg/DFGArrayMode.h:
        (JSC::DFG::ArrayMode::arrayModesThatPassFiltering const):

2020-05-14  Keith Miller  <keith_miller@apple.com>

        GetArrayLength should be "blessed" during Fixup phase in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=211540

        Reviewed by Saam Barati.

        If we got an ArrayMode during bytecode parsing for-of that expects
        to be configured during Fixup, then right now we will crash on
        GetArrayLength. This fixes GetArrayLength to properly call
        blessArrayOperation and fixes clobberize to know that
        GetArrayLength could have a ForceExit ArrayMode briefly before
        being cleaned up.

        When blessing GetArrayLength we can now produce CheckArrays that
        have an AnyTypedArray ArrayMode::Type. So this patch expands
        CheckArray to properly handle that. To help with this we expand
        branchIfType to have a starting JSType and an optional ending
        JSType. Additionally, to prevent extra checks AI has been taught
        to fold more ArrayModes so we should almost always avoid new
        runtime checks.

        Lastly, make sure that Undecided Arrays don't fall back to generic
        because GetArrayLength can't be converted to...
        GetArrayLenth. Also, GetArrayLength would previously pass it's own
        speculation for the speculation of the index, which logically
        doesn't make sense. So this patch adds a new constant, which is
        SpecInt32Only, that can be passed if a DFG node doesn't have an
        index.

        * assembler/testmasm.cpp:
        (JSC::testBranchIfType):
        (JSC::testBranchIfNotType):
        (JSC::run):
        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::canBecomeGetArrayLength):
        * dfg/DFGArrayMode.h:
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::blessArrayOperation):
        (JSC::DFG::FixupPhase::attemptToMakeGetArrayLength):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArray):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::isArrayTypeForCheckArray):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfType):
        (JSC::AssemblyHelpers::branchIfNotType):
        * runtime/JSType.h:

2020-05-13  Keith Miller  <keith_miller@apple.com>

        iteration bytecodes need to handle osr exiting from inlined getter frames
        https://bugs.webkit.org/show_bug.cgi?id=211873

        Reviewed by Saam Barati.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::slow_path_checkpoint_osr_exit_from_inlined_call):

2020-05-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename CSS.StyleSheetOrigin.Regular to CSS.StyleSheetOrigin.Author to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=211827

        Reviewed by Timothy Hatcher.

        * inspector/protocol/CSS.json:

2020-05-13  Yusuke Suzuki  <ysuzuki@apple.com>

        JSDOMWindowBase m_windowCloseWatchpoints must be Ref<>
        https://bugs.webkit.org/show_bug.cgi?id=211844

        Reviewed by Mark Lam.

        * bytecode/Watchpoint.cpp:
        (JSC::InlineWatchpointSet::inflateSlow):
        * bytecode/Watchpoint.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/Structure.cpp:
        (JSC::Structure::ensurePropertyReplacementWatchpointSet):
        * runtime/SymbolTable.cpp:
        (JSC::SymbolTableEntry::prepareToWatch):
        * runtime/VM.cpp:
        (JSC::VM::ensureWatchpointSetForImpureProperty):

2020-05-13  Caio Lima  <ticaiolima@gmail.com>

        Making 32-bits JIT build without Unified Build system
        https://bugs.webkit.org/show_bug.cgi?id=211853

        Reviewed by Adrian Perez de Castro.

        This patch is moving some templates to allow non-unified builds on
        32-bits JIT configurations.
        Those templates were from JITArithmetic32_64 and JITPropertyAccess32_64.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareUnsignedAndJump):
        (JSC::JIT::emit_compareUnsigned):
        (JSC::JIT::emit_compareAndJumpSlow):
        (JSC::JIT::emitBinaryDoubleOp):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_compareAndJump): Deleted.
        (JSC::JIT::emit_compareUnsignedAndJump): Deleted.
        (JSC::JIT::emit_compareUnsigned): Deleted.
        (JSC::JIT::emit_compareAndJumpSlow): Deleted.
        (JSC::JIT::emitBinaryDoubleOp): Deleted.
        * jit/JITOpcodes32_64.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitPutByValWithCachedId):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitPutByValWithCachedId): Deleted.

2020-05-13  Caio Lima  <ticaiolima@gmail.com>

        [JSC] Support delete by val/id IC on 32-bits
        https://bugs.webkit.org/show_bug.cgi?id=208207

        Reviewed by Saam Barati.

        This patch implements DeleteById and DeleteByVal IC on 32-bits JIT. It
        includes both Baseline and DFG changes.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileDeleteById):
        (JSC::DFG::SpeculativeJIT::compileDeleteByVal):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileDeleteById): Deleted.
        (JSC::DFG::SpeculativeJIT::compileDeleteByVal): Deleted.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileDeleteById): Deleted.
        (JSC::DFG::SpeculativeJIT::compileDeleteByVal): Deleted.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDelBy):
        * jit/JITInlineCacheGenerator.cpp:
        (JSC::JITDelByValGenerator::JITDelByValGenerator):
        (JSC::JITDelByIdGenerator::JITDelByIdGenerator):
        * jit/JITInlineCacheGenerator.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_val):
        (JSC::JIT::emitSlow_op_del_by_id):

2020-05-13  Saam Barati  <sbarati@apple.com>

        MovHint can see an arguments object be MovHinted to a Tmp
        https://bugs.webkit.org/show_bug.cgi?id=211820
        <rdar://problem/62882158>

        Reviewed by Keith Miller.

        We had an assert that it wasn't possible to have a MovHint from an arguments
        object to a Tmp. However, this is possible with for-of. There is nothing
        about the current algorithm that is specific to only VirtualRegisters. The
        algorithm also works over Tmps. So I've generalized the algorithm to just work
        over Operand.

        * dfg/DFGVarargsForwardingPhase.cpp:

2020-05-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        Move @isConstructor checks from fast paths of Array.from and Array.of
        https://bugs.webkit.org/show_bug.cgi?id=211805

        Reviewed by Keith Miller.

        This semantically equivalent change advances provided Array.{from,of} microbenchmarks by ~60%. 

        Also, this patch removes @isConstructor check from @newPromiseCapabilitySlow (that is heavily
        used by Promise subclasses) since it comes right before [[Construct]], its message doesn't add
        more clarity, and constructability of its argument was likely checked by @speciesConstructor.

        * builtins/ArrayConstructor.js:
        (of):
        (from):
        * builtins/PromiseOperations.js:
        (globalPrivate.newPromiseCapabilitySlow):

2020-05-12  Alexey Shvayka  <shvaikalesh@gmail.com>

        Implement @isConstructor bytecode intrinsic and bytecode for that
        https://bugs.webkit.org/show_bug.cgi?id=144093

        Reviewed by Keith Miller.

        This change replaces @isConstructor link-time-constant with bytecode intrinsic and utilizes it
        in ClassExprNode::emitBytecode() according to the spec [1], aligning JSC with V8 and SpiderMonkey.

        Before this patch, we checked if "prototype" of superclass is an object, which is incorrect for
        generators and bound non-constructor functions with own "prototype".

        OpIsConstructor's fast path can't be easily compiled, and it's not a hot code anyway, so instead
        we reduce code bloat by just calling slow ops from DFG and FTL (if we bail out, we slow down all
        @isConstructor call sites). This advances microbenchmarks/is-constructor.js by ~35%.

        [1]: https://tc39.es/ecma262/#sec-runtime-semantics-classdefinitionevaluation (step 5.f)

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * builtins/BuiltinNames.h:
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitIsConstructor):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ClassExprNode::emitBytecode):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGHeapLocation.cpp:
        (WTF::printInternal):
        * dfg/DFGHeapLocation.h:
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIsConstructor):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsConstructor):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        * runtime/ECMAScriptSpecInternalFunctions.cpp: Removed.
        * runtime/ECMAScriptSpecInternalFunctions.h: Removed.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-05-12  Robin Morisset  <rmorisset@apple.com>

        Exception check for OOM is a bit too late in JSBigInt::exponentiate.
        https://bugs.webkit.org/show_bug.cgi?id=211823

        Reviewed by Mark Lam.

        We were doing multiplyImpl(...).payload.asHeapBigInt(), but multiplyImpl can return a null payload if it causes an exception.
        So we must first check whether an exception was raised, and only if not can we do asHeapBigInt.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::exponentiateImpl):

2020-05-12  Saam Barati  <sbarati@apple.com>

        handling of Check in VarargsForwardingPhase is too pessimistic
        https://bugs.webkit.org/show_bug.cgi?id=211810

        Reviewed by Keith Miller and Filip Pizlo.

        We were treating a check, even if it wasn't on the sink candidate,
        as if it could escape the candidate. That's wrong. Only checks on the
        candidate have the escaping ability.

        * dfg/DFGVarargsForwardingPhase.cpp:

2020-05-12  Keith Miller  <keith_miller@apple.com>

        The bottom value set for m_value in iterator_next should be materialized after a done getter
        https://bugs.webkit.org/show_bug.cgi?id=211811

        Reviewed by Saam Barati.

        Right now, if the done getter contains control flow, then we will
        have the bottom value in a different block from the
        MovHint/SetLocal and we will fail to validate.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>

        Fix existing usage of final/override/virtual in JSC and WTF
        https://bugs.webkit.org/show_bug.cgi?id=211772

        Reviewed by Darin Adler.

        * API/JSAPIWrapperObject.mm:
        * API/JSManagedValue.mm:
        * API/JSScriptSourceProvider.h:
        * API/ObjCCallbackFunction.mm:
        * API/glib/JSAPIWrapperGlobalObject.cpp:
        * API/glib/JSAPIWrapperObjectGLib.cpp:
        * API/glib/JSCWeakValue.cpp:
        * bytecode/AccessCaseSnippetParams.cpp:
        * bytecode/AccessCaseSnippetParams.h:
        * bytecode/CodeBlock.cpp:
        * bytecode/StructureStubClearingWatchpoint.h:
        * bytecode/VariableWriteFireDetail.h:
        * bytecode/Watchpoint.h:
        * dfg/DFGAdaptiveInferredPropertyValueWatchpoint.h:
        * dfg/DFGArrayifySlowPathGenerator.h:
        * dfg/DFGCallArrayAllocatorSlowPathGenerator.h:
        * dfg/DFGCallCreateDirectArgumentsSlowPathGenerator.h:
        * dfg/DFGSaneStringGetByValSlowPathGenerator.h:
        * dfg/DFGSlowPathGenerator.h:
        * dfg/DFGSnippetParams.h:
        * dfg/DFGWorklist.cpp:
        * ftl/FTLSnippetParams.h:
        * heap/BlockDirectory.cpp:
        * heap/EdenGCActivityCallback.h:
        * heap/FullGCActivityCallback.h:
        * heap/Heap.cpp:
        * heap/Heap.h:
        * heap/IncrementalSweeper.h:
        * heap/IsoCellSet.cpp:
        * heap/IsoCellSetInlines.h:
        * heap/IsoHeapCellType.h:
        * heap/IsoInlinedHeapCellType.h:
        * heap/ParallelSourceAdapter.h:
        * heap/StopIfNecessaryTimer.h:
        * heap/Subspace.cpp:
        * heap/SubspaceInlines.h:
        * inspector/InjectedScript.h:
        * inspector/JSGlobalObjectConsoleClient.h:
        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectScriptDebugServer.h:
        * inspector/JSInjectedScriptHost.cpp:
        * inspector/agents/InspectorAgent.h:
        * inspector/agents/InspectorScriptProfilerAgent.h:
        * inspector/agents/InspectorTargetAgent.h:
        * inspector/agents/JSGlobalObjectAuditAgent.h:
        * inspector/agents/JSGlobalObjectDebuggerAgent.h:
        * inspector/agents/JSGlobalObjectRuntimeAgent.h:
        * inspector/augmentable/AlternateDispatchableAgent.h:
        * inspector/remote/RemoteConnectionToTarget.h:
        * inspector/remote/RemoteInspector.h:
        * inspector/remote/socket/RemoteInspectorServer.h:
        * inspector/scripts/codegen/cpp_generator_templates.py:
        * inspector/scripts/codegen/generate_objc_backend_dispatcher_header.py:
        * inspector/scripts/tests/all/expected/definitions-with-mac-platform.json-result:
        * inspector/scripts/tests/generic/expected/command-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-async-attribute.json-result:
        * inspector/scripts/tests/generic/expected/commands-with-optional-call-return-parameters.json-result:
        * inspector/scripts/tests/generic/expected/domain-debuggableTypes.json-result:
        * inspector/scripts/tests/generic/expected/domain-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/generic/expected/domain-targetTypes.json-result:
        * inspector/scripts/tests/generic/expected/domains-with-varying-command-sizes.json-result:
        * inspector/scripts/tests/generic/expected/enum-values.json-result:
        * inspector/scripts/tests/generic/expected/event-targetType-matching-domain-debuggableType.json-result:
        * inspector/scripts/tests/generic/expected/generate-domains-with-feature-guards.json-result:
        * inspector/scripts/tests/mac/expected/definitions-with-mac-platform.json-result:
        * jit/JITWorklist.cpp:
        * parser/Nodes.h:
        * parser/SourceProvider.h:
        * runtime/DataView.h:
        * runtime/DoublePredictionFuzzerAgent.h:
        * runtime/FileBasedFuzzerAgent.h:
        * runtime/GenericTypedArrayView.h:
        * runtime/JSMicrotask.cpp:
        * runtime/NarrowingNumberPredictionFuzzerAgent.h:
        * runtime/ObjectPropertyChangeAdaptiveWatchpoint.h:
        * runtime/PredictionFileCreatingFuzzerAgent.h:
        * runtime/PromiseTimer.h:
        * runtime/RandomizingFuzzerAgent.h:
        * runtime/RegExpCache.h:
        * runtime/Structure.cpp:
        * runtime/StructureRareData.cpp:
        * runtime/VMTraps.cpp:
        * runtime/WideningNumberPredictionFuzzerAgent.h:
        * tools/JSDollarVM.cpp:
        * wasm/WasmBBQPlan.h:
        * wasm/WasmCallee.h:
        * wasm/WasmLLIntPlan.h:
        * wasm/WasmOMGForOSREntryPlan.h:
        * wasm/WasmOMGPlan.h:
        * wasm/WasmWorklist.cpp:
        * yarr/YarrJIT.cpp:

2020-05-12  Ross Kirsling  <ross.kirsling@sony.com>

        [clang-tidy] Run modernize-use-override over JSC, then ensure as much as possible is final
        https://bugs.webkit.org/show_bug.cgi?id=211743

        Reviewed by Saam Barati.

        * API/JSScriptRef.cpp:
        * b3/B3ArgumentRegValue.h:
        * b3/B3AtomicValue.h:
        * b3/B3CCallValue.h:
        * b3/B3CheckSpecial.h:
        * b3/B3CheckValue.h:
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.h:
        * b3/B3ConstDoubleValue.h:
        * b3/B3ConstFloatValue.h:
        * b3/B3DataSection.h:
        * b3/B3ExtractValue.h:
        * b3/B3FenceValue.h:
        * b3/B3MemoryValue.h:
        * b3/B3PatchpointSpecial.h:
        * b3/B3PatchpointValue.h:
        * b3/B3SlotBaseValue.h:
        * b3/B3StackmapSpecial.h:
        * b3/B3StackmapValue.h:
        * b3/B3SwitchValue.h:
        * b3/B3UpsilonValue.h:
        * b3/B3VariableValue.h:
        * b3/B3WasmAddressValue.h:
        * b3/B3WasmBoundsCheckValue.h:
        * b3/air/AirCCallSpecial.h:
        * b3/air/AirPrintSpecial.h:
        * bytecode/BytecodeDumper.h:
        * bytecode/GetterSetterAccessCase.h:
        * bytecode/InstanceOfAccessCase.h:
        * bytecode/IntrinsicGetterAccessCase.h:
        * bytecode/ModuleNamespaceAccessCase.h:
        * bytecode/ProxyableAccessCase.h:
        * bytecode/Watchpoint.h:
        * dfg/DFGFailedFinalizer.h:
        * dfg/DFGGraph.h:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITFinalizer.h:
        * dfg/DFGToFTLDeferredCompilationCallback.h:
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:
        * ftl/FTLForOSREntryJITCode.h:
        * ftl/FTLJITCode.h:
        * ftl/FTLJITFinalizer.h:
        * heap/CompleteSubspace.h:
        * heap/FastMallocAlignedMemoryAllocator.h:
        * heap/GigacageAlignedMemoryAllocator.h:
        * heap/HeapSnapshotBuilder.h:
        * heap/IsoAlignedMemoryAllocator.h:
        * heap/IsoSubspace.h:
        * heap/IsoSubspacePerVM.cpp:
        * heap/IsoSubspacePerVM.h:
        * heap/MarkStackMergingConstraint.h:
        * heap/SimpleMarkingConstraint.h:
        * heap/SpaceTimeMutatorScheduler.h:
        * heap/StochasticSpaceTimeMutatorScheduler.h:
        * heap/SynchronousStopTheWorldMutatorScheduler.h:
        * jit/GCAwareJITStubRoutine.h:
        * jit/JITCode.h:
        * jit/JITThunks.h:
        * jit/JITToDFGDeferredCompilationCallback.h:
        * jit/PolymorphicCallStubRoutine.h:
        * jsc.cpp:
        * parser/Lexer.cpp: Address warning.
        * runtime/JSDestructibleObjectHeapCellType.h:
        * runtime/SimpleTypedArrayController.h:
        * runtime/Structure.h:
        * runtime/WeakGCMap.h:
        * wasm/WasmEntryPlan.h:

2020-05-12  Michael Catanzaro  <mcatanzaro@gnome.org>

        -Wsign-compare warnings in FTLLowerDFGToB3.cpp and DFGSpeculativeJIT.cpp
        https://bugs.webkit.org/show_bug.cgi?id=211783

        Reviewed by Darin Adler.

        This fixes -Wsign-compare warnings introduced in r260331.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueBitNot):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):

2020-05-12  Truitt Savell  <tsavell@apple.com>

        Unreviewed, reverting r261542.

        Broke internal builds

        Reverted changeset:

        "[clang-tidy] Run modernize-use-override over JSC, then ensure
        as much as possible is final"
        https://bugs.webkit.org/show_bug.cgi?id=211743
        https://trac.webkit.org/changeset/261542

2020-05-12  Mark Lam  <mark.lam@apple.com>

        Wasm::enableFastMemory() was called too late.
        https://bugs.webkit.org/show_bug.cgi?id=211773

        Reviewed by Yusuke Suzuki.

        If Wasm fast memory is to be enabled, we should just do it in initializeThreading()
        just like for all the other signal handlers that need to be initialized for JSC.
        This simplifies its initialization and ensures that it is done in a timely manner
        before Configs are frozen.

        * jsc.cpp:
        (jscmain):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):

2020-05-11  Darin Adler  <darin@apple.com>

        Fix problems caught by replacing WTF::Optional with std::optional
        https://bugs.webkit.org/show_bug.cgi?id=211703

        Reviewed by Chris Dumez.

        * runtime/MachineContext.h:
        (JSC::MachineContext::instructionPointer): Use explcit makeOptional here,
        to work around the fact that MacroAssemblerCodePtr uses an unusual technique
        to disable conversions to everything except bool.

2020-05-11  Yoshiaki JITSUKAWA  <yoshiaki.jitsukawa@sony.com>

        Fix build errors after r260992
        https://bugs.webkit.org/show_bug.cgi?id=211756

        Reviewed by Darin Adler.

        Add JSC namespace specifier to NonIntrinsic and PropertyAttribute
        in the macros in JSObject.h since those can be used outside of
        or without introducing JSC namespace. 
        * runtime/JSObject.h:

2020-05-11  Ross Kirsling  <ross.kirsling@sony.com>

        [clang-tidy] Run modernize-use-override over JSC, then ensure as much as possible is final
        https://bugs.webkit.org/show_bug.cgi?id=211743

        Reviewed by Saam Barati.

        * API/JSScriptRef.cpp:
        * b3/B3ArgumentRegValue.h:
        * b3/B3AtomicValue.h:
        * b3/B3CCallValue.h:
        * b3/B3CheckSpecial.h:
        * b3/B3CheckValue.h:
        * b3/B3Const32Value.h:
        * b3/B3Const64Value.h:
        * b3/B3ConstDoubleValue.h:
        * b3/B3ConstFloatValue.h:
        * b3/B3DataSection.h:
        * b3/B3ExtractValue.h:
        * b3/B3FenceValue.h:
        * b3/B3MemoryValue.h:
        * b3/B3PatchpointSpecial.h:
        * b3/B3PatchpointValue.h:
        * b3/B3SlotBaseValue.h:
        * b3/B3StackmapSpecial.h:
        * b3/B3StackmapValue.h:
        * b3/B3SwitchValue.h:
        * b3/B3UpsilonValue.h:
        * b3/B3VariableValue.h:
        * b3/B3WasmAddressValue.h:
        * b3/B3WasmBoundsCheckValue.h:
        * b3/air/AirCCallSpecial.h:
        * b3/air/AirPrintSpecial.h:
        * bytecode/BytecodeDumper.h:
        * bytecode/GetterSetterAccessCase.h:
        * bytecode/InstanceOfAccessCase.h:
        * bytecode/IntrinsicGetterAccessCase.h:
        * bytecode/ModuleNamespaceAccessCase.h:
        * bytecode/ProxyableAccessCase.h:
        * bytecode/Watchpoint.h:
        * dfg/DFGFailedFinalizer.h:
        * dfg/DFGGraph.h:
        * dfg/DFGJITCode.h:
        * dfg/DFGJITFinalizer.h:
        * dfg/DFGToFTLDeferredCompilationCallback.h:
        * dfg/DFGToFTLForOSREntryDeferredCompilationCallback.h:
        * ftl/FTLForOSREntryJITCode.h:
        * ftl/FTLJITCode.h:
        * ftl/FTLJITFinalizer.h:
        * heap/CompleteSubspace.h:
        * heap/FastMallocAlignedMemoryAllocator.h:
        * heap/GigacageAlignedMemoryAllocator.h:
        * heap/HeapSnapshotBuilder.h:
        * heap/IsoAlignedMemoryAllocator.h:
        * heap/IsoSubspace.h:
        * heap/IsoSubspacePerVM.cpp:
        * heap/IsoSubspacePerVM.h:
        * heap/MarkStackMergingConstraint.h:
        * heap/SimpleMarkingConstraint.h:
        * heap/SpaceTimeMutatorScheduler.h:
        * heap/StochasticSpaceTimeMutatorScheduler.h:
        * heap/SynchronousStopTheWorldMutatorScheduler.h:
        * jit/GCAwareJITStubRoutine.h:
        * jit/JITCode.h:
        * jit/JITThunks.h:
        * jit/JITToDFGDeferredCompilationCallback.h:
        * jit/PolymorphicCallStubRoutine.h:
        * jsc.cpp:
        * parser/Lexer.cpp: Address warning.
        * runtime/JSDestructibleObjectHeapCellType.h:
        * runtime/SimpleTypedArrayController.h:
        * runtime/Structure.h:
        * runtime/WeakGCMap.h:
        * wasm/WasmEntryPlan.h:

2020-05-11  Mark Lam  <mark.lam@apple.com>

        Introduce WTF::Config and put Signal.cpp's init-once globals in it.
        https://bugs.webkit.org/show_bug.cgi?id=211729
        <rdar://problem/62938878>

        Reviewed by Keith Miller and Saam Barati.

        1. Initialize VMTraps' signals early now that we'll be freezing signals at the end
           of the first VM initialization.

        2. Move the !initializeThreadingHasBeenCalled RELEASE_ASSERT in initializeThreading()
           to the bottom of the function.  This way, we'll also catch bugs which may cause
           us to jump into the middle of the function.

           Added a compilerFence there to ensure that the RELEASE_ASSERT is only executed
           after all initialization is done.  This guarantees that it will only be executed
           at the end.

        3. Call WTF::Config::permanentlyFreeze() from JSC::Config::permanentlyFreeze()
           for obvious reasons: freezing one should freeze the other.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):
        * runtime/JSCConfig.cpp:
        (JSC::Config::permanentlyFreeze):
        * runtime/VMTraps.cpp:
        (JSC::VMTraps::initializeSignals):
        * runtime/VMTraps.h:

2020-05-11  Keith Miller  <keith_miller@apple.com>

        Remove unused BytecodeKills.h
        https://bugs.webkit.org/show_bug.cgi?id=211753

        Reviewed by Yusuke Suzuki.

        No one uses this class anymore, we should get rid of it.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/BytecodeKills.h: Removed.
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::BytecodeLivenessAnalysis::computeKills): Deleted.
        * bytecode/BytecodeLivenessAnalysis.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::killsFor): Deleted.
        * dfg/DFGGraph.h:

2020-05-10  Ross Kirsling  <ross.kirsling@sony.com>

        [clang-tidy] Run modernize-use-nullptr over JSC
        https://bugs.webkit.org/show_bug.cgi?id=211706

        Reviewed by Darin Adler.

        * API/APICallbackFunction.h:
        * API/JSAPIGlobalObject.h:
        * API/JSBase.cpp:
        * API/JSCallbackObjectFunctions.h:
        * API/JSClassRef.cpp:
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        * API/JSScriptRef.cpp:
        * API/JSValueRef.cpp:
        * API/JSWeakObjectMapRefPrivate.cpp:
        * API/tests/ExecutionTimeLimitTest.cpp:
        * API/tests/PingPongStackOverflowTest.cpp:
        * assembler/AbstractMacroAssembler.h:
        * assembler/CPU.cpp:
        * bytecode/CodeBlock.cpp:
        * bytecode/DeleteByIdVariant.cpp:
        * bytecode/GetByIdVariant.cpp:
        * bytecode/InByIdVariant.cpp:
        * bytecode/InlineCallFrame.cpp:
        * bytecode/LazyOperandValueProfile.cpp:
        * bytecode/PutByIdVariant.cpp:
        * bytecode/ValueProfile.h:
        * bytecode/ValueRecovery.cpp:
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        * debugger/DebuggerScope.h:
        * dfg/DFGAbstractValue.cpp:
        * dfg/DFGAdjacencyList.h:
        * dfg/DFGArgumentPosition.h:
        * dfg/DFGArrayifySlowPathGenerator.h:
        * dfg/DFGAvailability.h:
        * dfg/DFGByteCodeParser.cpp:
        * dfg/DFGCFGSimplificationPhase.cpp:
        * dfg/DFGCPSRethreadingPhase.cpp:
        * dfg/DFGCompilationKey.h:
        * dfg/DFGConstantFoldingPhase.cpp:
        * dfg/DFGDisassembler.cpp:
        * dfg/DFGDoubleFormatState.h:
        * dfg/DFGEdge.h:
        * dfg/DFGFixupPhase.cpp:
        * dfg/DFGFrozenValue.cpp:
        * dfg/DFGGenerationInfo.h:
        * dfg/DFGGraph.h:
        * dfg/DFGInPlaceAbstractState.cpp:
        * dfg/DFGIntegerCheckCombiningPhase.cpp:
        * dfg/DFGLazyJSValue.cpp:
        * dfg/DFGNode.h:
        * dfg/DFGOSREntrypointCreationPhase.cpp:
        * dfg/DFGOSRExit.cpp:
        * dfg/DFGOperations.cpp:
        * dfg/DFGSilentRegisterSavePlan.h:
        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        * dfg/DFGStructureAbstractValue.cpp:
        * dfg/DFGTransition.cpp:
        * dfg/DFGTypeCheckHoistingPhase.cpp:
        * dfg/DFGWorklist.cpp:
        * ftl/FTLAbstractHeapRepository.h:
        * ftl/FTLAvailableRecovery.h:
        * ftl/FTLExitValue.cpp:
        * ftl/FTLFormattedValue.h:
        * ftl/FTLJITCode.cpp:
        * ftl/FTLLink.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        * ftl/FTLLoweredNodeValue.h:
        * ftl/FTLOSREntry.cpp:
        * ftl/FTLOSRExitCompiler.cpp:
        * ftl/FTLTypedPointer.h:
        * ftl/FTLValueFromBlock.h:
        * ftl/FTLValueRange.h:
        * heap/GCSegmentedArray.h:
        * heap/Handle.h:
        * heap/HandleSet.h:
        * heap/HandleTypes.h:
        * heap/HeapSnapshotBuilder.cpp:
        * heap/MarkedBlockInlines.h:
        * heap/Strong.h:
        * heap/WeakImpl.h:
        * heap/WeakInlines.h:
        * heap/WeakSet.cpp:
        * heap/WeakSet.h:
        * interpreter/CallFrame.cpp:
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        * interpreter/ProtoCallFrame.h:
        * interpreter/StackVisitor.cpp:
        * interpreter/StackVisitor.h:
        * jit/AssemblyHelpers.h:
        * jit/CCallHelpers.h:
        * jit/JITCode.cpp:
        * jit/JITOperations.cpp:
        * jit/Repatch.cpp:
        * jit/ThunkGenerators.cpp:
        * jsc.cpp:
        * llint/LLIntSlowPaths.cpp:
        * parser/ASTBuilder.h:
        * parser/Lexer.cpp:
        * parser/Lexer.h:
        * parser/Nodes.cpp:
        * parser/Nodes.h:
        * parser/Parser.cpp:
        * parser/Parser.h:
        * parser/ParserArena.cpp:
        * parser/ParserArena.h:
        * parser/ParserFunctionInfo.h:
        * parser/SyntaxChecker.h:
        * parser/UnlinkedSourceCode.h:
        * profiler/ProfilerBytecodeSequence.cpp:
        * profiler/ProfilerCompilation.cpp:
        * profiler/ProfilerDatabase.cpp:
        * profiler/ProfilerOSRExitSite.cpp:
        * profiler/ProfilerOriginStack.cpp:
        * runtime/ArgList.h:
        * runtime/ArrayPrototype.cpp:
        * runtime/ClonedArguments.cpp:
        * runtime/CommonSlowPaths.cpp:
        * runtime/Completion.h:
        * runtime/DataView.h:
        * runtime/DatePrototype.cpp:
        * runtime/DirectEvalExecutable.cpp:
        * runtime/DumpContext.cpp:
        * runtime/FunctionExecutable.cpp:
        * runtime/IndirectEvalExecutable.cpp:
        * runtime/JSArray.cpp:
        * runtime/JSArrayBufferView.cpp:
        * runtime/JSCJSValue.cpp:
        * runtime/JSCJSValueInlines.h:
        * runtime/JSCell.cpp:
        * runtime/JSDataView.cpp:
        * runtime/JSDestructibleObject.h:
        * runtime/JSFunction.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSONObject.cpp:
        * runtime/JSObject.cpp:
        * runtime/JSObject.h:
        * runtime/JSScope.cpp:
        * runtime/JSScope.h:
        * runtime/LiteralParser.cpp:
        * runtime/OptionsList.h:
        * runtime/PropertyDescriptor.cpp:
        * runtime/PropertyMapHashTable.h:
        * runtime/PropertySlot.h:
        * runtime/PutPropertySlot.h:
        * runtime/RegExpMatchesArray.h:
        * runtime/RegExpPrototype.cpp:
        * runtime/StringPrototype.cpp:
        * runtime/Structure.cpp:
        * runtime/Structure.h:
        * runtime/TestRunnerUtils.cpp:
        * runtime/TypedArrayType.cpp:
        * runtime/VM.cpp:
        * runtime/Watchdog.cpp:
        * runtime/Watchdog.h:
        * runtime/WriteBarrier.h:
        * testRegExp.cpp:
        * tools/JSDollarVM.cpp:
        * wasm/WasmSlowPaths.cpp:
        * yarr/RegularExpression.h:
        * yarr/YarrInterpreter.cpp:
        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        * yarr/YarrPattern.cpp:
        * yarr/YarrPattern.h:

2020-05-09  Ross Kirsling  <ross.kirsling@sony.com>

        Fix build errors and warnings for non-unified JSCOnly
        https://bugs.webkit.org/show_bug.cgi?id=211655

        Reviewed by Darin Adler and Yusuke Suzuki.

        * bytecode/BytecodeDumper.cpp:
        (JSC::isConstantRegisterIndex): Deleted.
        Remove unused function.

        * llint/LLIntEntrypoint.cpp:
        * llint/LLIntThunks.cpp:
        * llint/LLIntThunks.h:
        * runtime/AggregateErrorConstructor.cpp:
        * runtime/AggregateErrorPrototype.cpp:
        * wasm/js/WebAssemblyFunction.cpp:
        Fix includes.

        * tools/JSDollarVM.cpp:
        Deal with "unused constant" warnings for needsDestruction.

        * wasm/WasmLLIntPlan.cpp:
        * wasm/WasmSignature.cpp:
        Remove unused constants.

2020-05-08  Darin Adler  <darin@apple.com>

        Streamline MarkupAccumulator to improve efficiency a bit
        https://bugs.webkit.org/show_bug.cgi?id=211656

        Reviewed by Anders Carlsson.

        * b3/air/AirFixPartialRegisterStalls.h: Fix spelling of "explicitly".

2020-05-08  Alexey Shvayka  <shvaikalesh@gmail.com>

        Array.prototype.concat fast path checks should not be observable
        https://bugs.webkit.org/show_bug.cgi?id=211643

        Reviewed by Ross Kirsling.

        This change utilizes @tryGetByIdWithWellKnownSymbol intrinsic to make
        off the spec Symbol.isConcatSpreadable lookups unobservable to userland code,
        aligning JSC with V8 and SpiderMonkey.

        Since @tryGetById uses PropertySlot::getPureResult(), which returns `null`
        for Proxy [[Get]] traps and JS getters (covered by stress/try-get-by-id.js),
        we can safely compare its result `undefined`. Also, this allows us to remove
        @isProxyObject check as Proxy argument is never a fast path anyway.

        This patch is neutral on microbenchmarks/concat-append-one.js.

        * builtins/ArrayPrototype.js:
        (concat):

2020-05-07  Michael Catanzaro  <mcatanzaro@gnome.org>

        Simplify preprocessor guards in GCMemoryOperations.h
        https://bugs.webkit.org/show_bug.cgi?id=211588

        Reviewed by Darin Adler.

        If we adjust the guards a bit, then we don't need to repeat the fallback path.

        * heap/GCMemoryOperations.h:
        (JSC::gcSafeMemmove):
        (JSC::gcSafeZeroMemory):

2020-05-07  Mark Lam  <mark.lam@apple.com>

        Give the DFG and FTL WorkList threads more stack space on ASAN builds.
        https://bugs.webkit.org/show_bug.cgi?id=211535
        <rdar://problem/62947884>

        Reviewed by Geoffrey Garen.

        * dfg/DFGWorklist.cpp:
        (JSC::DFG::Worklist::ThreadBody::ThreadBody):
        - Mark the AutomaticThread as ThreadType::Compiler.

2020-05-07  Daniel Kolesa  <daniel@octaforge.org>

        REGRESSION(r251875): Crash in JSC::StructureIDTable::get on ppc64le: gcSafeMemcpy broken on JSVALUE64 platforms other than x86_64 and aarch64
        https://bugs.webkit.org/show_bug.cgi?id=210685

        Reviewed by Michael Catanzaro.

        Fix gcSafeMemcpy on non-x86_64/aarch64 64-bit architectures.

        We were hitting an incorrect x86_64 assertion on values larger than
        mediumCutoff on JSVALUE64 architectures other than x86_64 and aarch64,
        as the control flow is wrong.

        * heap/GCMemoryOperations.h:
        (JSC::gcSafeMemcpy):

2020-05-07  Mark Lam  <mark.lam@apple.com>

        Add stack checks to the DFG and FTL bytecode parser.
        https://bugs.webkit.org/show_bug.cgi?id=211547
        <rdar://problem/62958880>

        Reviewed by Yusuke Suzuki.

        Inlining can cause some level of recursion of the DFG bytecode parser.  We should
        do a stack check at each inlining check before recursing.  If a stack overflow
        appears to be imminent, then just refuse to inline, and therefore, don't recurse
        deeper into the parser.

        This issue is more noticeable on ASan debug builds where stack frames can be
        humongous.

        Removed the SUPPRESS_ASAN on cloberrize() and the associated comment from r260692.
        It was a mis-diagnosis.  The stack checks are what we need.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):
        (JSC::DFG::ByteCodeParser::handleInlining):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGGraph.h:

2020-05-07  Darin Adler  <darin@apple.com>

        REGRESSION (r261257): Lifetime problem with upconverted characters in toLocaleCase
        https://bugs.webkit.org/show_bug.cgi?id=211580
        rdar://62980449

        Reviewed by Yusuke Suzuki.

        The problem comes from the fact that callBufferProducingFunction is moving the same
        arguments multiple times. At the moment, this works around the only practical
        problem with that, but later it should be fixed in callBufferProducingFunction.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Work around mistakes in how
        callBufferProducingFunction works with arguments by calling get() explicitly on the
        result of upconvertedCharacters. Later we could fix callBufferProducingFunction to
        be safer, but for now this solves the problem.
        * runtime/StringPrototype.cpp:
        (JSC::toLocaleCase): Ditto.

2020-05-07  Keith Miller  <keith_miller@apple.com>

        Fix ArrayMode nodes after r261260
        https://bugs.webkit.org/show_bug.cgi?id=211543

        Reviewed by Yusuke Suzuki.

        I accidentally ran tests with a release build rather than
        release+assert when uploading r261260. This patch skips the
        CheckArray node in the ArrayMode clobbersTop() logic before
        Fixup. And also marks a GetArrayLength in the TypedArray
        intrsinics as ExitOK.

        This patch also relands r261260.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicGetter):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

2020-05-07  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, reverting r261260.

        Caused 26 JSC test failures

        Reverted changeset:

        "DFG ByVal nodes with ArrayModes should clobberTop until Fixup
        phase runs."
        https://bugs.webkit.org/show_bug.cgi?id=211531
        https://trac.webkit.org/changeset/261260

2020-05-07  Mark Lam  <mark.lam@apple.com>

        Fix broken exceptionFuzz tests.
        https://bugs.webkit.org/show_bug.cgi?id=211550

        Reviewed by Yusuke Suzuki.

        Remove the bad and now unused utility function to set Options::useExceptionFuzz().

        * tools/JSDollarVM.cpp:
        (JSC::JSDollarVM::finishCreation):
        (JSC::functionEnableExceptionFuzz): Deleted.

2020-05-06  Keith Miller  <keith_miller@apple.com>

        DFG ByVal nodes with ArrayModes should clobberTop until Fixup phase runs.
        https://bugs.webkit.org/show_bug.cgi?id=211531

        Reviewed by Yusuke Suzuki.

        When parsing bytecode we may pick a relatively constrained
        ArrayMode based on our profiling. Some of these modes may not
        clobber exit state.  However, Fixup sometimes wants to widen this
        to a more generic mode based on other data. This causes us to
        think it was valid to exit immediately after the
        GetByVal/HasIndexedProperty, which would be wrong with the wider
        ArrayMode. We may also incorrectly insert invalidition points
        if clobberize gives us the wrong data.

        To fix this clobberize should say All ByVal nodes clobberTop()
        until after fixup. Additionally, this patch adds an assertion that
        nodes don't go from not clobbering exit state to clobbering exit
        state during fixup.

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::performFixup):
        * dfg/DFGGraph.h:

2020-05-06  Darin Adler  <darin@apple.com>

        Make a helper for the pattern of ICU functions that may need to be called twice to populate a buffer
        https://bugs.webkit.org/show_bug.cgi?id=211499

        Reviewed by Ross Kirsling.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::defaultTimeZone): Use callBufferProducingFunction.
        (JSC::canonicalizeTimeZoneName): Ditto.
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat): Ditto.
        (JSC::IntlDateTimeFormat::format const): Ditto.
        (JSC::IntlDateTimeFormat::formatToParts const): Ditto.
        * runtime/IntlLocale.cpp:
        (JSC::LocaleIDBuilder::toCanonical): Ditto.
        (JSC::IntlLocale::language): Ditto.
        (JSC::IntlLocale::script): Ditto.
        (JSC::IntlLocale::region): Ditto.
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::format const): Ditto.
        (JSC::IntlNumberFormat::formatToParts const): Ditto.
        * runtime/IntlObject.cpp:
        (JSC::languageTagForLocaleID): Ditto.
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::formatInternal const): Ditto.
        (JSC::IntlRelativeTimeFormat::formatToParts const): Ditto.
        * runtime/StringPrototype.cpp:
        (JSC::toLocaleCase): Ditto.

2020-05-06  Devin Rousso  <drousso@apple.com>

        ASSERT_WITH_MESSAGE(m_isOwnedByMainThread == isMainThread()) when web inspecting
        https://bugs.webkit.org/show_bug.cgi?id=203638
        <rdar://problem/56761893>

        Reviewed by Brian Burg.

        Mark the `InspectorEnvironment::executionStopwatch` abstract function as `const` and have it
        return a `Stopwatch&` instead of a `RefPtr<Stopwatch>&` as callers assume that it exists.
        By not using a `RefPtr`, an additional `copyRef` can be avoided.

        * inspector/InspectorEnvironment.h:

        * inspector/JSGlobalObjectInspectorController.h:
        * inspector/JSGlobalObjectInspectorController.cpp:
        (Inspector::JSGlobalObjectInspectorController::executionStopwatch const): Added.
        (Inspector::JSGlobalObjectInspectorController::executionStopwatch): Deleted.

        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::didPause):
        (Inspector::InspectorDebuggerAgent::breakpointActionProbe):
        (Inspector::InspectorDebuggerAgent::didContinue):
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::snapshot):
        (Inspector::InspectorHeapAgent::willGarbageCollect):
        (Inspector::InspectorHeapAgent::didGarbageCollect):
        * inspector/agents/InspectorScriptProfilerAgent.cpp:
        (Inspector::InspectorScriptProfilerAgent::startTracking):
        (Inspector::InspectorScriptProfilerAgent::willEvaluateScript):
        (Inspector::InspectorScriptProfilerAgent::didEvaluateScript):
        (Inspector::InspectorScriptProfilerAgent::trackingComplete):
        * runtime/SamplingProfiler.h:
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::SamplingProfiler):
        * runtime/VM.h:
        * runtime/VM.cpp:
        (JSC::VM::ensureSamplingProfiler):

2020-05-05  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Implement Intl.Locale
        https://bugs.webkit.org/show_bug.cgi?id=209772

        Reviewed by Darin Adler and Saam Barati.

        This patch implements the recent ECMA-402 feature Intl.Locale.

        This is effectively a wrapper class for all the pieces of uloc.h that ECMA-402 cares about.
        (If we used the C++ API, there's a LocaleBuilder that would make this much easier, but in sticking to the C API,
        it's basically an object that has an ICU localeID as data and uloc_* functions as methods / getters.
        Furthermore, there's no way to modify said data, so every method / getter can be lazy and cache its result.)

        Usage example:
          >>> locale = new Intl.Locale('ja', { region: 'JP', calendar: 'japanese', numeric: false })
          "ja-JP-u-ca-japanese-kn-false"
          >>> locale.baseName
          "ja-JP"

        Intl.Locale can be used anywhere that Intl APIs accept locale strings as input parameters,
        and is moreover hoped to be the class by which future Web APIs will handle the current locale.

        This feature is runtime-guarded by the `useIntlLocale` option.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlLocale.cpp: Added.
        * runtime/IntlLocale.h: Added.
        * runtime/IntlLocaleConstructor.cpp: Added.
        * runtime/IntlLocaleConstructor.h: Added.
        * runtime/IntlLocalePrototype.cpp: Added.
        * runtime/IntlLocalePrototype.h: Added.
        * runtime/IntlObject.cpp:
        (JSC::IntlObject::finishCreation):
        (JSC::localeIDBufferForLanguageTag): Added.
        (JSC::languageTagForLocaleID): Renamed from JSC::convertICULocaleToBCP47LanguageTag.
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):
        (JSC::canonicalizeLanguageTag):
        (JSC::canonicalizeLocaleList):
        (JSC::defaultLocale):
        * runtime/IntlObject.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::collatorStructure):
        (JSC::JSGlobalObject::numberFormatStructure):
        (JSC::JSGlobalObject::localeStructure):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:

2020-05-05  Keith Miller  <keith_miller@apple.com>

        clobberize validator should use branchTest8 directly.
        https://bugs.webkit.org/show_bug.cgi?id=211469

        Reviewed by Yusuke Suzuki.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):

2020-05-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement BigInt.asIntN and BigInt.asUintN
        https://bugs.webkit.org/show_bug.cgi?id=181144

        Reviewed by Darin Adler.

        This patch implements BigInt.asIntN[1] and BigInt.asUintN[2] features.
        As the same to the other BigInt runtime C++ code, we port V8 code to JSC to implement both.

        BigInt.asIntN is `static_cast<intN_t>(BigInt value)` and BigInt.asUintN is `static_cast<uintN_t>(BigInt value)`.
        They are getting slice of N bits from two's complement representation of the given BigInt. The difference between
        asIntN and asUintN is asIntN renders MSB as a sign.

        This patch is once rolled out due to ARM64_32 build failure, which is caused by the existing bug[3]. Relanding it
        since it is now fixed.

        [1]: https://tc39.es/ecma262/#sec-bigint.asintn
        [2]: https://tc39.es/ecma262/#sec-bigint.asuintn
        [3]: https://trac.webkit.org/changeset/261174/webkit

        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::bigIntConstructorFuncAsUintN):
        (JSC::bigIntConstructorFuncAsIntN):
        * runtime/JSBigInt.cpp:
        (JSC::zeroImpl):
        (JSC::JSBigInt::divideImpl):
        (JSC::JSBigInt::unaryMinusImpl):
        (JSC::JSBigInt::remainderImpl):
        (JSC::JSBigInt::digitDiv):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::asIntNImpl):
        (JSC::JSBigInt::asUintNImpl):
        (JSC::JSBigInt::truncateToNBits):
        (JSC::JSBigInt::truncateAndSubFromPowerOfTwo):
        (JSC::JSBigInt::asIntN):
        (JSC::JSBigInt::asUintN):
        * runtime/JSBigInt.h:

2020-05-05  Ross Kirsling  <ross.kirsling@sony.com>

        [Intl] Alphabetize extension keys and correctly mark const methods
        https://bugs.webkit.org/show_bug.cgi?id=211359

        Reviewed by Darin Adler.

        Two cleanup items for Intl classes:

        1. Ensure `resolvedOptions().locale` returns relevant extension keys in alphabetical order.
           ICU does this for us via Intl.getCanonicalLocales / Intl.*.supportedLocalesOf but not via ResolveLocale.
           However, we don't need to do any sorting in ResolveLocale; we can just pre-alphabetize relevantExtensionKeys.
           (See also https://github.com/tc39/ecma402/pull/433.)

        2. Ensure Intl classes are marking const methods correctly.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::sortLocaleData):
        (JSC::IntlCollator::searchLocaleData):
        (JSC::IntlCollator::compareStrings const): Add const specifier.
        (JSC::IntlCollator::resolvedOptions const): Add const specifier.
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::localeData):
        (JSC::IntlDateTimeFormat::resolvedOptions const): Add const specifier.
        (JSC::IntlDateTimeFormat::format const): Add const specifier.
        (JSC::IntlDateTimeFormat::formatToParts const): Add const specifier.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::format const): Add const specifier.
        (JSC::IntlNumberFormat::resolvedOptions const): Add const specifier.
        (JSC::IntlNumberFormat::formatToParts const): Add const specifier.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::resolvedOptions const): Add const specifier.
        (JSC::IntlPluralRules::select const): Add const specifier.
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::resolvedOptions const): Add const specifier.
        (JSC::IntlRelativeTimeFormat::formatInternal const): Add const specifier.
        (JSC::IntlRelativeTimeFormat::format const): Add const specifier.
        (JSC::IntlRelativeTimeFormat::formatToParts const): Add const specifier.
        * runtime/IntlRelativeTimeFormat.h:

2020-05-05  Keith Miller  <keith_miller@apple.com>

        Add Clobberize validator for clobber top.
        https://bugs.webkit.org/show_bug.cgi?id=209432

        Reviewed by Yusuke Suzuki.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::scratchRegister):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::scratchRegister):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCurrentBlock):
        * dfg/DFGSpeculativeJIT64.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::lower):
        (JSC::FTL::DFG::LowerDFGToB3::compileBlock):
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeModuleProgram):
        * jit/JITCodeInlines.h:
        (JSC::JITCode::execute):
        * llint/LLIntThunks.h:
        (JSC::vmEntryToWasm):
        * runtime/OptionsList.h:
        * runtime/VM.h:

2020-05-05  Mark Lam  <mark.lam@apple.com>

        Allow Bitmap to use up to a UCPURegister word size for internal bit storage.
        https://bugs.webkit.org/show_bug.cgi?id=211328
        <rdar://problem/62755865>

        Reviewed by Yusuke Suzuki.

        * assembler/CPU.h:

2020-05-05  Keith Miller  <keith_miller@apple.com>

        iterator_open should remap the symbolIterator argument correctly when inlined.
        https://bugs.webkit.org/show_bug.cgi?id=211308
        <rdar://problem/62287877>

        Reviewed by Mark Lam.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2020-05-05  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSBigInt::maxLengthBits and JSBigInt::maxLength are wrong
        https://bugs.webkit.org/show_bug.cgi?id=211445

        Reviewed by Mark Lam.

        JSBigInt::maxLengthBits and JSBigInt::maxLength definitions are wrong.

        1. We are defining maxLength and maxLengthBits as an unrelated value to each other. This is wrong.
           maxLength should be defined as maxLengthBits / (sizeof(Digit) * bitsPerByte).
        2. We use `sizeof(void*)` and assume that `sizeof(Digit) == sizeof(void*)`. This is wrong in ARM64_32 environment
           where Digit size is sizeof(uint64_t) while the pointer size is sizeof(uint32_t). This causes compile errors in ARM64_32
           when the code is using these values with static_assert.

        * runtime/JSBigInt.h:

2020-05-05  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, reverting r261156.

        Break ARM64_32 build due to existing bug

        Reverted changeset:

        "[JSC] Implement BigInt.asIntN and BigInt.asUintN"
        https://bugs.webkit.org/show_bug.cgi?id=181144
        https://trac.webkit.org/changeset/261156

2020-05-05  Alexey Shvayka  <shvaikalesh@gmail.com>

        Object.prototype.toString is not spec-perfect
        https://bugs.webkit.org/show_bug.cgi?id=199138

        Reviewed by Darin Adler and Keith Miller.

        Before ES6, Object.prototype.toString relied only on internal [[Class]] slot. Starting with ES6,
        Object.prototype.toString checks for a handful of internal slots, mimicing [[Class]], to ensure
        backwards compatibility for pre-ES6 instances. Newly-added built-ins provide @@toStringTag for
        the method to use.

        Before this change, Object.prototype.toString in JSC relied on className() a.k.a [[Class]] for
        all instances. For (almost all) new built-ins, it was overriden by toStringName() returning
        "Object", while @@toStringTag was set to correct value. This is quite an error-prone approach
        and observable spec discrepancy if @@toStringTag is deleted or set to a non-string.

        This change eliminates the above-mentioned discrepancy and fixes Object.prototype.toString
        to return "[object Function]" for callable Proxy objects, aligning JSC with the spec [1], V8,
        and SpiderMonkey.

        For Object.prototype.toString to work through DebuggerScope and JSProxy, we perform all checks
        in JSObject::toStringName(). Given that isArray() may throw a TypeError [2], we invoke
        toStringName() before @@toStringTag lookup to accomodate revoked Proxy case.

        Also, this patch defines @@toStringTag for WebAssembly namespace object (to match Chrome),
        JSC shell, and ConsoleObject.

        [1]: https://tc39.es/ecma262/#sec-object.prototype.tostring
        [2]: https://tc39.es/ecma262/#sec-isarray (step 3.a)

        * jsc.cpp:
        * runtime/BigIntObject.cpp:
        (JSC::BigIntObject::toStringName): Deleted.
        * runtime/BigIntObject.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::toStringName):
        * runtime/BooleanObject.h:
        * runtime/ConsoleObject.cpp:
        (JSC::ConsoleObject::finishCreation):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::toStringName):
        * runtime/DateInstance.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::toStringName):
        * runtime/ErrorInstance.h:
        * runtime/JSArrayBufferView.cpp:
        (JSC::JSArrayBufferView::toStringName): Deleted.
        * runtime/JSArrayBufferView.h:
        * runtime/JSMap.cpp:
        (JSC::JSMap::toStringName): Deleted.
        * runtime/JSMap.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::toStringName):
        * runtime/JSSet.cpp:
        (JSC::JSSet::toStringName): Deleted.
        * runtime/JSSet.h:
        * runtime/JSWeakMap.cpp:
        (JSC::JSWeakMap::toStringName): Deleted.
        * runtime/JSWeakMap.h:
        * runtime/JSWeakObjectRef.cpp:
        (JSC::JSWeakObjectRef::toStringName): Deleted.
        * runtime/JSWeakObjectRef.h:
        * runtime/JSWeakSet.cpp:
        (JSC::JSWeakSet::toStringName): Deleted.
        * runtime/JSWeakSet.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::toStringName):
        * runtime/NumberObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::toStringName): Deleted.
        * runtime/ProxyObject.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::toStringName):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::toStringName):
        * runtime/StringObject.h:
        * runtime/SymbolObject.cpp:
        (JSC::SymbolObject::toStringName): Deleted.
        * runtime/SymbolObject.h:
        * wasm/js/JSWebAssembly.cpp:
        (JSC::JSWebAssembly::finishCreation):

2020-05-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement BigInt.asIntN and BigInt.asUintN
        https://bugs.webkit.org/show_bug.cgi?id=181144

        Reviewed by Darin Adler.

        This patch implements BigInt.asIntN[1] and BigInt.asUintN[2] features.
        As the same to the other BigInt runtime C++ code, we port V8 code to JSC to implement both.

        BigInt.asIntN is `static_cast<intN_t>(BigInt value)` and BigInt.asUintN is `static_cast<uintN_t>(BigInt value)`.
        They are getting slice of N bits from two's complement representation of the given BigInt. The difference between
        asIntN and asUintN is asIntN renders MSB as a sign.

        [1]: https://tc39.es/ecma262/#sec-bigint.asintn
        [2]: https://tc39.es/ecma262/#sec-bigint.asuintn

        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::bigIntConstructorFuncAsUintN):
        (JSC::bigIntConstructorFuncAsIntN):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::zeroImpl):
        (JSC::JSBigInt::divideImpl):
        (JSC::JSBigInt::unaryMinusImpl):
        (JSC::JSBigInt::remainderImpl):
        (JSC::JSBigInt::digitDiv):
        (JSC::JSBigInt::asIntNImpl):
        (JSC::JSBigInt::asUintNImpl):
        (JSC::JSBigInt::truncateToNBits):
        (JSC::JSBigInt::truncateAndSubFromPowerOfTwo):
        (JSC::JSBigInt::asIntN):
        (JSC::JSBigInt::asUintN):
        * runtime/JSBigInt.h:

2020-05-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG NotCellUse is used without considering about BigInt32
        https://bugs.webkit.org/show_bug.cgi?id=211395

        Reviewed by Saam Barati.

        When we see CompareXXX(BigInt32, Double), we are emitting CompareXXX(DoubleRep(BigInt:NotCellUse), Double). But this has two problems.

        1. We should emit CompareXXX(UntypedUse, UntypedUse) in this case.
        2. DoubleRep(NotCellUse) does not support converting BigInt32 to double. Since DoubleRep's semantics is for ToNumber, it should not
           accept BigInt32 since it should throw an error. However, DoubleRep currently assumes that NotCellUse value can be converted to double
           without any errors.

        To keep DoubleRep's semantics ToNumber, we replace NotCellUse with NotCellNorBigIntUse, which rejects BigInt32. This patch also uses NotCellNorBigIntUse
        for ValueToInt32 because of the same reason.

        For CompareXXX and CompareEq nodes, we can optimize it if we introduce new DoubleRepAcceptingBigInt32 DFG node which can convert BigInt32 to Double, since
        CompareXXX and CompareEq are not requiring toNumber semantics. This should be done in a separate bug https://bugs.webkit.org/show_bug.cgi?id=211407.

        * bytecode/SpeculatedType.h:
        (JSC::isNotCellNorBigIntSpeculation):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixIntConvertingEdge):
        (JSC::DFG::FixupPhase::fixupChecksInBlock):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateNotCellNorBigInt):
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::SafeToExecuteEdge::operator()):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compileDoubleRep):
        (JSC::DFG::SpeculativeJIT::speculateNotCellNorBigInt):
        (JSC::DFG::SpeculativeJIT::speculate):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGUseKind.cpp:
        (WTF::printInternal):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        (JSC::DFG::checkMayCrashIfInputIsEmpty):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDoubleRep):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueToInt32):
        (JSC::FTL::DFG::LowerDFGToB3::numberOrNotCellNorBigIntToInt32):
        (JSC::FTL::DFG::LowerDFGToB3::speculate):
        (JSC::FTL::DFG::LowerDFGToB3::speculateNotCellNorBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::numberOrNotCellToInt32): Deleted.

2020-05-04  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add @@toStringTag to WebAssembly.Global
        https://bugs.webkit.org/show_bug.cgi?id=211372

        Reviewed by Sam Weinig.

        As r260992 did for the other wasm prototypes, we should put @@toStringTag to WebAssembly.Global's prototype too.

        * wasm/js/WebAssemblyGlobalPrototype.cpp:
        (JSC::WebAssemblyGlobalPrototype::finishCreation):

2020-05-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Worker: should use the name of the worker if it exists
        https://bugs.webkit.org/show_bug.cgi?id=211244

        Reviewed by Brian Burg.

        * inspector/protocol/Worker.json:
        Include the `name` in `Worker.workerCreated`.

2020-05-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way for inspector to turn on/off ITP debug mode and AdClickAttribution debug mode
        https://bugs.webkit.org/show_bug.cgi?id=209763

        Reviewed by Brian Burg.

        * inspector/protocol/Page.json:
        Add new enum values to `Page.Setting`:
         - `AdClickAttributionDebugModeEnabled`
         - `ITPDebugModeEnabled`

2020-05-03  Maciej Stachowiak  <mjs@apple.com>

        Remove no longer needed WebKitAdditions include for JavaScriptCorePrefix.h
        https://bugs.webkit.org/show_bug.cgi?id=211357

        Reviewed by Mark Lam.

        * JavaScriptCorePrefix.h:

2020-05-02  Mark Lam  <mark.lam@apple.com>

        Gardening: rolling out r261050 and r261051.
        https://bugs.webkit.org/show_bug.cgi?id=211328
        <rdar://problem/62755865>

        Not reviewed.

        * assembler/CPU.h:

2020-05-01  Mark Lam  <mark.lam@apple.com>

        Allow Bitmap to use up to a UCPURegister word size for internal bit storage.
        https://bugs.webkit.org/show_bug.cgi?id=211328
        <rdar://problem/62755865>

        Reviewed by Yusuke Suzuki.

        * assembler/CPU.h:

2020-05-01  Saam Barati  <sbarati@apple.com>

        Have a thread local cache for the Wasm LLInt bytecode buffer
        https://bugs.webkit.org/show_bug.cgi?id=211317

        Reviewed by Filip Pizlo and Mark Lam.

        One of the main things slowing down Wasm compile times is the banging
        on bmalloc's global heap lock. This patch makes it so for the bytecode
        instruction buffer, we keep a thread local cache with latest capacity
        the thread needed to compile. This makes it so that in the average case,
        we only do one malloc at the end of a compile to memcpy the final result.
        
        We clear these thread local caches when the WasmWorklist's automatic threads
        underlying machine thread is destroyed.
        
        This is a 15% speedup in zen garden compile times on a 16-core Mac Pro.
        This is a 4-5% speedup in zen garden compile times on a 6-core MBP.

        * bytecode/InstructionStream.h:
        (JSC::InstructionStreamWriter::setInstructionBuffer):
        (JSC::InstructionStreamWriter::finalize):
        * wasm/WasmLLIntGenerator.cpp:
        (JSC::Wasm::threadSpecificBuffer):
        (JSC::Wasm::clearLLIntThreadSpecificCache):
        (JSC::Wasm::LLIntGenerator::LLIntGenerator):
        (JSC::Wasm::LLIntGenerator::finalize):
        * wasm/WasmLLIntGenerator.h:
        * wasm/WasmWorklist.cpp:

2020-05-01  Per Arne Vollan  <pvollan@apple.com>

        [Win] Fix AppleWin build
        https://bugs.webkit.org/show_bug.cgi?id=211324

        Reviewed by Don Olmstead.

        Check if target WTF_CopyHeaders exists before using it.

        * CMakeLists.txt:

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        [GTK] Add additional exports to support hidden visibility
        https://bugs.webkit.org/show_bug.cgi?id=211246

        Reviewed by Michael Catanzaro.

        * API/glib/JSCContextPrivate.h:
        * API/glib/JSCValuePrivate.h:
        * inspector/remote/glib/RemoteInspectorServer.h:
        * inspector/remote/glib/RemoteInspectorUtils.h:

2020-05-01  Don Olmstead  <don.olmstead@sony.com>

        Use export macros on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=211293

        Reviewed by Michael Catanzaro.

        Allow overriding of JS_EXPORT_PRIVATE if desired otherwise use the defaults.

        * runtime/JSExportMacros.h:

2020-05-01  Saam Barati  <sbarati@apple.com>

        Unreviewed. Non-speculative build fix for watchOS build.

        * runtime/ArrayPrototype.cpp:
        (JSC::shift):
        (JSC::unshift):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):

2020-05-01  Saam Barati  <sbarati@apple.com>

        Unreviewed. Speculative build fix for watchOS build.

        * runtime/ArrayPrototype.cpp:
        (JSC::shift):

2020-05-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Interface prototype objects should define @@toStringTag
        https://bugs.webkit.org/show_bug.cgi?id=211020

        Unreviewed follow-up to r260992.

        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation): Revert change in attempt to fix ARMv7 test.

2020-05-01  David Kilzer  <ddkilzer@apple.com>

        JSC::PropertySlot::m_attributes is uninitialized in constructor
        <https://webkit.org/b/211267>

        Reviewed by Mark Lam.

        * runtime/PropertySlot.h:
        (JSC::PropertySlot::PropertySlot):
        - Initialize m_attributes and m_additionalData, and make use of
          default initializers.

2020-05-01  Alexey Shvayka  <shvaikalesh@gmail.com>

        [WebIDL] Interface prototype objects should define @@toStringTag
        https://bugs.webkit.org/show_bug.cgi?id=211020

        Reviewed by Darin Adler.

        WebIDL spec was recently updated [1] to define @@toStringTag on interface prototype objects.
        This change aligns WebIDL with ECMA-262 built-ins and Blink's behavior. Gecko have also
        expressed implementation commitment.

        This patch implements the spec change, making `X.prototype.toString()` return "[object X]"
        instead of "[object XPrototype]", where X is WebIDL interface. This behavior is proven to
        be web compatible (shipping in Chrome since Q2 2016) and matches class strings of iterator
        prototype objects [2] introduced in r253855.

        We define @@toStringTag for all WebAssembly interfaces but Error subclasses since they
        are not defined using WebIDL [3].

        This change also introduces JSC_TO_STRING_TAG_WITHOUT_TRANSITION() macro that sets up
        @@toStringTag using ClassInfo to avoid extra strings creation, ensuring `className` equality
        between prototype and instance classes (fixing a few discrepancies), as well as correct
        descriptors. It also ensures using faster jsNontrivialString() and relieves from putting
        more code into CodeGeneratorJS.pm.

        [1]: https://github.com/heycam/webidl/pull/357
        [2]: https://heycam.github.io/webidl/#es-iterator-prototype-object
        [3]: https://webassembly.github.io/spec/js-api/#error-objects

        Tests: imported/w3c/web-platform-tests/wasm/jsapi/instance/toString.any.js
               imported/w3c/web-platform-tests/wasm/jsapi/memory/toString.any.js
               imported/w3c/web-platform-tests/wasm/jsapi/module/toString.any.js
               imported/w3c/web-platform-tests/wasm/jsapi/table/toString.any.js

        * runtime/ArrayIteratorPrototype.cpp:
        (JSC::ArrayIteratorPrototype::finishCreation):
        * runtime/AsyncFunctionPrototype.cpp:
        (JSC::AsyncFunctionPrototype::finishCreation):
        * runtime/AsyncGeneratorFunctionPrototype.cpp:
        (JSC::AsyncGeneratorFunctionPrototype::finishCreation):
        * runtime/AsyncGeneratorPrototype.cpp:
        (JSC::AsyncGeneratorPrototype::finishCreation):
        * runtime/BigIntPrototype.cpp:
        (JSC::BigIntPrototype::finishCreation):
        * runtime/GeneratorFunctionPrototype.cpp:
        (JSC::GeneratorFunctionPrototype::finishCreation):
        * runtime/GeneratorPrototype.cpp:
        (JSC::GeneratorPrototype::finishCreation):
        * runtime/IntlCollatorPrototype.cpp:
        (JSC::IntlCollatorPrototype::finishCreation):
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototype::finishCreation):
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototype::finishCreation):
        * runtime/IntlPluralRulesPrototype.cpp:
        (JSC::IntlPluralRulesPrototype::finishCreation):
        * runtime/IntlRelativeTimeFormatPrototype.cpp:
        (JSC::IntlRelativeTimeFormatPrototype::finishCreation):
        * runtime/JSArrayBufferPrototype.cpp:
        (JSC::JSArrayBufferPrototype::finishCreation):
        * runtime/JSDataViewPrototype.cpp:
        (JSC::JSDataViewPrototype::finishCreation):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::finishCreation):
        * runtime/JSObject.h:
        * runtime/JSPromisePrototype.cpp:
        (JSC::JSPromisePrototype::finishCreation):
        * runtime/MapIteratorPrototype.cpp:
        (JSC::MapIteratorPrototype::finishCreation):
        * runtime/MapPrototype.cpp:
        (JSC::MapPrototype::finishCreation):
        * runtime/MathObject.cpp:
        (JSC::MathObject::finishCreation):
        * runtime/RegExpStringIteratorPrototype.cpp:
        (JSC::RegExpStringIteratorPrototype::finishCreation):
        * runtime/SetIteratorPrototype.cpp:
        (JSC::SetIteratorPrototype::finishCreation):
        * runtime/SetPrototype.cpp:
        (JSC::SetPrototype::finishCreation):
        * runtime/StringIteratorPrototype.cpp:
        (JSC::StringIteratorPrototype::finishCreation):
        * runtime/SymbolPrototype.cpp:
        (JSC::SymbolPrototype::finishCreation):
        * runtime/WeakMapPrototype.cpp:
        (JSC::WeakMapPrototype::finishCreation):
        * runtime/WeakObjectRefPrototype.cpp:
        (JSC::WeakObjectRefPrototype::finishCreation):
        * runtime/WeakSetPrototype.cpp:
        (JSC::WeakSetPrototype::finishCreation):
        * wasm/js/WebAssemblyInstancePrototype.cpp:
        (JSC::WebAssemblyInstancePrototype::finishCreation):
        * wasm/js/WebAssemblyMemoryPrototype.cpp:
        (JSC::WebAssemblyMemoryPrototype::finishCreation):
        * wasm/js/WebAssemblyModulePrototype.cpp:
        (JSC::WebAssemblyModulePrototype::finishCreation):
        * wasm/js/WebAssemblyTablePrototype.cpp:
        (JSC::WebAssemblyTablePrototype::finishCreation):

2020-05-01  Saam Barati  <sbarati@apple.com>

        We can't cast toLength result to unsigned
        https://bugs.webkit.org/show_bug.cgi?id=211205
        <rdar://problem/62625562>

        Reviewed by Yusuke Suzuki.

        toLength, according to the spec, returns a 53-bit integer. In our
        implementation, we return a double. However, there were many callsites
        that did something like:
        ```
        unsigned length = toLength(obj);
        ```
        
        This is bad for a few reasons:
        - Casting to unsigned from double is undefined behavior when the integer
        is greater than UINT_MAX. In practice, this means that we'd have different
        engine behavior depending on what architecture we'd be running on. For
        example, if the length were UINT_MAX + 1, on x86, we'd treat the
        length as zero. On arm64, we'd treat it as UINT_MAX. Both are wrong.
        - We weren't spec compliant. We were just ignoring that these numbers could
        be 53-bit integers.
        
        This patch addresses each bad use of the undefined behavior, and by doing so,
        makes us more spec compliant.

        * dfg/DFGOperations.cpp:
        * jit/JITOperations.cpp:
        (JSC::getByVal):
        * runtime/ArrayPrototype.cpp:
        (JSC::getProperty):
        (JSC::setLength):
        (JSC::argumentClampedIndexFromStartOrEnd):
        (JSC::shift):
        (JSC::unshift):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::fastIndexOf):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):
        * runtime/Identifier.h:
        (JSC::Identifier::from):
        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLocaleList):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasProperty const):
        * runtime/JSObject.h:
        (JSC::JSObject::putByIndexInline):
        (JSC::JSObject::putDirectIndex):
        (JSC::JSObject::canGetIndexQuickly const):
        (JSC::JSObject::tryGetIndexQuickly const):
        * runtime/JSObjectInlines.h:
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::get const):
        * runtime/PropertySlot.h:
        (JSC::PropertySlot::getValue const):
        * tools/JSDollarVM.cpp:
        (JSC::functionSetUserPreferredLanguages):

2020-04-30  Ross Kirsling  <ross.kirsling@sony.com>

        TriState should be an enum class and use "Indeterminate" instead of "Mixed"
        https://bugs.webkit.org/show_bug.cgi?id=211268

        Reviewed by Mark Lam.

        * b3/B3Const32Value.cpp:
        (JSC::B3::Const32Value::equalConstant const):
        (JSC::B3::Const32Value::notEqualConstant const):
        (JSC::B3::Const32Value::lessThanConstant const):
        (JSC::B3::Const32Value::greaterThanConstant const):
        (JSC::B3::Const32Value::lessEqualConstant const):
        (JSC::B3::Const32Value::greaterEqualConstant const):
        (JSC::B3::Const32Value::aboveConstant const):
        (JSC::B3::Const32Value::belowConstant const):
        (JSC::B3::Const32Value::aboveEqualConstant const):
        (JSC::B3::Const32Value::belowEqualConstant const):
        * b3/B3Const64Value.cpp:
        (JSC::B3::Const64Value::equalConstant const):
        (JSC::B3::Const64Value::notEqualConstant const):
        (JSC::B3::Const64Value::lessThanConstant const):
        (JSC::B3::Const64Value::greaterThanConstant const):
        (JSC::B3::Const64Value::lessEqualConstant const):
        (JSC::B3::Const64Value::greaterEqualConstant const):
        (JSC::B3::Const64Value::aboveConstant const):
        (JSC::B3::Const64Value::belowConstant const):
        (JSC::B3::Const64Value::aboveEqualConstant const):
        (JSC::B3::Const64Value::belowEqualConstant const):
        * b3/B3ConstDoubleValue.cpp:
        (JSC::B3::ConstDoubleValue::equalConstant const):
        (JSC::B3::ConstDoubleValue::notEqualConstant const):
        (JSC::B3::ConstDoubleValue::lessThanConstant const):
        (JSC::B3::ConstDoubleValue::greaterThanConstant const):
        (JSC::B3::ConstDoubleValue::lessEqualConstant const):
        (JSC::B3::ConstDoubleValue::greaterEqualConstant const):
        (JSC::B3::ConstDoubleValue::equalOrUnorderedConstant const):
        * b3/B3ConstFloatValue.cpp:
        (JSC::B3::ConstFloatValue::equalConstant const):
        (JSC::B3::ConstFloatValue::notEqualConstant const):
        (JSC::B3::ConstFloatValue::lessThanConstant const):
        (JSC::B3::ConstFloatValue::greaterThanConstant const):
        (JSC::B3::ConstFloatValue::lessEqualConstant const):
        (JSC::B3::ConstFloatValue::greaterEqualConstant const):
        (JSC::B3::ConstFloatValue::equalOrUnorderedConstant const):
        * b3/B3Procedure.cpp:
        (JSC::B3::Procedure::addBoolConstant):
        * b3/B3Procedure.h:
        * b3/B3ReduceStrength.cpp:
        * b3/B3Value.cpp:
        (JSC::B3::Value::equalConstant const):
        (JSC::B3::Value::notEqualConstant const):
        (JSC::B3::Value::lessThanConstant const):
        (JSC::B3::Value::greaterThanConstant const):
        (JSC::B3::Value::lessEqualConstant const):
        (JSC::B3::Value::greaterEqualConstant const):
        (JSC::B3::Value::aboveConstant const):
        (JSC::B3::Value::belowConstant const):
        (JSC::B3::Value::aboveEqualConstant const):
        (JSC::B3::Value::belowEqualConstant const):
        (JSC::B3::Value::equalOrUnorderedConstant const):
        (JSC::B3::Value::asTriState const):
        * b3/B3Value.h:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::thresholdForJIT):
        * bytecode/UnlinkedCodeBlock.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * bytecode/UnlinkedFunctionExecutable.cpp:
        (JSC::UnlinkedFunctionExecutable::visitChildren):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ConstantNode::emitBytecodeInConditionContext):
        (JSC::BinaryOpNode::emitBytecodeInConditionContext):
        (JSC::BinaryOpNode::tryFoldToBranch):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGCFGSimplificationPhase.cpp:
        (JSC::DFG::CFGSimplificationPhase::run):
        * dfg/DFGLazyJSValue.cpp:
        (JSC::DFG::equalToSingleCharacter):
        (JSC::DFG::equalToStringImpl):
        (JSC::DFG::LazyJSValue::strictEqual const):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileDataViewGet):
        (JSC::FTL::DFG::LowerDFGToB3::compileDataViewSet):
        * ftl/FTLOutput.cpp:
        (JSC::FTL::Output::equal):
        (JSC::FTL::Output::notEqual):
        (JSC::FTL::Output::above):
        (JSC::FTL::Output::aboveOrEqual):
        (JSC::FTL::Output::below):
        (JSC::FTL::Output::belowOrEqual):
        (JSC::FTL::Output::greaterThan):
        (JSC::FTL::Output::greaterThanOrEqual):
        (JSC::FTL::Output::lessThan):
        (JSC::FTL::Output::lessThanOrEqual):
        * jit/JITOperations.cpp:
        * runtime/CachedTypes.cpp:
        (JSC::UnlinkedCodeBlock::UnlinkedCodeBlock):
        * runtime/DefinePropertyAttributes.h:
        (JSC::DefinePropertyAttributes::DefinePropertyAttributes):
        (JSC::DefinePropertyAttributes::hasWritable const):
        (JSC::DefinePropertyAttributes::writable const):
        (JSC::DefinePropertyAttributes::hasConfigurable const):
        (JSC::DefinePropertyAttributes::configurable const):
        (JSC::DefinePropertyAttributes::hasEnumerable const):
        (JSC::DefinePropertyAttributes::enumerable const):
        (JSC::DefinePropertyAttributes::setWritable):
        (JSC::DefinePropertyAttributes::setConfigurable):
        (JSC::DefinePropertyAttributes::setEnumerable):
        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlObject.cpp:
        (JSC::intlBooleanOption):
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::pureStrictEqual):
        (JSC::JSValue::pureToBoolean const):
        * runtime/JSCellInlines.h:
        (JSC::JSCell::pureToBoolean const):

2020-04-30  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] intlBooleanOption should return TriState instead of taking an out param
        https://bugs.webkit.org/show_bug.cgi?id=211256

        Reviewed by Darin Adler and Mark Lam.

        Boolean options for Intl constructors can have default values of true, false, or undefined.
        To handle the undefined case, intlBooleanOption currently has a `bool& usesFallback` param;
        we should have the return type simply be a TriState instead.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        * runtime/IntlObject.cpp:
        (JSC::intlBooleanOption):
        * runtime/IntlObject.h:

2020-04-30  Devin Rousso  <drousso@apple.com>

        WebKit.WebContent process crashes when web developer tools are opened in Safari
        https://bugs.webkit.org/show_bug.cgi?id=210794
        <rdar://problem/62214651>

        Reviewed by Brian Burg.

        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::injectedScriptFor):
        Don't crash if a `TerminatedExecutionError` is thrown.

        * inspector/InjectedScriptBase.cpp:
        (Inspector::InjectedScriptBase::makeCall):
        Report the actual error message. Check that the result has a value before attempting to make
        a `JSON::Value` out of it.

2020-04-29  Ross Kirsling  <ross.kirsling@sony.com>

        Ensure Intl classes don't have naming conflicts with unified builds
        https://bugs.webkit.org/show_bug.cgi?id=211213

        Reviewed by Yusuke Suzuki.

        Each Intl class usually has an array named relevantExtensionsKeys and a function named localeData.
        This can result in redefinition errors when unified builds put two of them into the same translation unit. 
        Some are already guarding against this with an internal namespace while others are not.

        As a uniform approach, this patch makes each localeData function a static method and
        puts each relevantExtensionsKeys array (as well as any constants for its indices) into an internal namespace.

        Furthermore, since three different classes are defining an identical UFieldPositionIteratorDeleter,
        this patch consolidates them into one definition in IntlObject.

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::sortLocaleData): Renamed from JSC::sortLocaleData.
        (JSC::IntlCollator::searchLocaleData): Renamed from JSC::searchLocaleData.
        (JSC::IntlCollator::initializeCollator):
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::localeData): Renamed from JSC::IntlDTFInternal::localeData.
        (JSC::toDateTimeOptionsAnyDate): Renamed from JSC::IntlDTFInternal::toDateTimeOptionsAnyDate.
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::UFieldPositionIteratorDeleter::operator() const): Deleted.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::localeData): Renamed from JSC::IntlNFInternal::localeData.
        (JSC::IntlNumberFormat::initializeNumberFormat):
        (JSC::UFieldPositionIteratorDeleter::operator() const): Deleted.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlObject.cpp:
        (JSC::UFieldPositionIteratorDeleter::operator() const): Added.
        * runtime/IntlObject.h:
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::localeData): Renamed from JSC::localeData.
        * runtime/IntlPluralRules.h:
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::localeData): Renamed from JSC::localeData.
        (JSC::IntlRelativeTimeFormat::initializeRelativeTimeFormat):
        (JSC::UFieldPositionIteratorDeleter::operator() const): Deleted.
        * runtime/IntlRelativeTimeFormat.h:

2020-04-29  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed follow-up to r260848.
        LowerDFGToB3 has its own isFunction which should NOT have been renamed.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::isFunction): Renamed from isCallable.

2020-04-29  Alexey Shvayka  <shvaikalesh@gmail.com>

        AsyncFromSyncIterator methods should not pass absent values
        https://bugs.webkit.org/show_bug.cgi?id=211147

        Reviewed by Ross Kirsling.

        This patch implements minor spec change [1] to match async and sync iteration
        from the perspective of userland `next` and `return` iterator methods.
        `throw` method always receives an argument, yet we align with others to be
        consistent and future-proof.

        This change is already implemented in SpiderMonkey.

        [1]: https://github.com/tc39/ecma262/pull/1776

        * builtins/AsyncFromSyncIteratorPrototype.js:

2020-04-29  Mark Lam  <mark.lam@apple.com>

        Freezing of Gigacage and JSC Configs should be thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=211201
        <rdar://problem/62597619>

        Reviewed by Yusuke Suzuki.

        If a client creates multiple VM instances in different threads concurrently, the
        following race can occur:

        Config::permanentlyFreeze() contains the following code:

            if (!g_jscConfig.isPermanentlyFrozen)         // Point P1
                g_jscConfig.isPermanentlyFrozen = true;   // Point P2

        Let's say there are 2 threads T1 and T2.

        1. T1 creates a VM and gets to point P1, and sees that g_jscConfig.isPermanentlyFrozen is not set.
           T1 is about to execute P2 when it gets pre-empted.

        2. T2 creates a VM and gets to point P1, and sees that g_jscConfig.isPermanentlyFrozen is not set.
           T2 proceeds to point P2 and sets g_jscConfig.isPermanentlyFrozen to true.
           T2 goes on to freeze the Config and makes it not writable.

        3. T1 gets to run again, and proceeds to point P2.
           T1 tries to set g_jscConfig.isPermanentlyFrozen to true.
           But because the Config has been frozen against writes, the write to
           g_jscConfig.isPermanentlyFrozen results in a crash.

        This is a classic TOCTOU bug.  The fix is simply to ensure that only one thread
        can enter Config::permanentlyFreeze() at a time.

        Ditto for Gigacage::permanentlyFreezeGigacageConfig().

        * runtime/JSCConfig.cpp:
        (JSC::Config::permanentlyFreeze):

2020-04-29  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSStringJoiner is missing BigInt handling
        https://bugs.webkit.org/show_bug.cgi?id=211174

        Reviewed by Mark Lam.

        JSStringJoiner missed handling of BigInt (specifically BigInt32) and appending empty string incorrectly.
        In debug build, assertion hits. We should support BigInt in JSStringJoiner.

        * runtime/JSStringJoiner.h:
        (JSC::JSStringJoiner::appendWithoutSideEffects):

2020-04-29  Saam Barati  <sbarati@apple.com>

        U_STRING_NOT_TERMINATED_WARNING ICU must be handled when using the output buffer as a C string
        https://bugs.webkit.org/show_bug.cgi?id=211142
        <rdar://problem/62530860>

        Reviewed by Darin Adler.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::defaultTimeZone):
        (JSC::canonicalizeTimeZoneName):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::format):
        (JSC::IntlDateTimeFormat::formatToParts):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::format):
        (JSC::IntlNumberFormat::formatToParts):
        * runtime/IntlObject.cpp:
        (JSC::convertICULocaleToBCP47LanguageTag):
        (JSC::canonicalizeLanguageTag):
        * runtime/IntlRelativeTimeFormat.cpp:
        (JSC::IntlRelativeTimeFormat::formatInternal):
        (JSC::IntlRelativeTimeFormat::formatToParts):
        * runtime/StringPrototype.cpp:
        (JSC::toLocaleCase):
        (JSC::normalize):

2020-04-28  Saam Barati  <sbarati@apple.com>

        Unreviewed. Fix 32-bit build.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createFrom):
        (JSC::Int32BigIntImpl::digit):

2020-04-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260876 and r260877.
        https://bugs.webkit.org/show_bug.cgi?id=211165

        Broke build (Requested by yusukesuzuki on #webkit).

        Reverted changesets:

        "Unreviewed, build fix on watchOS"
        https://bugs.webkit.org/show_bug.cgi?id=210978
        https://trac.webkit.org/changeset/260876

        "Unreviewed, speculative build fix on watchOS part 2"
        https://bugs.webkit.org/show_bug.cgi?id=210978
        https://trac.webkit.org/changeset/260877

2020-04-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, speculative build fix on watchOS part 2
        https://bugs.webkit.org/show_bug.cgi?id=210978

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createFrom):
        (JSC::Int32BigIntImpl::digit):
        * runtime/JSBigInt.h:

2020-04-28  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix on watchOS
        https://bugs.webkit.org/show_bug.cgi?id=210978

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createFrom):
        (JSC::Int32BigIntImpl::digit):
        * runtime/JSBigInt.h:

2020-04-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] BigInt constructor should accept larger integers than safe-integers
        https://bugs.webkit.org/show_bug.cgi?id=210755

        Reviewed by Darin Adler.

        While our implementation of BigInt constructor only accepts safe integers, it should accept all integers.
        This patch implements it by creating JSBigInt::createFrom(double). We port double bit processing part from
        V8 as the same to the other part of JSBigInt.

        * runtime/BigIntConstructor.cpp:
        (JSC::callBigIntConstructor):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createFrom):
        * runtime/JSBigInt.h:
        * runtime/MathCommon.h:
        (JSC::isInteger):
        (JSC::isSafeInteger):
        * runtime/NumberConstructor.cpp:
        (JSC::numberConstructorFuncIsSafeInteger):
        * runtime/NumberConstructor.h:

2020-04-28  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Align upon the name isCallable instead of isFunction
        https://bugs.webkit.org/show_bug.cgi?id=211140

        Reviewed by Darin Adler.

        Follow-up to r260722. Usage is now cleanly separated between isFunction / getCallData,
        but the name isCallable is still clearer than isFunction so let's flip that after all.

        * API/JSContextRef.cpp:
        (JSGlobalContextSetUnhandledRejectionCallback):
        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        * dfg/DFGOperations.cpp:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateThis):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreatePromise):
        (JSC::FTL::DFG::LowerDFGToB3::compileCreateInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsObjectOrNull):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsFunction):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::isCallable):
        (JSC::FTL::DFG::LowerDFGToB3::isFunction): Deleted.
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationTypeOfObjectAsTypeofType):
        * jsc.cpp:
        (functionSetUnhandledRejectionCallback):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/ExceptionHelpers.cpp:
        (JSC::errorDescriptionForValue):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/InternalFunction.cpp:
        (JSC::getFunctionRealm):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::isCallable const):
        (JSC::JSValue::isFunction const): Deleted.
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isCallable):
        (JSC::JSCell::isFunction): Deleted.
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/ObjectConstructor.cpp:
        (JSC::toPropertyDescriptor):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectTypeOrNull):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::structureForTarget):
        (JSC::ProxyObject::finishCreation):
        * runtime/RuntimeType.cpp:
        (JSC::runtimeTypeForValue):
        * tools/JSDollarVM.cpp:
        (JSC::functionCallWithStackSize):
        (JSC::functionFindTypeForExpression):
        (JSC::functionReturnTypeFor):
        (JSC::functionHasBasicBlockExecuted):
        (JSC::functionBasicBlockExecutionCount):
        * wasm/WasmInstance.cpp:
        (JSC::Wasm::Instance::setFunctionWrapper):
        * wasm/WasmOperations.cpp:
        (JSC::Wasm::operationIterateResults):
        (JSC::Wasm::operationWasmRefFunc):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::link):
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::WebAssemblyWrapperFunction::finishCreation):

2020-04-28  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] NumberConstructor should accept BigInt
        https://bugs.webkit.org/show_bug.cgi?id=210835

        Reviewed by Mark Lam.

        This patch fixes our Number constructor behavior to accept BigInt. According to the spec[1],
        Number constructor should accept BigInt and should generate numbers from that.

        We port V8's BigInt to double conversion code as we did for the other HeapBigInt runtime functions.

        And we introduce CallNumberConstructor DFG node and handle Number constructor call with BigInt correctly
        in DFG and FTL. Previously we were emitting ToNumber DFG node for Number constructor. But this is wrong
        now since ToNumber does not accept BigInt and throws an error, and Number constructor should not use
        ToNumber to implement its implementation. So we should introduce slightly different semantics: CallNumberConstructor
        as we introduced CallStringConstructor in addition to ToString DFG node. And we add appropriate BigInt32 path
        to emit efficient CallNumberConstructor machine code.

        [1]: https://tc39.es/ecma262/#sec-number-constructor-number-value

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGBackwardsPropagationPhase.cpp:
        (JSC::DFG::BackwardsPropagationPhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupToNumberOrToNumericOrCallNumberConstructor):
        (JSC::DFG::FixupPhase::fixupToNumeric): Deleted.
        (JSC::DFG::FixupPhase::fixupToNumber): Deleted.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileToNumeric):
        (JSC::DFG::SpeculativeJIT::compileCallNumberConstructor):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCallNumberConstructor):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::decideRounding):
        (JSC::JSBigInt::toNumberHeap):
        * runtime/JSBigInt.h:
        * runtime/NumberConstructor.cpp:
        (JSC::constructNumberConstructor):
        (JSC::callNumberConstructor):

2020-04-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Throw OutOfMemoryError instead of RangeError if BigInt is too big
        https://bugs.webkit.org/show_bug.cgi?id=211111

        Reviewed by Saam Barati.

        Currently, we are throwing a RangeError if we detect that JSBigInt becomes too large. But this is not consistent with our JSString's policy.
        We should throw OutOfMemoryError in this case. This also makes DFG simple since DFG allows throwing OutOfMemoryError in any places which node
        is even removed.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * runtime/ExceptionHelpers.cpp:
        (JSC::throwOutOfMemoryError):
        * runtime/ExceptionHelpers.h:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::tryCreateWithLength):
        (JSC::JSBigInt::exponentiateHeap):
        (JSC::JSBigInt::leftShiftByAbsolute):
        (JSC::JSBigInt::allocateFor):

2020-04-27  Saam Barati  <sbarati@apple.com>

        BigInt math runtime shouldn't convert BigInt32 input operands to a heap cell when doing math
        https://bugs.webkit.org/show_bug.cgi?id=210978

        Reviewed by Yusuke Suzuki.

        This patch adds support in the runtime for doing alomst all BigInt math
        operations on the inputs either being Int32, HeapBigInt, or a mixing
        of both. Before, if we detected a binary operation on an Int32 and a
        HeapBigInt, this would lead us to convert the Int32 operand into a HeapBigInt.
        
        This is especially bad because we'd repeat this for all math ops. For example,
        if x is a BigInt32, and all rhs are a HeapBigInt, we'd repeatedly convert x
        to a HeapBigInt for each operation:
        ```
        x + y
        x * y
        x - y
        x >> y
        x << y
        etc
        ```
        
        To teach the runtime how to operate both over a BigInt32 and a HeapBigInt, I
        templatized the runtime math operations to work both over BigInt32 and
        HeapBigInt wrapper classes that expose the same interface.
        
        This is a ~28% speedup on microbenchmarks/sunspider-sha1-big-int.js

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compare):
        * jit/JITOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::HeapBigIntImpl::HeapBigIntImpl):
        (JSC::HeapBigIntImpl::isZero):
        (JSC::HeapBigIntImpl::sign):
        (JSC::HeapBigIntImpl::length):
        (JSC::HeapBigIntImpl::digit):
        (JSC::HeapBigIntImpl::toHeapBigInt):
        (JSC::Int32BigIntImpl::Int32BigIntImpl):
        (JSC::Int32BigIntImpl::isZero):
        (JSC::Int32BigIntImpl::sign):
        (JSC::Int32BigIntImpl::length):
        (JSC::Int32BigIntImpl::digit):
        (JSC::Int32BigIntImpl::toHeapBigInt):
        (JSC::JSBigInt::ImplResult::ImplResult):
        (JSC::tryConvertToBigInt32):
        (JSC::JSBigInt::inplaceMultiplyAdd):
        (JSC::JSBigInt::exponentiateImpl):
        (JSC::JSBigInt::exponentiate):
        (JSC::JSBigInt::multiplyImpl):
        (JSC::JSBigInt::multiply):
        (JSC::JSBigInt::divideImpl):
        (JSC::JSBigInt::divide):
        (JSC::JSBigInt::copy):
        (JSC::JSBigInt::unaryMinusImpl):
        (JSC::JSBigInt::unaryMinus):
        (JSC::JSBigInt::remainderImpl):
        (JSC::JSBigInt::remainder):
        (JSC::JSBigInt::incImpl):
        (JSC::JSBigInt::inc):
        (JSC::JSBigInt::decImpl):
        (JSC::JSBigInt::dec):
        (JSC::JSBigInt::addImpl):
        (JSC::JSBigInt::add):
        (JSC::JSBigInt::subImpl):
        (JSC::JSBigInt::sub):
        (JSC::JSBigInt::bitwiseAndImpl):
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::bitwiseOrImpl):
        (JSC::JSBigInt::bitwiseOr):
        (JSC::JSBigInt::bitwiseXorImpl):
        (JSC::JSBigInt::bitwiseXor):
        (JSC::JSBigInt::leftShiftImpl):
        (JSC::JSBigInt::leftShift):
        (JSC::JSBigInt::leftShiftSlow):
        (JSC::JSBigInt::signedRightShiftImpl):
        (JSC::JSBigInt::signedRightShift):
        (JSC::JSBigInt::bitwiseNotImpl):
        (JSC::JSBigInt::bitwiseNot):
        (JSC::JSBigInt::internalMultiplyAdd):
        (JSC::JSBigInt::multiplyAccumulate):
        (JSC::JSBigInt::absoluteCompare):
        (JSC::JSBigInt::compareImpl):
        (JSC::JSBigInt::compare):
        (JSC::JSBigInt::absoluteAdd):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::absoluteDivWithDigitDivisor):
        (JSC::JSBigInt::absoluteDivWithBigIntDivisor):
        (JSC::JSBigInt::absoluteLeftShiftAlwaysCopy):
        (JSC::JSBigInt::absoluteBitwiseOp):
        (JSC::JSBigInt::absoluteAnd):
        (JSC::JSBigInt::absoluteOr):
        (JSC::JSBigInt::absoluteAndNot):
        (JSC::JSBigInt::absoluteXor):
        (JSC::JSBigInt::absoluteAddOne):
        (JSC::JSBigInt::absoluteSubOne):
        (JSC::JSBigInt::leftShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByAbsolute):
        (JSC::JSBigInt::rightShiftByMaximum):
        (JSC::JSBigInt::toStringGeneric):
        (JSC::JSBigInt::toShiftAmount):
        (JSC::JSBigInt::exponentiateHeap): Deleted.
        (JSC::JSBigInt::multiplyHeap): Deleted.
        (JSC::JSBigInt::divideHeap): Deleted.
        (JSC::JSBigInt::unaryMinusHeap): Deleted.
        (JSC::JSBigInt::remainderHeap): Deleted.
        (JSC::JSBigInt::incHeap): Deleted.
        (JSC::JSBigInt::decHeap): Deleted.
        (JSC::JSBigInt::addHeap): Deleted.
        (JSC::JSBigInt::subHeap): Deleted.
        (JSC::JSBigInt::bitwiseAndHeap): Deleted.
        (JSC::JSBigInt::bitwiseOrHeap): Deleted.
        (JSC::JSBigInt::bitwiseXorHeap): Deleted.
        (JSC::JSBigInt::leftShiftHeap): Deleted.
        (JSC::JSBigInt::signedRightShiftHeap): Deleted.
        (JSC::JSBigInt::bitwiseNotHeap): Deleted.
        (JSC::JSBigInt::compareToInt32): Deleted.
        * runtime/JSBigInt.h:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::compareBigInt):
        (JSC::compareBigInt32ToOtherPrimitive):
        (JSC::arithmeticBinaryOp):
        (JSC::jsSub):
        (JSC::jsMul):
        (JSC::jsDiv):
        (JSC::jsRemainder):
        (JSC::jsPow):
        (JSC::jsInc):
        (JSC::jsDec):
        (JSC::jsBitwiseNot):
        (JSC::shift):
        (JSC::jsLShift):
        (JSC::jsRShift):
        (JSC::bitwiseBinaryOp):
        (JSC::jsBitwiseAnd):
        (JSC::jsBitwiseOr):
        (JSC::jsBitwiseXor):

2020-04-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] >>> should call ToNumeric
        https://bugs.webkit.org/show_bug.cgi?id=211065

        Reviewed by Ross Kirsling.

        While BigInt does not support >>> operator, >>> operator should call ToNumeric (in this case, toBigIntOrInt32) for both before throwing an error.
        We call toBigIntOrInt32 for both operands, and throw an error. And after that, casting int32_t to uint32_t to perform >>> operator. This is correct
        since the only difference between toUint32 and toInt32 is casting int32_t result to uint32_t.

        * dfg/DFGOperations.cpp:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/Operations.h:
        (JSC::shift):
        (JSC::jsURShift):

2020-04-27  Keith Miller  <keith_miller@apple.com>

        OSR Exit compiler should know and print the exiting DFG node's index
        https://bugs.webkit.org/show_bug.cgi?id=210998

        Reviewed by Mark Lam.

        The only interesting thing here is that we set the node to index 0 if there is no node.
        AFAICT, we only don't have a node when we are checking arguments.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::operationCompileOSRExit):
        * dfg/DFGOSRExitBase.h:
        (JSC::DFG::OSRExitBase::OSRExitBase):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
        (JSC::FTL::DFG::LowerDFGToB3::blessSpeculation):
        * ftl/FTLOSRExit.cpp:
        (JSC::FTL::OSRExitDescriptor::emitOSRExit):
        (JSC::FTL::OSRExitDescriptor::emitOSRExitLater):
        (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
        (JSC::FTL::OSRExit::OSRExit):
        * ftl/FTLOSRExit.h:
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):

2020-04-27  Saam Barati  <sbarati@apple.com>

        compilePeepHoleBigInt32Branch needs to handle all conditions
        https://bugs.webkit.org/show_bug.cgi?id=211096
        <rdar://problem/62469971>

        Reviewed by Yusuke Suzuki.

        We were falling through to the generic path for all conditions which
        weren't Equal/NotEqual. The generic path does not do speculation, so
        it was leading to potential miscompiles because we omitted a type check.
        Defining compilePeepHoleBigInt32Branch for other conditions is trivial,
        so this patch just implements that.

        This failure is caught by microbenchmarks/sunspider-sha1-big-int.js

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBigInt32Branch):

2020-04-27  Jason Lawrence  <lawrence.j@apple.com>

        Unreviewed, reverting r260772.

        This commit caused tests to start failing internally.

        Reverted changeset:

        "OSR Exit compiler should know and print the exiting DFG
        node's index"
        https://bugs.webkit.org/show_bug.cgi?id=210998
        https://trac.webkit.org/changeset/260772

2020-04-27  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add $vm.assertEnabled() to suppress Debug crash expected tests in release+assert build
        https://bugs.webkit.org/show_bug.cgi?id=211089

        Reviewed by Keith Miller.

        Expose ASSERT_ENABLED condition to the shell to control crash expected tests.

        * tools/JSDollarVM.cpp:
        (JSC::functionAssertEnabled):
        (JSC::JSDollarVM::finishCreation):

2020-04-27  Keith Miller  <keith_miller@apple.com>

        OSR Exit compiler should know and print the exiting DFG node's index
        https://bugs.webkit.org/show_bug.cgi?id=210998

        Reviewed by Mark Lam.

        The only interesting thing here is that we set the node to index 0 if there is no node.
        AFAICT, we only don't have a node when we are checking arguments.

        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::operationCompileOSRExit):
        * dfg/DFGOSRExitBase.h:
        (JSC::DFG::OSRExitBase::OSRExitBase):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileInvalidationPoint):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckSubClass):
        (JSC::FTL::DFG::LowerDFGToB3::blessSpeculation):
        * ftl/FTLOSRExit.cpp:
        (JSC::FTL::OSRExitDescriptor::emitOSRExit):
        (JSC::FTL::OSRExitDescriptor::emitOSRExitLater):
        (JSC::FTL::OSRExitDescriptor::prepareOSRExitHandle):
        (JSC::FTL::OSRExit::OSRExit):
        * ftl/FTLOSRExit.h:
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):

2020-04-27  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] CallData/ConstructData should include CallType/ConstructType
        https://bugs.webkit.org/show_bug.cgi?id=211059

        Reviewed by Darin Adler.

        getCallData/getConstructData return a CallType/ConstructType and have a CallData/ConstructData out param,
        and then *both* of these are passed side-by-side to `call`/`construct`, which all seems a bit silly.

        This patch merges CallType/ConstructType into CallData/ConstructData such that getCallData/getConstructData
        no longer need an out param and `call`/`construct` require one less overt parameter.

        In so doing, it also:
        - removes ConstructData entirely as it's an exact duplicate of CallData
        - renames enum value Host to Native in alignment with CallData's union

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::getConstructData):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::getConstructData):
        (JSC::JSCallbackObject<Parent>::getCallData):
        * API/JSObjectRef.cpp:
        (JSObjectCallAsFunction):
        (JSObjectCallAsConstructor):
        * bindings/ScriptFunctionCall.cpp:
        (Deprecated::ScriptFunctionCall::call):
        * bindings/ScriptFunctionCall.h:
        * dfg/DFGOperations.cpp:
        * inspector/InjectedScriptManager.cpp:
        (Inspector::InjectedScriptManager::createInjectedScript):
        * inspector/InspectorEnvironment.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeProgram):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        * interpreter/Interpreter.h:
        * jit/JITOperations.cpp:
        * jsc.cpp:
        (functionDollarAgentReceiveBroadcast):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        * runtime/CallData.cpp:
        (JSC::call):
        (JSC::profiledCall):
        * runtime/CallData.h:
        * runtime/ClassInfo.h:
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/ConstructData.cpp:
        (JSC::construct):
        (JSC::profiledConstruct):
        * runtime/ConstructData.h:
        (JSC::construct):
        (JSC::profiledConstruct):
        (): Deleted.
        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToJSON):
        * runtime/GetterSetter.cpp:
        (JSC::callGetter):
        (JSC::callSetter):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::getCallData):
        (JSC::InternalFunction::getConstructData):
        * runtime/InternalFunction.h:
        * runtime/IteratorOperations.cpp:
        (JSC::iteratorNext):
        (JSC::iteratorClose):
        (JSC::hasIteratorMethod):
        (JSC::iteratorMethod):
        (JSC::iteratorForIterable):
        * runtime/JSBoundFunction.cpp:
        (JSC::boundThisNoArgsFunctionCall):
        (JSC::boundFunctionCall):
        (JSC::boundThisNoArgsFunctionConstruct):
        (JSC::boundFunctionConstruct):
        * runtime/JSCJSValue.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getCallData):
        (JSC::JSCell::getConstructData):
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isFunction):
        (JSC::JSCell::isConstructor):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::getConstructData):
        * runtime/JSFunction.h:
        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::then):
        * runtime/JSMicrotask.cpp:
        (JSC::JSMicrotask::run):
        * runtime/JSModuleLoader.cpp:
        (JSC::JSModuleLoader::dependencyKeysIfEvaluated):
        (JSC::JSModuleLoader::provideFetch):
        (JSC::JSModuleLoader::loadAndEvaluateModule):
        (JSC::JSModuleLoader::loadModule):
        (JSC::JSModuleLoader::linkAndEvaluateModule):
        (JSC::JSModuleLoader::requestImportModule):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::isCallableReplacer const):
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Walker::Walker):
        (JSC::Walker::callReviver):
        (JSC::JSONProtoFuncParse):
        * runtime/JSObject.cpp:
        (JSC::ordinarySetSlow):
        (JSC::callToPrimitiveFunction):
        (JSC::JSObject::hasInstance):
        (JSC::JSObject::getMethod):
        * runtime/JSObject.h:
        * runtime/JSObjectInlines.h:
        (JSC::getCallData):
        (JSC::getConstructData):
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::createDeferredData):
        (JSC::JSPromise::resolvedPromise):
        (JSC::callFunction):
        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToLocaleString):
        * runtime/ProxyObject.cpp:
        (JSC::performProxyGet):
        (JSC::ProxyObject::performInternalMethodGetOwnProperty):
        (JSC::ProxyObject::performHasProperty):
        (JSC::ProxyObject::performPut):
        (JSC::performProxyCall):
        (JSC::ProxyObject::getCallData):
        (JSC::performProxyConstruct):
        (JSC::ProxyObject::getConstructData):
        (JSC::ProxyObject::performDelete):
        (JSC::ProxyObject::performPreventExtensions):
        (JSC::ProxyObject::performIsExtensible):
        (JSC::ProxyObject::performDefineOwnProperty):
        (JSC::ProxyObject::performGetOwnPropertyNames):
        (JSC::ProxyObject::performSetPrototype):
        (JSC::ProxyObject::performGetPrototype):
        * runtime/ProxyObject.h:
        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectConstruct):
        * runtime/SamplingProfiler.cpp:
        (JSC::SamplingProfiler::processUnverifiedStackTraces):
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::operationStringProtoFuncReplaceRegExpEmptyStr):
        (JSC::operationStringProtoFuncReplaceRegExpString):
        (JSC::replaceUsingStringSearch):
        * runtime/VM.cpp:
        (JSC::VM::callPromiseRejectionCallback):
        * runtime/WeakMapConstructor.cpp:
        (JSC::constructWeakMap):
        * runtime/WeakSetConstructor.cpp:
        (JSC::constructWeakSet):
        * tools/JSDollarVM.cpp:
        (JSC::callWithStackSizeProbeFunction):
        * wasm/js/WebAssemblyModuleRecord.cpp:
        (JSC::WebAssemblyModuleRecord::evaluate):
        * wasm/js/WebAssemblyWrapperFunction.cpp:
        (JSC::callWebAssemblyWrapperFunction):

2020-04-26  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] Clearly distinguish isConstructor from getConstructData
        https://bugs.webkit.org/show_bug.cgi?id=211053

        Reviewed by Sam Weinig.

        Follow-up to r260722. Remove the isConstructor overload that duplicates getConstructData
        and clearly distinguish the usage of these two functions.

        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isConstructor):
        Remove isConstructor overload.

        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::create):
        Don't use getConstructData if you don't need ConstructData.

        * runtime/ReflectObject.cpp:
        (JSC::reflectObjectConstruct):
        Use getConstructData if you need ConstructData.

        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        Use isFunction (leftover spot from last patch).

2020-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        Symbol should have [[Construct]] internal method
        https://bugs.webkit.org/show_bug.cgi?id=211050

        Reviewed by Yusuke Suzuki.

        This change introduces constructSymbol() method, which unconditionally throws
        a TypeError, since its presence is observable when, for example, Symbol is a
        [[ProxyTarget]] itself [1]. Aligns JSC with the spec [2], V8, and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-proxycreate (step 7.b)
        [2]: https://tc39.es/ecma262/#constructor

        * runtime/SymbolConstructor.cpp:
        (JSC::SymbolConstructor::SymbolConstructor):
        (JSC::constructSymbol):

2020-04-26  Alexey Shvayka  <shvaikalesh@gmail.com>

        InternalFunction::createSubclassStructure should use newTarget's globalObject
        https://bugs.webkit.org/show_bug.cgi?id=202599

        Reviewed by Yusuke Suzuki.

        If "prototype" of NewTarget is not an object, built-in constructors [1] should acquire
        default [[Prototype]] from realm of NewTarget, utilizing GetFunctionRealm helper [2].
        Before this change, realm of active constructor was used instead. This patch introduces
        GetFunctionRealm and aligns all subclassable constructors with the spec, V8, and SpiderMonkey.

        This change inlines fast paths checks of InternalFunction::createSubclassStructure() and
        simplifies its signature; getFunctionRealm() is invoked in slow paths only.

        While a dynamically created function uses NewTarget's realm for its default [[Prototype]]
        similar to other built-ins, its "prototype" object inherit from ObjectPrototype
        of active constructor's realm [3] (just like their scope), making it retain references
        to 2 different global objects. To accomodate this behavior, this change introduces
        `scopeGlobalObject` in JSFunction.cpp methods.

        Above-mentioned behavior also simplifies creation of JSGenerator and JSAsyncGenerator
        instances since NewTarget's realm is irrelevant to them.

        IntlCollatorConstructor::collatorStructure() and 6 similar methods are removed:
        a) to impose good practice of using newTarget's globalObject;
        b) with this change, each of them have 1 call site max;
        c) other JSC constructors have no methods alike.

        [1]: https://tc39.es/ecma262/#sec-map-constructor (step 2)
        [2]: https://tc39.es/ecma262/#sec-getfunctionrealm
        [3]: https://tc39.es/ecma262/#sec-createdynamicfunction (steps 23-25)

        * dfg/DFGOperations.cpp:
        * runtime/AggregateErrorConstructor.cpp:
        (JSC::callAggregateErrorConstructor):
        (JSC::constructAggregateErrorConstructor):
        * runtime/AggregateErrorConstructor.h:
        * runtime/AsyncFunctionConstructor.cpp:
        (JSC::constructAsyncFunctionConstructor):
        * runtime/AsyncGeneratorFunctionConstructor.cpp:
        (JSC::constructAsyncGeneratorFunctionConstructor):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructWithBooleanConstructor):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        (JSC::createInternalFieldObject):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/ErrorConstructor.cpp:
        (JSC::constructErrorConstructor):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::createSubclassStructure):
        (JSC::getFunctionRealm):
        (JSC::InternalFunction::createSubclassStructureSlow): Deleted.
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createSubclassStructure): Deleted.
        * runtime/IntlCollatorConstructor.cpp:
        (JSC::constructIntlCollator):
        (JSC::callIntlCollator):
        * runtime/IntlCollatorConstructor.h:
        * runtime/IntlDateTimeFormatConstructor.cpp:
        (JSC::constructIntlDateTimeFormat):
        (JSC::callIntlDateTimeFormat):
        * runtime/IntlDateTimeFormatConstructor.h:
        * runtime/IntlNumberFormatConstructor.cpp:
        (JSC::constructIntlNumberFormat):
        (JSC::callIntlNumberFormat):
        * runtime/IntlNumberFormatConstructor.h:
        * runtime/IntlPluralRulesConstructor.cpp:
        (JSC::constructIntlPluralRules):
        * runtime/IntlPluralRulesConstructor.h:
        * runtime/IntlRelativeTimeFormatConstructor.cpp:
        (JSC::constructIntlRelativeTimeFormat):
        * runtime/IntlRelativeTimeFormatConstructor.h:
        * runtime/JSArrayBufferConstructor.cpp:
        (JSC::JSGenericArrayBufferConstructor<sharingMode>::constructArrayBuffer):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::prototypeForConstruction):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGenericTypedArrayViewConstructorInlines.h:
        (JSC::constructGenericTypedArrayView):
        * runtime/JSGlobalObjectInlines.h:
        (JSC::JSGlobalObject::arrayStructureForIndexingTypeDuringAllocation const):
        * runtime/MapConstructor.cpp:
        (JSC::constructMap):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor<errorType>::constructNativeErrorConstructor):
        (JSC::NativeErrorConstructor<errorType>::callNativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        (JSC::constructNumberConstructor):
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObjectWithNewTarget):
        * runtime/RegExpConstructor.cpp:
        (JSC::getRegExpStructure):
        (JSC::constructRegExp):
        (JSC::esSpecRegExpCreate):
        * runtime/RegExpConstructor.h:
        * runtime/SetConstructor.cpp:
        (JSC::constructSet):
        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        * runtime/WeakMapConstructor.cpp:
        (JSC::constructWeakMap):
        * runtime/WeakObjectRefConstructor.cpp:
        (JSC::constructWeakRef):
        * runtime/WeakSetConstructor.cpp:
        (JSC::constructWeakSet):
        * wasm/js/WebAssemblyCompileErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyCompileError):
        * wasm/js/WebAssemblyInstanceConstructor.cpp:
        (JSC::constructJSWebAssemblyInstance):
        * wasm/js/WebAssemblyLinkErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyLinkError):
        * wasm/js/WebAssemblyModuleConstructor.cpp:
        (JSC::WebAssemblyModuleConstructor::createModule):
        * wasm/js/WebAssemblyRuntimeErrorConstructor.cpp:
        (JSC::constructJSWebAssemblyRuntimeError):

2020-04-26  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] ValueAdd, VaueSub, ValueMul, Inc, Dec should say SpecBigInt32 prediction based on ArithProfile
        https://bugs.webkit.org/show_bug.cgi?id=211038

        Reviewed by Filip Pizlo.

        This patch adds profile feedback to ValueAdd, ValueSub, ValueMul, Inc, Dec to say SpecBigInt32 prediction.

        Our HeapBigInt v.s. BigInt32 strategy is simpler than Double v.s. Int32 strategy: we always
        prefer BigInt32 over HeapBigInt. This is because HeapBigInt calculation and conversion require
        much higher cost than BigInt32. This tradeoff is largely different from Double v.s. Int32.
        So keeping HeapBigInt is simply inefficient when we can use BigInt32.

        This means that ArithProfile's feedback is also very simple. If we see HeapBigInt, this means
        overflow happens. In DFG, we propagate this information to ValueAdd, ValueSub, and ValueMul nodes
        and record it in DFGNodeFlags. And based on this information, we change the prediction and
        speculation in prediction propagation and fixup phase.

        We change exit reason from Overflow to BigInt32Overflow since Overflow is solely used for Int32 case,
        and we have Int52Overflow for Int52 case. We should have BigInt32Overflow for BigInt32 to precisely
        record and tell about what happens in DFG as a feedback for the next compilation.

        We add BigInt32 speculation for ValueSub. Previously, we missed that in fixup phase and we always
        speculate ValueSub with AnyBigIntUse or HeapBigIntUse. Now it can use BigInt32Use.

        We also fix Inc / Dec's fixup phase to use BigInt path. Previously, it was always using UntypedUse since
        `node->child1()->shouldSpeculateUntypedForArithmetic()` returns true for BigInt. We fix the ordering of
        speculation attempts as it is done in the other places in fixup phase.

        This patch offers 7.9% performance improvement in sunspider-sha1-big-int.

                                               ToT                     Patched

            sunspider-sha1-big-int      134.5668+-2.8695     ^    124.6743+-0.7541        ^ definitely 1.0793x faster

        * bytecode/ExitKind.cpp:
        (JSC::exitKindToString):
        * bytecode/ExitKind.h:
        * bytecode/SpeculatedType.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::binaryArithShouldSpeculateBigInt32):
        (JSC::DFG::Graph::unaryArithShouldSpeculateBigInt32):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::mayHaveBigInt32Result):
        (JSC::DFG::Node::mayHaveHeapBigIntResult):
        (JSC::DFG::Node::mayHaveBigIntResult):
        (JSC::DFG::Node::canSpeculateBigInt32):
        (JSC::DFG::Node::canSpeculateInt52):
        * dfg/DFGNodeFlags.cpp:
        (JSC::DFG::dumpNodeFlags):
        * dfg/DFGNodeFlags.h:
        (JSC::DFG::nodeMayHaveHeapBigInt):
        (JSC::DFG::nodeCanSpeculateBigInt32):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileValueDiv):
        (JSC::DFG::SpeculativeJIT::speculateHeapBigInt):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv):

2020-04-25  Ross Kirsling  <ross.kirsling@sony.com>

        [JSC] isCallable is redundant with isFunction
        https://bugs.webkit.org/show_bug.cgi?id=211037

        Reviewed by Yusuke Suzuki.

        isCallable is only being used in two places and has the same definition as isFunction (aside from out params).
        Where CallData is needed, getCallData should be used; where CallData is not needed, isFunction should be used.

        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::isCallable const): Deleted.
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isCallable): Deleted.
        Remove isCallable.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        Use getCallData if you need CallData.

        * runtime/ExceptionHelpers.cpp:
        (JSC::errorDescriptionForValue):
        * runtime/ObjectConstructor.cpp:
        (JSC::toPropertyDescriptor):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        Don't use getCallData if you don't need CallData. 

2020-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Handle BigInt32 INT32_MIN shift amount
        https://bugs.webkit.org/show_bug.cgi?id=211030

        Reviewed by Darin Adler.

        Our BigInt shift-operation does not correctly handle INT32_MIN shift amount, and producing a wrong result.
        This patch fixes it.

        * runtime/Operations.h:
        (JSC::shift):

2020-04-25  Darin Adler  <darin@apple.com>

        [Cocoa] Deal with another round of Xcode upgrade checks
        https://bugs.webkit.org/show_bug.cgi?id=211027

        Reviewed by Alexey Proskuryakov.

        * JavaScriptCore.xcodeproj/project.pbxproj: Bump the upgrade check version.
        Add a harmless base localization; this project contains nothing localized.

2020-04-25  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Add fast path for BigInt32 left-shift
        https://bugs.webkit.org/show_bug.cgi?id=211029

        Reviewed by Saam Barati.

        Currently, the left-shift operation misses the fast path for BigInt32 <> BigInt32 case. This patch adds it. We also fixes
        prediction-propagation for left/right shift to use existing heap prediction instead of polluting the result with SpecBigInt.
        This offer 4.5% improvement in microbenchmarks/sunspider-sha1-big-int.js.

        * dfg/DFGPredictionPropagationPhase.cpp:
        * runtime/Operations.h:
        (JSC::shift):

2020-04-25  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed fix for JSC Debug tests following r210853.

        * runtime/IntlObject.cpp:
        (JSC::canonicalizeLanguageTag):
        (JSC::canonicalizeLocaleList):
        (JSC::defaultLocale):
        Deal with unchecked exception by moving tryGetUtf8 call out of canonicalizeLanguageTag; it's meant to
        verify the user input from canonicalizeLocaleList and needn't change the noexcept-ness of defaultLocale.

2020-04-25  Alex Christensen  <achristensen@webkit.org>

        Prepare to remove automatic URL->String conversion operators
        https://bugs.webkit.org/show_bug.cgi?id=211007

        Reviewed by Darin Adler.

        * API/JSAPIGlobalObject.mm:
        (JSC::JSAPIGlobalObject::moduleLoaderResolve):
        (JSC::JSAPIGlobalObject::moduleLoaderImportModule):
        * API/JSScript.mm:
        (validateBytecodeCachePath):
        (+[JSScript scriptOfType:memoryMappedFromASCIIFile:withSourceURL:andBytecodeCache:inVirtualMachine:error:]):
        * inspector/ScriptDebugServer.cpp:
        (Inspector::ScriptDebugServer::sourceParsed):
        * parser/Nodes.h:
        (JSC::ScopeNode::sourceURL const):
        * runtime/CachedTypes.cpp:
        (JSC::CachedSourceProviderShape::encode):
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/ScriptExecutable.h:
        (JSC::ScriptExecutable::sourceURL const):

2020-04-25  Ross Kirsling  <ross.kirsling@sony.com>

        [Intl] Locale validation/canonicalization should defer to ICU
        https://bugs.webkit.org/show_bug.cgi?id=210853

        Reviewed by Darin Adler.

        The mappings for locale canonicalization in latest CLDR are sufficiently complex
        that it really no longer makes sense not to have ICU do this work for us.

        This means the UTS 35 canonicalization desired by ECMA-402 will not be fully achievable until ICU ~67,
        but it's better than reaching right into CLDR and pretending that we *are* ICU.
        (On this point, we thus align with V8 and diverge from SM.)

        Of course, we can still add our own pre-validations / post-canonicalizations if desired.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Scripts/generateIntlCanonicalizeLanguage.py: Removed.
        * runtime/IntlObject.cpp:
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):
        (JSC::canonicalizeLanguageTag):
        (JSC::canonicalizeLocaleList):
        (JSC::defaultLocale):
        (JSC::removeUnicodeLocaleExtension):
        (JSC::addMissingScriptLocales): Deleted. This one was ostensibly a fix for an old ICU bug.
        (JSC::privateUseLangTag): Deleted.
        (JSC::preferredLanguage): Deleted.
        (JSC::preferredRegion): Deleted.
        (JSC::canonicalLangTag): Deleted.
        * ucd/language-subtag-registry.txt: Removed.

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Fix internal build by using strcmp instead of using string literal comparison
        https://bugs.webkit.org/show_bug.cgi?id=211011

        Reviewed by Keith Miller.

        Use strcmp for string literal comparison to expect that this is fully handled by compiler and converted into constant at compile time.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):

2020-04-24  Mark Lam  <mark.lam@apple.com>

        Suppress ASan on DFG::clobberize() to work around an ASan bug.
        https://bugs.webkit.org/show_bug.cgi?id=211012
        <rdar://problem/62275430>

        Reviewed by Yusuke Suzuki.

        ASan was incorrectly thinking that we're accessing invalid stack memory when we're not.

        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):

2020-04-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        Fix WASM Error classes and re-sync wpt/wasm/jsapi from upstream
        https://bugs.webkit.org/show_bug.cgi?id=210980

        Reviewed by Keith Miller.

        assert_throws_js() harness, which is extensively used by wpt/wasm/jsapi tests,
        was recently updated to assert that passed constructors subclass Error in
        spec-perfect way.

        With this patch, WebAssembly errors have Error as [[Prototype]] of their constructors
        and define correct "name" and "message" properties on their prototypes, aligning JSC
        with the spec [1], V8 and SpiderMonkey.

        [1]: https://webassembly.github.io/spec/js-api/#error-objects

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * wasm/js/WebAssemblyCompileErrorPrototype.cpp:
        (JSC::WebAssemblyCompileErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyLinkErrorPrototype.cpp:
        (JSC::WebAssemblyLinkErrorPrototype::finishCreation):
        * wasm/js/WebAssemblyRuntimeErrorPrototype.cpp:
        (JSC::WebAssemblyRuntimeErrorPrototype::finishCreation):

2020-04-24  Saam Barati  <sbarati@apple.com>

        Return BigInt32 whenever we can
        https://bugs.webkit.org/show_bug.cgi?id=210922

        Reviewed by Yusuke Suzuki.

        This patch makes it so our runtime functions for big int math on heap
        big ints converts the result to a big int 32 when possible.
        
        The inspiration for this patch came from converting SunSpider's sha1 benchmark to
        using big ints. I found that that original implementation of big int 32
        was a ~35% slowdown here. This patch speeds it up by 86% from ToT, and
        36% faster than before big int 32 was introduced.
        
        To make this sound in the DFG/FTL, we are currently reporting that all
        HeapBigInt math ops return SpecBigInt, instead of SpecHeapBigInt.
        However, we want to do better in a follow up. We need some kind of profiling
        system where we determine if we should speculate if the result is big int
        32, a heap big int, or both:
        https://bugs.webkit.org/show_bug.cgi?id=210982

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueBitNot):
        (JSC::DFG::SpeculativeJIT::compileValueBitwiseOp):
        (JSC::DFG::SpeculativeJIT::compileValueLShiftOp):
        (JSC::DFG::SpeculativeJIT::compileValueBitRShift):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileValueDiv):
        (JSC::DFG::SpeculativeJIT::compileValueMod):
        (JSC::DFG::SpeculativeJIT::compileValuePow):
        * jit/JITOperations.cpp:
        * jsc.cpp:
        (functionCreateBigInt32):
        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::callBigIntConstructor):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::exponentiateHeap):
        (JSC::JSBigInt::multiplyHeap):
        (JSC::JSBigInt::divideHeap):
        (JSC::JSBigInt::unaryMinusHeap):
        (JSC::JSBigInt::remainderHeap):
        (JSC::JSBigInt::incHeap):
        (JSC::JSBigInt::decHeap):
        (JSC::JSBigInt::addHeap):
        (JSC::JSBigInt::subHeap):
        (JSC::JSBigInt::bitwiseAndHeap):
        (JSC::JSBigInt::bitwiseOrHeap):
        (JSC::JSBigInt::bitwiseXorHeap):
        (JSC::JSBigInt::leftShiftHeap):
        (JSC::JSBigInt::signedRightShiftHeap):
        (JSC::JSBigInt::bitwiseNotHeap):
        (JSC::JSBigInt::absoluteAdd):
        (JSC::JSBigInt::absoluteSub):
        (JSC::JSBigInt::parseInt):
        (JSC::JSBigInt::exponentiate): Deleted.
        (JSC::JSBigInt::multiply): Deleted.
        (JSC::JSBigInt::divide): Deleted.
        (JSC::JSBigInt::unaryMinus): Deleted.
        (JSC::JSBigInt::remainder): Deleted.
        (JSC::JSBigInt::inc): Deleted.
        (JSC::JSBigInt::dec): Deleted.
        (JSC::JSBigInt::add): Deleted.
        (JSC::JSBigInt::sub): Deleted.
        (JSC::JSBigInt::bitwiseAnd): Deleted.
        (JSC::JSBigInt::bitwiseOr): Deleted.
        (JSC::JSBigInt::bitwiseXor): Deleted.
        (JSC::JSBigInt::leftShift): Deleted.
        (JSC::JSBigInt::signedRightShift): Deleted.
        (JSC::JSBigInt::bitwiseNot): Deleted.
        * runtime/JSBigInt.h:
        * runtime/JSCJSValue.h:
        (JSC::jsBigInt32):
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::JSValue):
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsSub):
        (JSC::jsMul):
        (JSC::jsDiv):
        (JSC::jsInc):
        (JSC::jsDec):
        (JSC::jsBitwiseNot):
        (JSC::shift):
        (JSC::bitwiseBinaryOp):

2020-04-24  Michael Catanzaro  <mcatanzaro@gnome.org>

        [GTK][WPE][JSCOnly] compile error when -DWTF_CPU_ARM64_CORTEXA53=ON set for arm64
        https://bugs.webkit.org/show_bug.cgi?id=197192

        Reviewed by Yusuke Suzuki.

        This workaround is supposed to fix WebKit on old Cortex A53 CPUs, but it has been broken
        since 2018, and people would like to use WebKit on modern Cortex A53. If anyone using WebKit
        on the original hardware wants to fix and reimplement the workaround, feel free.

        * assembler/ARM64Assembler.h:
        (JSC::ARM64Assembler::adrp):
        (JSC::ARM64Assembler::madd):
        (JSC::ARM64Assembler::msub):
        (JSC::ARM64Assembler::smaddl):
        (JSC::ARM64Assembler::smsubl):
        (JSC::ARM64Assembler::umaddl):
        (JSC::ARM64Assembler::umsubl):
        (JSC::ARM64Assembler::nopCortexA53Fix835769): Deleted.
        (JSC::ARM64Assembler::nopCortexA53Fix843419): Deleted.
        * offlineasm/arm64.rb:
        * offlineasm/instructions.rb:

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Fix DataFormatJSBigInt32 missing part
        https://bugs.webkit.org/show_bug.cgi?id=210986

        Reviewed by Mark Lam.

        Add missing part of DataFormatJSBigInt32 implementation.

        * bytecode/DataFormat.h:
        (JSC::dataFormatToString):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkGeneratedTypeForToInt32):

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix in Windows
        https://bugs.webkit.org/show_bug.cgi?id=210892

        Windows MSVC does not have proper understanding of IGNORE_RETURN_TYPE_WARNINGS_BEGIN.

        * runtime/JSBigInt.h:
        (JSC::invertBigIntCompareResult):

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG compare should speculate BigInt well
        https://bugs.webkit.org/show_bug.cgi?id=210892

        Reviewed by Saam Barati.

        Compare operations in DFG does not support BigInt related speculations. As a result, DFG fixup phase emits DoubleRep for operands, and
        causes OSR exit. This patch adds BigInt32, HeapBigInt, and AnyBigIntUse support to DFG compare operations to avoid OSR exits.
        We also introduce JSBigInt::compareToInt32 to avoid allocating JSBigInt only for comparison, and optimize C++ runtime for JSBigInt comparison.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::genericJSValueNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileBigInt32Compare):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compare):
        (JSC::FTL::DFG::LowerDFGToB3::genericJSValueCompare):
        (JSC::FTL::DFG::LowerDFGToB3::nonSpeculativeCompare): Deleted.
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::unboxBigInt32):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::compareToInt32):
        * runtime/JSBigInt.h:
        (JSC::swapBigIntCompareResult):
        * runtime/Operations.h:
        (JSC::compareBigInt):
        (JSC::compareBigInt32ToOtherPrimitive):
        (JSC::bigIntCompare):

2020-04-24  Alexey Shvayka  <shvaikalesh@gmail.com>

        Proxy.revocable should not have [[Construct]] slot
        https://bugs.webkit.org/show_bug.cgi?id=210959

        Reviewed by Darin Adler.

        This change removes proxyRevocableConstructorThrowError() since its presence is
        observable when, for example, Proxy.revocable is a [[ProxyTarget]] itself [1].
        Also removes unnecessary newTarget() check in constructProxyObject() and
        2 extra ArgList instances.

        This patch aligns JSC with the spec [2], V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-proxycreate (step 7.b)
        [2]: https://tc39.es/ecma262/#sec-ecmascript-standard-built-in-objects

        * runtime/ProxyConstructor.cpp:
        (JSC::makeRevocableProxy):
        (JSC::ProxyConstructor::finishCreation):
        (JSC::constructProxyObject):
        (JSC::proxyRevocableConstructorThrowError): Deleted.

2020-04-24  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] DFG AI for some bitops + BigInt32 should be precise
        https://bugs.webkit.org/show_bug.cgi?id=210956

        Reviewed by Keith Miller.

        Use SpecBigInt32 for ValueBitXor, ValueBitAnd, and ValueBitOr since they are always producing BigInt32 and they have inlined implementations in DFG / FTL.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-04-23  Alexey Shvayka  <shvaikalesh@gmail.com>

        Remove revoked Proxy checks from ProxyCreate
        https://bugs.webkit.org/show_bug.cgi?id=210862

        Reviewed by Ross Kirsling.

        This change removes revoked Proxy checks from ProxyCreate [1], implementing
        https://github.com/tc39/ecma262/pull/1814 and aligning JSC with SpiderMonkey.
        Also cleans up ProxyObject creation by using isFunction() instead of
        isCallable(), which are identical.

        [1]: https://tc39.es/ecma262/#sec-proxycreate (steps 2, 4)

        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::structureForTarget):
        (JSC::ProxyObject::finishCreation):

2020-04-22  Keith Miller  <keith_miller@apple.com>

        Fix OSR exiting/iterator object checks in for-of bytecodes
        https://bugs.webkit.org/show_bug.cgi?id=210882

        Reviewed by Saam Barati.

        This patch fixes some bugs in the DFGBytecodeParser where we would
        set the exit origin for the SetLocal following the iterator_open/next
        first call to the next bytecode. This meant that if out-of-line
        Symbol.iterator or next functions returned an unexpected non-cell
        we would OSR past the rest of the next bytecode rather than to the
        first checkpoint.

        This patch also makes sure we properly throw for non-objects returned
        from either of the above functions in all tiers (and adds tests).

        Finally, this patch makes a small optimization where we just ArithBitOr the
        iterator's closed state (index == -1) and index is out of bounds. We can't
        do a CompareBelow check because the index is effectively an int33_t.

        * bytecode/BytecodeIndex.h:
        (JSC::BytecodeIndex::withCheckpoint const):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::nextOpcodeIndex const):
        (JSC::DFG::ByteCodeParser::nextCheckpoint const):
        (JSC::DFG::ByteCodeParser::progressToNextCheckpoint):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleCallVariant):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::handlePutById):
        (JSC::DFG::ByteCodeParser::parseGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        * jit/JITCall.cpp:
        (JSC::JIT::emitSlow_op_iterator_open):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::handleIteratorNextCheckpoint):

2020-04-22  Darin Adler  <darin@apple.com>

        [Cocoa] Build with UChar as char16_t even in builds that use Apple's internal SDK
        https://bugs.webkit.org/show_bug.cgi?id=210845

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig: Move ICU-configuring macros to Platform.h.

2020-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] branchIfBigInt32 can use BigInt32Mask and remove branchIfNumber filter
        https://bugs.webkit.org/show_bug.cgi?id=210870

        Reviewed by Saam Barati.

        By using BigInt32Mask, we can detect BigInt32 without filtering Numbers. In this patch,

        1. Remove branchIfBigInt32KnownNotNumber and branchIfNotBigInt32KnownNotNumber. And always use branchBigInt32 and branchNotBigInt32 instead.
        2. Remove branchIfNumber type filtering in DFG.
        3. Use BigInt32Mask based scheme in FTL.
        4. Add and64(TrustedImm64, RegisterID) implementations in MacroAssembler.
        5. Add TagRegistersMode version in branchIfBigInt. We use numberTagRegister to produce really efficient code[1] by avoiding large constant materialization.

        [1]: From
                mov %rax, %rdx
                mov $0xfffe000000000012, %r11
                and %r11, %rdx
                cmp $0x12, %rdx
             To
                lea 0x12(%r14), %rdx
                and %rax, %rdx
                cmp $0x12, %rdx

        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::and64):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::and64):
        * bytecode/ArithProfile.cpp:
        (JSC::ArithProfile<BitfieldType>::emitObserveResult):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateBigInt32):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileToNumeric):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::lowBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNotAnyBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::speculateBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::speculateAnyBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32KnownNotCell): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32KnownNotNumber): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt32KnownNotNumber): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isNotAnyBigIntKnownNotNumber): Deleted.
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfBigInt32):
        (JSC::AssemblyHelpers::branchIfNotBigInt32):
        (JSC::AssemblyHelpers::emitTypeOf):
        (JSC::AssemblyHelpers::branchIfBigInt32KnownNotNumber): Deleted.
        (JSC::AssemblyHelpers::branchIfNotBigInt32KnownNotNumber): Deleted.

2020-04-22  Saam Barati  <sbarati@apple.com>

        BigInt32 parsing should be precise
        https://bugs.webkit.org/show_bug.cgi?id=210869

        Reviewed by Robin Morisset.

        Our algorithm before was conservative, and might produce a heap big int even
        if the value could be an int32. This patch makes the algorithm precise on
        64-bit, always producing a bigint32 if the number is indeed an int32.

        * jsc.cpp:
        (functionUseBigInt32):
        (functionIsBigInt32):
        (functionIsHeapBigInt):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::parseInt):

2020-04-22  Saam Barati  <sbarati@apple.com>

        Edge use kind asserts are wrong for BigInt32 on ValueBitLShift
        https://bugs.webkit.org/show_bug.cgi?id=210872

        Reviewed by Yusuke Suzuki, Mark Lam, and Robin Morisset.

        This is already covered by the v8 tests Yusuke checked in.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitUntypedOrAnyBigIntBitOp):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinaryBitOpSnippet):

2020-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] JSBigInt inc operation does not produce right HeapBigInt zero
        https://bugs.webkit.org/show_bug.cgi?id=210860

        Reviewed by Mark Lam.

        JSBigInt::inc can produce signed HeapBigInt zero, which is not meeting the invariant of JSBigInt.
        This patch fixes it by checking zero status before setting `setSign(true)`.

        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::inc):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::dumpInContextAssumingStructure const):

2020-04-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: Step Over should only step through comma expressions if they are comma statements
        https://bugs.webkit.org/show_bug.cgi?id=210588

        Reviewed by Brian Burg.

        * parser/Nodes.h:
        (JSC::ExpressionNode::isStatement const): Added.
        (JSC::ExpressionNode::setIsStatement): Added.
        * parser/NodeConstructors.h:
        (JSC::ExprStatementNode::ExprStatementNode):
        (JSC::DeclarationStatement::DeclarationStatement):
        (JSC::ReturnNode::ReturnNode):
        (JSC::ThrowNode::ThrowNode):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::CommaNode::emitBytecode):
        Only emit `WillExecuteStatement` debug hooks inside `CommaNode` if it's the only child of a
        statement parent node (e.g. `a(), b(), c()` vs `true && (a(), b(), c()) && true`).

        * parser/Parser.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseReturnStatement):
        (JSC::Parser<LexerType>::parseThrowStatement):
        (JSC::Parser<LexerType>::parseExpressionOrLabelStatement):
        (JSC::Parser<LexerType>::parseExpressionStatement):
        (JSC::Parser<LexerType>::parseExpression):
        Only record a pause location for each sub-expression in a comma separated expression if it's
        the only child of a statement (e.g. `a(), b(), c()` vs `true && (a(), b(), c()) && true`).

2020-04-22  Saam Barati  <sbarati@apple.com>

        ValueBitNot is wrong in FTL with AnyBigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=210846

        Reviewed by Yusuke Suzuki.

        We forgot to speculate.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):

2020-04-22  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] AI results of BigInt32 Bitwise shift operation does not match to runtime results
        https://bugs.webkit.org/show_bug.cgi?id=210839

        Reviewed by Saam Barati.

        While runtime function of bitwise ops with BigInt32 sometimes returns HeapBigInt, DFG AI is setting SpecBigInt32
        as a result value. This leads to miscompilation particularly in FTL since FTL uses this information to remove
        a lot of branches.

        And we found that FTL BigInt32 predicate is not correctly checking state. This patch fixes it too.

        Added test case found this (v8-bigint32-sar.js).

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileToNumeric):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::lowBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32KnownNotCell):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32KnownNotNumber):
        (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt32KnownNotNumber):
        (JSC::FTL::DFG::LowerDFGToB3::isNotAnyBigIntKnownNotNumber):
        (JSC::FTL::DFG::LowerDFGToB3::isNotHeapBigIntUnknownWhetherCell):
        (JSC::FTL::DFG::LowerDFGToB3::speculateBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::speculateAnyBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt32): Deleted.
        (JSC::FTL::DFG::LowerDFGToB3::isNotAnyBigInt): Deleted.

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for watchOS
        https://bugs.webkit.org/show_bug.cgi?id=210832

        If function is not defined, static declaration should not be declared, otherwise, unused-function-error happens.

        * jsc.cpp:

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewd, speculative Windows build fix part 2
        https://bugs.webkit.org/show_bug.cgi?id=210834

        * runtime/Options.cpp:
        (JSC::strncasecmp):

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, fix windows build failure
        https://bugs.webkit.org/show_bug.cgi?id=210834

        * runtime/Options.cpp:
        (JSC::strncasecmp):

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq should expect AnyBigIntUse
        https://bugs.webkit.org/show_bug.cgi?id=210832

        Reviewed by Mark Lam.

        SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq will get AnyBigIntUse now. We should use ManualOperandSpeculation
        and speculate function to perform speculation check.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        * jsc.cpp:
        (functionCreateHeapBigInt):
        (functionCreateBigInt32):
        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::callBigIntConstructor):
        * runtime/BigIntConstructor.h:
        * runtime/JSBigInt.h:

2020-04-21  Yusuke Suzuki  <ysuzuki@apple.com>

        Canonicalize JSBigInt generated by structured-cloning by calling rightTrim
        https://bugs.webkit.org/show_bug.cgi?id=210816

        Reviewed by Keith Miller and Darin Adler.

        * runtime/JSBigInt.h:

2020-04-21  Peng Liu  <peng.liu6@apple.com>

        Fix MACCATALYST build failures
        https://bugs.webkit.org/show_bug.cgi?id=210815

        Reviewed by Tim Horton.

        * Configurations/FeatureDefines.xcconfig:

2020-04-21  Keith Miller  <keith_miller@apple.com>

        JSC's options should be case insensitive
        https://bugs.webkit.org/show_bug.cgi?id=210834

        Reviewed by Yusuke Suzuki.

        * runtime/Options.cpp:
        (JSC::Options::setOptionWithoutAlias):
        (JSC::Options::setAliasedOption):
        * runtime/OptionsList.h:

2020-04-21  Alexey Shvayka  <shvaikalesh@gmail.com>

        constructObjectFromPropertyDescriptor() is incorrect with partial descriptors
        https://bugs.webkit.org/show_bug.cgi?id=184629

        Reviewed by Ross Kirsling.

        Before this change, constructObjectFromPropertyDescriptor() serialized a value-only descriptor
        with nullish m_seenAttributes to {value, writable: false, enumerable: false, configurable: false}
        instead of just {value}. This was observable when ordinarySetSlow() was called on a Proxy
        `receiver` with "defineProperty" trap.

        This patch makes constructObjectFromPropertyDescriptor() 1:1 with the spec [2], aligning JSC
        with V8 and SpiderMonkey, and also cleans up its call sites from handling exceptions and
        `undefined` value returns.

        [1]: https://tc39.es/ecma262/#sec-ordinarysetwithowndescriptor (step 3.d.iv)
        [2]: https://tc39.es/ecma262/#sec-frompropertydescriptor

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyDescriptors):
        * runtime/ObjectConstructor.h:
        (JSC::constructObjectFromPropertyDescriptor):
        * runtime/ProxyObject.cpp:
        (JSC::ProxyObject::performDefineOwnProperty):

2020-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        Check Structure attributes in Object.assign exhaustively
        https://bugs.webkit.org/show_bug.cgi?id=210782
        <rdar://problem/62065853>

        Reviewed by Mark Lam.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorAssign):

2020-04-21  Adrian Perez de Castro  <aperez@igalia.com>

        Non-unified build fixes late February 2020 edition
        https://bugs.webkit.org/show_bug.cgi?id=210767

        Unreviewed build fix.

        * dfg/DFGValueRepReductionPhase.cpp: Add missing JSCJSValueInlines.h header.
        * jit/JITCall.cpp: Add missing SlowPathCall.h header.
        * runtime/AggregateError.cpp: Add missing JSCJSValueInlines.h, JSCellInlines.h, and
        JSGlobalObjectInlines.h headers.
        * runtime/AggregateErrorConstructor.cpp: Added missing JSCJSValueInlines.h, JSCellInlines.h,
        and VMInlines.h headers.
        * runtime/AggregateErrorPrototype.cpp: Added missing AggregateError.h, IdentifierInlines.h,
        JSCJSValueInlines.h, JSCellInlines.h, JSGlobalObjectInlines.h, and VMInlines.h headers.
        * runtime/Intrinsic.h: Added missing wtf/Optional.h header.

2020-04-20  Ross Kirsling  <ross.kirsling@sony.com>

        Classes marked final should not use protected access specifier
        https://bugs.webkit.org/show_bug.cgi?id=210775

        Reviewed by Daniel Bates.

        * API/JSAPIValueWrapper.h:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * b3/B3ExtractValue.h:
        * bytecode/UnlinkedFunctionExecutable.h:
        * inspector/JSGlobalObjectConsoleClient.h:
        * inspector/JSInjectedScriptHost.h:
        * inspector/JSJavaScriptCallFrame.h:
        * jsc.cpp:
        * runtime/AggregateError.h:
        * runtime/AggregateErrorPrototype.h:
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.h:
        * runtime/AsyncFunctionPrototype.h:
        * runtime/AsyncGeneratorFunctionPrototype.h:
        * runtime/AtomicsObject.h:
        * runtime/BigIntConstructor.h:
        * runtime/BigIntObject.h:
        * runtime/BigIntPrototype.h:
        * runtime/BooleanConstructor.h:
        * runtime/BooleanPrototype.h:
        * runtime/ConsoleObject.h:
        * runtime/DateConstructor.h:
        * runtime/DatePrototype.h:
        * runtime/ErrorConstructor.h:
        * runtime/ErrorPrototype.h:
        * runtime/FileBasedFuzzerAgent.h:
        * runtime/FunctionPrototype.h:
        * runtime/FunctionRareData.h:
        * runtime/GeneratorFunctionPrototype.h:
        * runtime/GenericTypedArrayView.h:
        * runtime/InspectorInstrumentationObject.h:
        * runtime/IntlCollator.h:
        * runtime/IntlCollatorConstructor.h:
        * runtime/IntlCollatorPrototype.h:
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlDateTimeFormatConstructor.h:
        * runtime/IntlDateTimeFormatPrototype.h:
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatConstructor.h:
        * runtime/IntlNumberFormatPrototype.h:
        * runtime/IntlPluralRules.h:
        * runtime/IntlPluralRulesConstructor.h:
        * runtime/IntlPluralRulesPrototype.h:
        * runtime/IntlRelativeTimeFormatConstructor.h:
        * runtime/IntlRelativeTimeFormatPrototype.h:
        * runtime/JSArrayBuffer.h:
        * runtime/JSArrayBufferConstructor.h:
        * runtime/JSArrayBufferPrototype.h:
        * runtime/JSAsyncGenerator.h:
        * runtime/JSBoundFunction.h:
        * runtime/JSCustomGetterSetterFunction.h:
        * runtime/JSDataView.h:
        * runtime/JSDataViewPrototype.h:
        * runtime/JSGenerator.h:
        * runtime/JSGenericTypedArrayView.h:
        * runtime/JSGenericTypedArrayViewConstructor.h:
        * runtime/JSGenericTypedArrayViewPrototype.h:
        * runtime/JSGlobalLexicalEnvironment.h:
        * runtime/JSModuleLoader.h:
        * runtime/JSModuleNamespaceObject.h:
        * runtime/JSNativeStdFunction.h:
        * runtime/JSONObject.h:
        * runtime/JSObject.h:
        * runtime/JSTemplateObjectDescriptor.h:
        * runtime/JSTypedArrayViewConstructor.h:
        * runtime/JSTypedArrayViewPrototype.h:
        * runtime/MathObject.h:
        * runtime/NativeExecutable.h:
        * runtime/NumberConstructor.h:
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.h:
        * runtime/PredictionFileCreatingFuzzerAgent.h:
        * runtime/ReflectObject.h:
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.h:
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.h:
        * runtime/StringPrototype.h:
        * runtime/Structure.h:
        * runtime/Symbol.h:
        * runtime/SymbolConstructor.h:
        * runtime/SymbolObject.h:
        * runtime/SymbolPrototype.h:
        * runtime/VMTraps.cpp:
        * testRegExp.cpp:
        * wasm/WasmBBQPlan.h:
        * wasm/WasmLLIntPlan.h:
        * wasm/WasmWorklist.cpp:
        * wasm/js/JSWebAssembly.h:
        * wasm/js/JSWebAssemblyCompileError.h:
        * wasm/js/JSWebAssemblyInstance.h:
        * wasm/js/JSWebAssemblyLinkError.h:
        * wasm/js/JSWebAssemblyRuntimeError.h:
        * wasm/js/WebAssemblyCompileErrorConstructor.h:
        * wasm/js/WebAssemblyCompileErrorPrototype.h:
        * wasm/js/WebAssemblyGlobalConstructor.h:
        * wasm/js/WebAssemblyGlobalPrototype.h:
        * wasm/js/WebAssemblyInstanceConstructor.h:
        * wasm/js/WebAssemblyInstancePrototype.h:
        * wasm/js/WebAssemblyLinkErrorConstructor.h:
        * wasm/js/WebAssemblyLinkErrorPrototype.h:
        * wasm/js/WebAssemblyMemoryConstructor.h:
        * wasm/js/WebAssemblyMemoryPrototype.h:
        * wasm/js/WebAssemblyModuleConstructor.h:
        * wasm/js/WebAssemblyModulePrototype.h:
        * wasm/js/WebAssemblyRuntimeErrorConstructor.h:
        * wasm/js/WebAssemblyRuntimeErrorPrototype.h:
        * wasm/js/WebAssemblyTableConstructor.h:
        * wasm/js/WebAssemblyTablePrototype.h:
        * wasm/js/WebAssemblyWrapperFunction.h:

2020-04-20  Peng Liu  <peng.liu6@apple.com>

        Fix build failures when video fullscreen and picture-in-picture is disabled
        https://bugs.webkit.org/show_bug.cgi?id=210777

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2020-04-20  Ross Kirsling  <ross.kirsling@sony.com>

        Intl classes shouldn't need an m_initialized* field
        https://bugs.webkit.org/show_bug.cgi?id=210764

        Reviewed by Darin Adler.

        Existing Intl classes each have a field like m_initializedNumberFormat, but this is unnecessary on two levels:
          1. The thing that gets initialized is a unique pointer to an ICU struct, so we can check it directly.
          2. Everywhere we're checking this is redundant since we've already done the same check on the prototype side,
             therefore we can just ASSERT before using said ICU struct.

        While we're at it, clean up other stuff like:
          - Move stuff that doesn't need to be part of the class to the CPP file (e.g. UFieldPositionIteratorDeleter).
          - Merge createCollator into initializeCollator (seems like this is probably the oldest code in this space).

        * runtime/IntlCollator.cpp:
        (JSC::IntlCollator::initializeCollator):
        (JSC::IntlCollator::compareStrings):
        (JSC::IntlCollator::resolvedOptions):
        (JSC::IntlCollator::createCollator): Deleted.
        * runtime/IntlCollator.h:
        * runtime/IntlDateTimeFormat.cpp:
        (JSC::UFieldPositionIteratorDeleter::operator() const):
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::resolvedOptions):
        (JSC::IntlDateTimeFormat::format):
        (JSC::partTypeString):
        (JSC::IntlDateTimeFormat::formatToParts):
        (JSC::IntlDateTimeFormat::UFieldPositionIteratorDeleter::operator() const): Deleted.
        (JSC::IntlDateTimeFormat::partTypeString): Deleted.
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlNumberFormat.cpp:
        (JSC::UFieldPositionIteratorDeleter::operator() const):
        (JSC::IntlNumberFormatField::IntlNumberFormatField):
        (JSC::IntlNumberFormat::initializeNumberFormat):
        (JSC::IntlNumberFormat::format):
        (JSC::IntlNumberFormat::resolvedOptions):
        (JSC::partTypeString):
        (JSC::IntlNumberFormat::formatToParts):
        (JSC::IntlNumberFormat::UFieldPositionIteratorDeleter::operator() const): Deleted.
        (JSC::IntlNumberFormat::partTypeString): Deleted.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlPluralRules.cpp:
        (JSC::localeData):
        (JSC::IntlPluralRules::initializePluralRules):
        (JSC::IntlPluralRules::resolvedOptions):
        (JSC::IntlPluralRules::select):
        (JSC::IntlPRInternal::localeData): Deleted.
        * runtime/IntlPluralRules.h:

2020-04-20  Keith Miller  <keith_miller@apple.com>

        FTL doesn't observe the use kind of CheckIsConstant's child1
        https://bugs.webkit.org/show_bug.cgi?id=210763

        Reviewed by Yusuke Suzuki.

        Somehow, this didn't get added when I changed CheckIsConstant and didn't show up
        when I tested r260377 because I tested in release. Fortunately, the produced
        DFG IR will be the same.

        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckIsConstant):

2020-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Skip test262 for non-safe-integer range BigIntConstructor
        https://bugs.webkit.org/show_bug.cgi?id=210749

        Reviewed by Keith Miller.

        * runtime/BigIntConstructor.cpp:
        (JSC::callBigIntConstructor):

2020-04-20  Keith Miller  <keith_miller@apple.com>

        Fix CheckIsConstant for non-constant values and checking for empty
        https://bugs.webkit.org/show_bug.cgi?id=210752

        Reviewed by Saam Barati.

        We need to make sure that we only have one speculated type if our value
        is empty.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):

2020-04-20  Darin Adler  <darin@apple.com>

        Use #import instead of #include in Objective-C and don't use #pragma once
        https://bugs.webkit.org/show_bug.cgi?id=210724

        Reviewed by David Kilzer.

        * API/JSAPIWrapperObject.mm:
        * API/JSContext.h:
        * API/JSContext.mm:
        * API/JSScriptInternal.h:
        * API/JSValue.mm:
        * API/JSVirtualMachine.mm:
        * API/JSVirtualMachinePrivate.h:
        * API/JSWrapperMap.mm:
        * API/ObjCCallbackFunction.mm:
        * API/tests/CurrentThisInsideBlockGetterTest.mm:
        More #import, less #pragma once.

2020-04-20  Yusuke Suzuki  <ysuzuki@apple.com>

        StructuredClone algorithm should be aware of BigInt
        https://bugs.webkit.org/show_bug.cgi?id=210728

        Reviewed by Mark Lam.

        * CMakeLists.txt:
        * runtime/BigIntObject.h:
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::digit): Deleted.
        (JSC::JSBigInt::setDigit): Deleted.
        * runtime/JSBigInt.h:
        (JSC::JSBigInt::digit):
        (JSC::JSBigInt::setDigit):

2020-04-19  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Intl.RelativeTimeFormat missing in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=209770

        Reviewed by Darin Adler.

        This patch implements the recent ECMA-402 feature Intl.RelativeTimeFormat.

        RelativeTimeFormat has format / formatToParts functions like NumberFormat / DateTimeFormat
        and is used to turn a number and unit into a formatted relative time string, e.g.:

          new Intl.RelativeTimeFormat('en').format(10, 'day')
          > 'in 10 days'

          new Intl.RelativeTimeFormat('en', { numeric: 'auto' }).format(0, 'day')
          > 'today'

        Implementation of RelativeTimeFormat#formatToParts makes direct use of NumberFormat#formatToParts,
        as the relative time string consists of at most one formatted number with optional literal text on either side.

        This feature is runtime-guarded by the `useIntlRelativeTimeFormat` option.

        * CMakeLists.txt:
        * DerivedSources-input.xcfilelist:
        * DerivedSources-output.xcfilelist:
        * DerivedSources.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Sources.txt:
        * runtime/CommonIdentifiers.h:
        * runtime/IntlRelativeTimeFormat.cpp: Added.
        * runtime/IntlRelativeTimeFormat.h: Added.
        * runtime/IntlRelativeTimeFormatConstructor.cpp: Added.
        * runtime/IntlRelativeTimeFormatConstructor.h: Added.
        * runtime/IntlRelativeTimeFormatPrototype.cpp: Added.
        * runtime/IntlRelativeTimeFormatPrototype.h: Added.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::relativeTimeFormatStructure):
        * runtime/OptionsList.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        * runtime/VM.h:
        Add feature and runtime option.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::formatToParts):
        * runtime/IntlPluralRules.cpp:
        (JSC::IntlPluralRules::initializePluralRules):
        (JSC::IntlPluralRules::resolvedOptions):
        Make "type" a property name.

        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        (JSC::IntlNumberFormat::resolvedOptions):
        (JSC::IntlNumberFormat::formatToPartsInternal):
        (JSC::IntlNumberFormat::formatToParts):
        * runtime/IntlNumberFormat.h:
        Factor out formatToPartsInternal so that RelativeTimeFormat can use it with its own UNumberFormat.
        (This logic is too complicated to duplicate; it's because ICU won't split, e.g., "10,000" into parts for us.)

        * runtime/IntlObject.cpp:
        (JSC::IntlObject::IntlObject):
        (JSC::IntlObject::create):
        (JSC::IntlObject::finishCreation):
        (JSC::intlAvailableLocales):
        (JSC::intlCollatorAvailableLocales):
        (JSC::isUnicodeLocaleIdentifierType):
        (JSC::supportedLocales):
        (JSC::intlDateTimeFormatAvailableLocales): Deleted.
        (JSC::intlNumberFormatAvailableLocales): Deleted.
        * runtime/IntlObject.h:
        (JSC::intlDateTimeFormatAvailableLocales):
        (JSC::intlNumberFormatAvailableLocales):
        (JSC::intlPluralRulesAvailableLocales):
        (JSC::intlRelativeTimeFormatAvailableLocales):
        Perform three corrections for Intl classes:
          1. Collator should be the only class with unique "available locales".
             [unum|udat]_getAvailable exist but they've deferred to uloc_getAvailable for 20 years.
          2. isUnicodeLocaleIdentifierType isn't just `alphanum{3,8}` but rather `alphanum{3,8} (sep alphanum{3,8})*`.
             This is my own mistake from r239941.
          3. supportedLocalesOf entries should not be frozen.
             Changed in https://github.com/tc39/ecma402/pull/278.

        * tools/JSDollarVM.cpp:
        (JSC::functionICUVersion):
        (JSC::JSDollarVM::finishCreation):
        Add $vm.icuVersion so that we can add per-line skips to stress tests.

2020-04-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] SlowPathCall is not supported by callOperation in Windows
        https://bugs.webkit.org/show_bug.cgi?id=210727

        Reviewed by Ross Kirsling.

        In Windows, SlowPathCall should be handled by JITSlowPathCall, otherwise, stack is not correctly allocated.

        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        * jit/SlowPathCall.h:
        (JSC::JITSlowPathCall::call):

2020-04-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Enable BigInt
        https://bugs.webkit.org/show_bug.cgi?id=210726

        Reviewed by Mark Lam.

        * runtime/OptionsList.h:

2020-04-19  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] LLInt slow path call should not have third argument
        https://bugs.webkit.org/show_bug.cgi?id=210721

        Reviewed by Mark Lam.

        LLInt callSlowPath does not work with third argument in Windows, CLoop etc. LLInt slow-path should not take third argument,
        instead, use `bytecode.metadata(...)` to get metadata.

        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        * llint/LowLevelInterpreter64.asm:
        * runtime/CommonSlowPaths.cpp:
        (JSC::iterator_open_try_fast):
        (JSC::SLOW_PATH_DECL):
        (JSC::iterator_next_try_fast):
        (JSC::iterator_open_try_fast_narrow): Deleted.
        (JSC::iterator_open_try_fast_wide16): Deleted.
        (JSC::iterator_open_try_fast_wide32): Deleted.
        (JSC::iterator_next_try_fast_narrow): Deleted.
        (JSC::iterator_next_try_fast_wide16): Deleted.
        (JSC::iterator_next_try_fast_wide32): Deleted.
        * runtime/CommonSlowPaths.h:

2020-04-19  Mark Lam  <mark.lam@apple.com>

        Fix missing exception checks and handling in JSC APIs.
        https://bugs.webkit.org/show_bug.cgi?id=210715
        <rdar://problem/61599658>

        Reviewed by Saam Barati.

        * API/APICallbackFunction.h:
        (JSC::APICallbackFunction::call):
        - We should return early if an exception was thrown.  We should not be using the
          result in any way since we cannot rely on it having any sane value.
        (JSC::APICallbackFunction::construct):
        - For consistency, also return an undefined here when an exception was thrown.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject<Parent>::construct):
        (JSC::JSCallbackObject<Parent>::call):
        - Return an undefined if an exception was thrown.  Don't return the potentially
          garbage result value.  Who knows what the client code will do with it.  Returning
          an undefined here makes the code more robust.

        * API/JSObjectRef.cpp:
        (JSObjectGetProperty):
        (JSObjectHasPropertyForKey):
        (JSObjectGetPropertyForKey):
        (JSObjectDeletePropertyForKey):
        (JSObjectGetPropertyAtIndex):
        (JSObjectDeleteProperty):
        - Explicitly return a nullptr if an exception was thrown.  The toRef() on the
          result that follows the exception check may or may not return a nullptr
          (also see toRef(JSC::VM& vm, JSC::JSValue v) for !CPU(ADDRESS64)).

        * API/JSValueRef.cpp:
        (JSValueIsEqual):
        (JSValueIsInstanceOfConstructor):
        - For consistency, make these return false if an exception is thrown.

        * API/ObjCCallbackFunction.mm:
        (JSC::objCCallbackFunctionCallAsFunction):
        (JSC::objCCallbackFunctionCallAsConstructor):
        (JSC::ObjCCallbackFunctionImpl::call):
        - Add some assertions and return early if an exception was thrown.

2020-04-18  Keith Miller  <keith_miller@apple.com>

        Fix CLoop build for iterator opcodes
        https://bugs.webkit.org/show_bug.cgi?id=210709

        Reviewed by Robin Morisset.

        We need to add a default paramater for the metadata pointer
        in the CLoop build. Additionally, the helper declarations need
        to be in the various slow path header files. Lastly we need
        opcode labels for our new JS call return points.

        * bytecode/BytecodeList.rb:
        * llint/LLIntSlowPaths.cpp:
        * llint/LLIntSlowPaths.h:
        * runtime/CommonSlowPaths.h:

2020-04-18  Robin Morisset  <rmorisset@apple.com>

        Support an inlined representation in JSValue of small BigInts ("BigInt32")
        https://bugs.webkit.org/show_bug.cgi?id=206182

        Reviewed by Yusuke Suzuki.

        This patch attempts to optimize the performance of BigInts, when they are small (32 bit or less).
        It works by inlining them into JSValue on 64-bit platforms, avoiding the allocation of a JSBigInt.
        The bit pattern we use is 0000:XXXX:XXXX:0012
        This representation works because of the following things:
        - It cannot be confused with a Double or Integer thanks to the top bits
        - It cannot be confused with a pointer to a Cell, thanks to bit 1 which is set to true
        - It cannot be confused with a pointer to wasm thanks to bit 0 which is set to false
        - It cannot be confused with true/false because bit 2 is set to false
        - It cannot be confused for null/undefined because bit 4 is set to true

        This entire change is gated by USE(BIGINT32), to make it easier to disable if it turns out to have bugs.
        It should also make it much easier to verify if a given bug comes from it or from something else.

        Note that in this patch we create BigInt32s when parsing small BigInt constants, and most operations (e.g. Add or BitOr) produce a BigInt32 if both of their operands are BigInt32,
        but we don't produce a BigInt32 from for example the substraction/division of two large heap-allocated JSBigInts, even if the result fits in 32-bits.
        As a result, small BigInts can now either be heap-allocated or inlined in the JSValue.

        This patch includes a significant refactor of various slow paths, which are now grouped together in Operations.h
        Because this increased the size of Operations.h significantly, I split the parts of Operations.h which are only used by the GC into Scribble.h, to avoid bloating compile times.

        In the DFG and FTL we now have 3 UseKinds for BigInts: HeapBigIntUse, BigInt32Use and AnyBigIntUse.
        The latter is useful when we know that we are receiving BigInts, but speculation indicates a mix of heap-allocated and small (inlined) big-ints.

        Unfortunately, a naive implementation of this patch significantly regresses the performance of StrictEq (and its variants), as it is no longer true that a cell and a non-cell cannot be equal.
        Before this patch, the code was jumping to a slow path if either:
        - at least one operand is a double
        - or both operands are cells
        Now, it also needs to jump to the slow path if at least one is a cell.
        To recover this performance cost, I significantly rewrote this code, from
          if (left is Cell && right is Cell) {
            if (left == right)
              return true;
            goto slowPath;
          }
          if (! left is Int32) {
            if (left is Number)
              goto slowPath
          }
          if (! right is Int32) {
            if (right is Number)
              goto slowPath
          }
          return left == right
        To the following:
          if (left is Double || right is Double)
            goto slowPath
          if (left == right)
            return true;
          if (left is Cell || right is Cell)
            goto slowPath
          return false;
        I believe this to be faster than just replacing (left is Cell && right is Cell) by an ||, because I found a bit-trick to check (left is Double || right is Double) which should help reduce the pressure on the branch predictor.
        Early JetStream2 tests appear to confirm that this patch is roughly neutral while it was a 0.5% regression before I used this trick, but the numbers are still too noisy, I plan to do more measurements before landing this patch.

        I don't yet have performance numbers for this patch on a BigInt benchmark, I will get such numbers before trying to land it, but I'd like some review in the meantime.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::X86InstructionFormatter::SingleInstructionBufferWriter::memoryModRM):
        * bytecode/ArithProfile.cpp:
        (JSC::ArithProfile<BitfieldType>::emitObserveResult):
        (JSC::ArithProfile<BitfieldType>::shouldEmitSetBigInt32 const):
        (JSC::ArithProfile<BitfieldType>::shouldEmitSetHeapBigInt const):
        (JSC::ArithProfile<BitfieldType>::emitSetHeapBigInt const):
        (JSC::ArithProfile<BitfieldType>::emitSetBigInt32 const):
        (WTF::printInternal):
        * bytecode/ArithProfile.h:
        (JSC::ObservedResults::didObserveNonInt32):
        (JSC::ObservedResults::didObserveBigInt):
        (JSC::ObservedResults::didObserveHeapBigInt):
        (JSC::ObservedResults::didObserveBigInt32):
        (JSC::ArithProfile::didObserveHeapBigInt const):
        (JSC::ArithProfile::didObserveBigInt32 const):
        (JSC::ArithProfile::setObservedHeapBigInt):
        (JSC::ArithProfile::setObservedBigInt32):
        (JSC::ArithProfile::observeResult):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeLivenessAnalysisInlines.h:
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CodeBlock.cpp:
        * bytecode/DataFormat.h:
        * bytecode/MethodOfGettingAValueProfile.cpp:
        (JSC::MethodOfGettingAValueProfile::emitReportValue const):
        * bytecode/MethodOfGettingAValueProfile.h:
        * bytecode/SpeculatedType.cpp:
        (JSC::dumpSpeculation):
        (JSC::speculationFromClassInfo):
        (JSC::speculationFromStructure):
        (JSC::speculationFromValue):
        (JSC::speculationFromJSType):
        (JSC::leastUpperBoundOfStrictlyEquivalentSpeculations):
        * bytecode/SpeculatedType.h:
        (JSC::isBigInt32Speculation):
        (JSC::isHeapBigIntSpeculation):
        (JSC::isBigIntSpeculation):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitEqualityOpImpl):
        (JSC::BytecodeGenerator::addBigIntConstant):
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::isToThisAnIdentity):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixupToThis):
        (JSC::DFG::FixupPhase::fixupToNumeric):
        (JSC::DFG::FixupPhase::observeUseKindOnNode):
        (JSC::DFG::FixupPhase::fixupCompareStrictEqAndSameValue):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateBigInt32):
        (JSC::DFG::Node::shouldSpeculateHeapBigInt):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::compileExit):
        * dfg/DFGOSRExit.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::SafeToExecuteEdge::operator()):
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compileValueBitNot):
        (JSC::DFG::SpeculativeJIT::emitUntypedOrAnyBigIntBitOp):
        (JSC::DFG::SpeculativeJIT::compileValueBitwiseOp):
        (JSC::DFG::SpeculativeJIT::emitUntypedOrBigIntRightShiftBitOp):
        (JSC::DFG::SpeculativeJIT::compileValueLShiftOp):
        (JSC::DFG::SpeculativeJIT::compileValueBitRShift):
        (JSC::DFG::SpeculativeJIT::compileShiftOp):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileValueSub):
        (JSC::DFG::SpeculativeJIT::compileIncOrDec):
        (JSC::DFG::SpeculativeJIT::compileValueNegate):
        (JSC::DFG::SpeculativeJIT::compileValueMul):
        (JSC::DFG::SpeculativeJIT::compileValueDiv):
        (JSC::DFG::SpeculativeJIT::compileValueMod):
        (JSC::DFG::SpeculativeJIT::compileValuePow):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        (JSC::DFG::SpeculativeJIT::speculateHeapBigInt):
        (JSC::DFG::SpeculativeJIT::speculate):
        (JSC::DFG::SpeculativeJIT::compileToNumeric):
        (JSC::DFG::SpeculativeJIT::compileHeapBigIntEquality):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculateBigInt32Operand::SpeculateBigInt32Operand):
        (JSC::DFG::SpeculateBigInt32Operand::~SpeculateBigInt32Operand):
        (JSC::DFG::SpeculateBigInt32Operand::edge const):
        (JSC::DFG::SpeculateBigInt32Operand::node const):
        (JSC::DFG::SpeculateBigInt32Operand::gpr):
        (JSC::DFG::SpeculateBigInt32Operand::use):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::fillSpeculateInt32Internal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::speculateBigInt32):
        (JSC::DFG::SpeculativeJIT::speculateAnyBigInt):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBigInt32):
        (JSC::DFG::SpeculativeJIT::compileBigInt32Compare):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBigInt32Branch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStrengthReductionPhase.cpp:
        (JSC::DFG::StrengthReductionPhase::handleNode):
        * dfg/DFGUseKind.cpp:
        (WTF::printInternal):
        * dfg/DFGUseKind.h:
        (JSC::DFG::typeFilterFor):
        (JSC::DFG::isCell):
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLCommonValues.cpp:
        (JSC::FTL::CommonValues::initializeConstants):
        * ftl/FTLCommonValues.h:
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueAdd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueSub):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMul):
        (JSC::FTL::DFG::LowerDFGToB3::compileBinaryMathIC):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueDiv):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueMod):
        (JSC::FTL::DFG::LowerDFGToB3::compileValuePow):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitNot):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitAnd):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitOr):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitXor):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitRShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitRShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileArithBitLShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileValueBitLShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileBitURShift):
        (JSC::FTL::DFG::LowerDFGToB3::compileToNumeric):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileCompareStrictEq):
        (JSC::FTL::DFG::LowerDFGToB3::compileIsBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinarySnippet):
        (JSC::FTL::DFG::LowerDFGToB3::emitBinaryBitOpSnippet):
        (JSC::FTL::DFG::LowerDFGToB3::boolify):
        (JSC::FTL::DFG::LowerDFGToB3::buildTypeOf):
        (JSC::FTL::DFG::LowerDFGToB3::lowHeapBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::lowBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNotBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::unboxBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::boxBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::isNotAnyBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::speculate):
        (JSC::FTL::DFG::LowerDFGToB3::isNotHeapBigIntUnknownWhetherCell):
        (JSC::FTL::DFG::LowerDFGToB3::isNotHeapBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::isHeapBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::speculateHeapBigInt):
        (JSC::FTL::DFG::LowerDFGToB3::speculateHeapBigIntUnknownWhetherCell):
        (JSC::FTL::DFG::LowerDFGToB3::speculateBigInt32):
        (JSC::FTL::DFG::LowerDFGToB3::speculateAnyBigInt):
        * ftl/FTLOSRExitCompiler.cpp:
        (JSC::FTL::compileStub):
        * heap/HeapSnapshotBuilder.cpp:
        (JSC::HeapSnapshotBuilder::json):
        * heap/MarkedBlockInlines.h:
        * heap/PreciseAllocation.cpp:
        * inspector/agents/InspectorHeapAgent.cpp:
        (Inspector::InspectorHeapAgent::getPreview):
        * interpreter/Interpreter.cpp:
        (JSC::sizeOfVarargs):
        * jit/AssemblyHelpers.cpp:
        (JSC::AssemblyHelpers::emitConvertValueToBoolean):
        (JSC::AssemblyHelpers::branchIfValue):
        * jit/AssemblyHelpers.h:
        (JSC::AssemblyHelpers::branchIfBigInt32):
        (JSC::AssemblyHelpers::branchIfBigInt32KnownNotNumber):
        (JSC::AssemblyHelpers::branchIfNotBigInt32KnownNotNumber):
        (JSC::AssemblyHelpers::branchIfHeapBigInt):
        (JSC::AssemblyHelpers::branchIfNotHeapBigInt):
        (JSC::AssemblyHelpers::unboxBigInt32):
        (JSC::AssemblyHelpers::boxBigInt32):
        (JSC::AssemblyHelpers::emitTypeOf):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_is_big_int):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::compileOpStrictEqJump):
        (JSC::JIT::emit_op_to_numeric):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_is_big_int):
        (JSC::JIT::emit_op_to_numeric):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter64.asm:
        * parser/ParserArena.cpp:
        (JSC::IdentifierArena::makeBigIntDecimalIdentifier):
        * runtime/ArrayPrototype.cpp:
        * runtime/BigIntConstructor.cpp:
        (JSC::toBigInt):
        (JSC::callBigIntConstructor):
        * runtime/BigIntObject.cpp:
        (JSC::BigIntObject::create):
        (JSC::BigIntObject::finishCreation):
        * runtime/BigIntObject.h:
        * runtime/BigIntPrototype.cpp:
        (JSC::toThisBigIntValue):
        (JSC::bigIntProtoFuncToStringImpl):
        * runtime/CommonSlowPaths.cpp:
        (JSC::SLOW_PATH_DECL):
        (JSC::updateArithProfileForUnaryArithOp):
        (JSC::updateArithProfileForBinaryArithOp):
        * runtime/JSBigInt.cpp:
        (JSC::JSBigInt::createStructure):
        (JSC::JSBigInt::parseInt):
        (JSC::JSBigInt::stringToBigInt):
        (JSC::JSBigInt::inc):
        (JSC::JSBigInt::dec):
        (JSC::JSBigInt::bitwiseAnd):
        (JSC::JSBigInt::toStringGeneric):
        (JSC::JSBigInt::equalsToNumber):
        (JSC::JSBigInt::equalsToInt32):
        * runtime/JSBigInt.h:
        (JSC::asHeapBigInt):
        * runtime/JSCJSValue.cpp:
        (JSC::JSValue::toNumberSlowCase const):
        (JSC::JSValue::toObjectSlowCase const):
        (JSC::JSValue::toThisSlowCase const):
        (JSC::JSValue::synthesizePrototype const):
        (JSC::JSValue::dumpInContextAssumingStructure const):
        (JSC::JSValue::dumpForBacktrace const):
        (JSC::JSValue::toStringSlowCase const):
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::JSValue):
        (JSC::JSValue::asHeapBigInt const):
        (JSC::JSValue::isBigInt const):
        (JSC::JSValue::isHeapBigInt const):
        (JSC::JSValue::isBigInt32 const):
        (JSC::JSValue::bigInt32AsInt32 const):
        (JSC::JSValue::isPrimitive const):
        (JSC::JSValue::getPrimitiveNumber):
        (JSC::JSValue::toNumeric const):
        (JSC::JSValue::toBigIntOrInt32 const):
        (JSC::JSValue::equalSlowCaseInline):
        (JSC::JSValue::strictEqualForCells):
        (JSC::JSValue::strictEqual):
        (JSC::JSValue::pureStrictEqual):
        (JSC::JSValue::pureToBoolean const):
        * runtime/JSCell.cpp:
        (JSC::JSCell::put):
        (JSC::JSCell::putByIndex):
        (JSC::JSCell::toPrimitive const):
        (JSC::JSCell::getPrimitiveNumber const):
        (JSC::JSCell::toNumber const):
        (JSC::JSCell::toObjectSlow const):
        * runtime/JSCell.h:
        * runtime/JSCellInlines.h:
        (JSC::JSCell::isHeapBigInt const):
        (JSC::JSCell::toBoolean const):
        (JSC::JSCell::pureToBoolean const):
        * runtime/JSString.h:
        (JSC::JSValue::toBoolean const):
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        * runtime/ObjectInitializationScope.cpp:
        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        (JSC::jsIsObjectTypeOrNull):
        * runtime/Operations.h:
        (JSC::compareBigIntToOtherPrimitive):
        (JSC::bigIntCompare):
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::arithmeticBinaryOp):
        (JSC::jsSub):
        (JSC::jsMul):
        (JSC::jsDiv):
        (JSC::jsRemainder):
        (JSC::jsPow):
        (JSC::jsInc):
        (JSC::jsDec):
        (JSC::jsBitwiseNot):
        (JSC::shift):
        (JSC::jsLShift):
        (JSC::jsRShift):
        (JSC::bitwiseBinaryOp):
        (JSC::jsBitwiseAnd):
        (JSC::jsBitwiseOr):
        (JSC::jsBitwiseXor):
        * runtime/Scribble.h: Copied from Source/JavaScriptCore/runtime/BigIntObject.h.
        (JSC::scribbleFreeCells):
        (JSC::isScribbledValue):
        (JSC::scribble):
        * runtime/StructureInlines.h:
        (JSC::prototypeForLookupPrimitiveImpl):

2020-04-18  Keith Miller  <keith_miller@apple.com>

        Unreviewed, remove commented out/dead code that didn't failed to
        get removed when landing r260323.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.cpp:
        (JSC::iterator_next_try_fast):

2020-04-18  Keith Miller  <keith_miller@apple.com>

        Redesign how we do for-of iteration for JSArrays
        https://bugs.webkit.org/show_bug.cgi?id=175454

        Reviewed by Filip Pizlo and Saam Barati.

        This patch intrinsics for-of iteration for JSArrays when they are
        being iterated with the built-in Symbol.iterator. We do this by
        adding two new bytecodes op_iterator_open and
        op_iterator_next. These bytecodes are essentially a fused set of
        existing bytecodes with a special case for our intrinsiced JSArray
        case. This patch only adds support for these instructions on
        64-bit.


        The op_iterator_open bytecode is semantically the same as:
        iterator = symbolIterator.@call(iterable);
        next = iterator.next;

        where iterable is the rhs of the for-of and symbolIterator is the
        result of running iterable.symbolIterator;


        The op_iterator_next bytecode is semantically the same as:
        nextResult = next.@call(iterator);
        done = nextResult.done;
        value = done ? (undefined / bottom) : nextResult.value;

        where nextResult is a temporary (the value VirtualRegister in the
        LLInt/Baseline and a tmp in the DFG).

        In order to make sure these bytecodes have the same perfomance as
        the existing bytecode sequence, we need to make sure we have the
        same profiling data and inline caching. Most of the existing
        get_by_id code assumed a particular bytecode member name was the
        same in each flavor get_by_id access. This patch adds template
        specialized functions that vend the correct
        Profile/VirtualRegister for the current bytecode/checkpoint. This
        means we can have meaningful names for our Bytecode structs and
        still use the generic functions.

        In the LLInt most of the logic for calls/get_by_id had to be
        factored into helper macros, so we could have bytecodes that are
        some combination of those.

        The trickiest part of this patch was getting the hand rolled DFG
        IR to work correctly. This is because we don't have a great way to
        express large chucks of DFG graph that doesn't involve manually
        tracking all the DFG's invariants. Such as:

        1) Flushing/Phantoming values at the end of each block.
        2) Rolling forwards and backwards the BytecodeIndex when switching
           blocks.
        3) Remembering to GetLocal each variable at the top of every block.
        4) Ensuring that the JSValue stored to the op_iterator_next.m_value
           local does not cause us to OSR exit at the set local.

        (4) is handled by a new function, bottomValueMatchingSpeculation,
        on DFGGraph that produces a FrozenValue that is roughly the bottom
        for a given speculated type. In a future patch we should make this
        more complete, probably by adding a VM::bottomCellForSetLocal that
        prediction propagation and AI know how treat as a true bottom
        value. See: https://bugs.webkit.org/show_bug.cgi?id=210694

        Lastly, this patch changes the DFG NodeType, CheckCell to be
        CheckIsConstant.  CheckIsConstant is equivalent to the == operator
        on JSValue where it just checks the register values are the
        same. In order to keep the same perf that we had for CheckCell,
        CheckIsConstant supports CellUse.

        * CMakeLists.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerARM64.h:
        (JSC::MacroAssemblerARM64::or8):
        (JSC::MacroAssemblerARM64::store8):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::or8):
        * bytecode/ArrayProfile.h:
        (JSC::ArrayProfile::observeStructureID):
        (JSC::ArrayProfile::observeStructure):
        * bytecode/BytecodeList.rb:
        * bytecode/BytecodeLivenessAnalysis.cpp:
        (JSC::tmpLivenessForCheckpoint):
        * bytecode/BytecodeOperandsForCheckpoint.h: Added.
        (JSC::arrayProfileForImpl):
        (JSC::hasArrayProfileFor):
        (JSC::arrayProfileFor):
        (JSC::valueProfileForImpl):
        (JSC::hasValueProfileFor):
        (JSC::valueProfileFor):
        (JSC::destinationFor):
        (JSC::calleeFor):
        (JSC::argumentCountIncludingThisFor):
        (JSC::stackOffsetInRegistersForCall):
        (JSC::callLinkInfoFor):
        * bytecode/BytecodeUseDef.cpp:
        (JSC::computeUsesForBytecodeIndexImpl):
        (JSC::computeDefsForBytecodeIndexImpl):
        * bytecode/CallLinkInfo.cpp:
        (JSC::CallLinkInfo::callTypeFor):
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finishCreation):
        (JSC::CodeBlock::finalizeLLIntInlineCaches):
        (JSC::CodeBlock::tryGetValueProfileForBytecodeIndex):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::instructionAt const):
        * bytecode/CodeBlockInlines.h:
        (JSC::CodeBlock::forEachValueProfile):
        (JSC::CodeBlock::forEachArrayProfile):
        * bytecode/GetByStatus.cpp:
        (JSC::GetByStatus::computeFromLLInt):
        * bytecode/Instruction.h:
        (JSC::BaseInstruction::width const):
        (JSC::BaseInstruction::hasCheckpoints const):
        (JSC::BaseInstruction::asKnownWidth const):
        (JSC::BaseInstruction::wide16 const):
        (JSC::BaseInstruction::wide32 const):
        * bytecode/InstructionStream.h:
        * bytecode/IterationModeMetadata.h: Copied from Source/JavaScriptCore/bytecode/SuperSampler.h.
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.cpp:
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::fireInternal):
        (JSC::LLIntPrototypeLoadAdaptiveStructureWatchpoint::clearLLIntGetByIdCache):
        * bytecode/LLIntPrototypeLoadAdaptiveStructureWatchpoint.h:
        * bytecode/Opcode.h:
        * bytecode/SpeculatedType.h:
        (JSC::isSubtypeSpeculation):
        (JSC::speculationContains):
        * bytecode/SuperSampler.h:
        (JSC::SuperSamplerScope::release):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGenericEnumeration):
        (JSC::BytecodeGenerator::emitEnumeration):
        (JSC::BytecodeGenerator::emitIsEmpty):
        (JSC::BytecodeGenerator::emitIteratorOpen):
        (JSC::BytecodeGenerator::emitIteratorNext):
        (JSC::BytecodeGenerator::emitGetGenericIterator):
        (JSC::BytecodeGenerator::emitIteratorGenericNext):
        (JSC::BytecodeGenerator::emitIteratorGenericNextWithValue):
        (JSC::BytecodeGenerator::emitIteratorGenericClose):
        (JSC::BytecodeGenerator::emitGetAsyncIterator):
        (JSC::BytecodeGenerator::emitDelegateYield):
        (JSC::BytecodeGenerator::emitIteratorNextWithValue): Deleted.
        (JSC::BytecodeGenerator::emitIteratorClose): Deleted.
        (JSC::BytecodeGenerator::emitGetIterator): Deleted.
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayPatternNode::bindValue const):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::forAllValues):
        * dfg/DFGAtTailAbstractState.h:
        (JSC::DFG::AtTailAbstractState::size const):
        (JSC::DFG::AtTailAbstractState::numberOfTmps const):
        (JSC::DFG::AtTailAbstractState::atIndex):
        (JSC::DFG::AtTailAbstractState::tmp):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::progressToNextCheckpoint):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::jsConstant):
        (JSC::DFG::ByteCodeParser::weakJSConstant):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::allocateUntargetableBlock):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::emitFunctionChecks):
        (JSC::DFG::ByteCodeParser::inlineCall):
        (JSC::DFG::ByteCodeParser::handleCallVariant):
        (JSC::DFG::ByteCodeParser::handleVarargsInlining):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        (JSC::DFG::ByteCodeParser::handleDOMJITCall):
        (JSC::DFG::ByteCodeParser::handleIntrinsicGetter):
        (JSC::DFG::ByteCodeParser::handleDOMJITGetter):
        (JSC::DFG::ByteCodeParser::handleModuleNamespaceLoad):
        (JSC::DFG::ByteCodeParser::handleTypedArrayConstructor):
        (JSC::DFG::ByteCodeParser::handleConstantInternalFunction):
        (JSC::DFG::ByteCodeParser::handleGetById):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::handlePutByVal):
        (JSC::DFG::ByteCodeParser::handleCreateInternalFieldObject):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCFGSimplificationPhase.cpp:
        (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
        (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
        (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::capabilityLevel):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::addStringReplacePrimordialChecks):
        * dfg/DFGForAllKills.h:
        (JSC::DFG::forAllKilledOperands):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::bottomValueMatchingSpeculation):
        * dfg/DFGGraph.h:
        * dfg/DFGInPlaceAbstractState.cpp:
        (JSC::DFG::InPlaceAbstractState::beginBasicBlock):
        (JSC::DFG::InPlaceAbstractState::initialize):
        (JSC::DFG::InPlaceAbstractState::endBasicBlock):
        (JSC::DFG::InPlaceAbstractState::merge):
        * dfg/DFGInPlaceAbstractState.h:
        (JSC::DFG::InPlaceAbstractState::size const):
        (JSC::DFG::InPlaceAbstractState::numberOfTmps const):
        (JSC::DFG::InPlaceAbstractState::atIndex):
        (JSC::DFG::InPlaceAbstractState::operand):
        (JSC::DFG::InPlaceAbstractState::local):
        (JSC::DFG::InPlaceAbstractState::argument):
        (JSC::DFG::InPlaceAbstractState::variableAt): Deleted.
        * dfg/DFGLazyJSValue.h:
        (JSC::DFG::LazyJSValue::speculatedType const):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::hasCellOperand):
        * dfg/DFGNodeType.h:
        * dfg/DFGOSRExitCompilerCommon.cpp:
        (JSC::DFG::callerReturnPC):
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileCheckIsConstant):
        (JSC::DFG::SpeculativeJIT::compileCheckCell): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGValidate.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckIsConstant):
        (JSC::FTL::DFG::LowerDFGToB3::compileCheckCell): Deleted.
        * generator/DSL.rb:
        * generator/Metadata.rb:
        * generator/Section.rb:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::emitPutCallResult):
        (JSC::JIT::compileSetupFrame):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_iterator_open):
        (JSC::JIT::emitSlow_op_iterator_open):
        (JSC::JIT::emit_op_iterator_next):
        (JSC::JIT::emitSlow_op_iterator_next):
        * jit/JITInlines.h:
        (JSC::JIT::updateTopCallFrame):
        (JSC::JIT::advanceToNextCheckpoint):
        (JSC::JIT::emitJumpSlowToHotForCheckpoint):
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITOperations.cpp:
        * jit/JITOperations.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::setupGetByIdPrototypeCache):
        (JSC::LLInt::performLLIntGetByID):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::genericCall):
        (JSC::LLInt::handleIteratorOpenCheckpoint):
        (JSC::LLInt::handleIteratorNextCheckpoint):
        (JSC::LLInt::slow_path_checkpoint_osr_exit):
        (JSC::LLInt::llint_dump_value):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/transform.rb:
        * runtime/CommonSlowPaths.cpp:
        (JSC::iterator_open_try_fast):
        (JSC::iterator_open_try_fast_narrow):
        (JSC::iterator_open_try_fast_wide16):
        (JSC::iterator_open_try_fast_wide32):
        (JSC::iterator_next_try_fast):
        (JSC::iterator_next_try_fast_narrow):
        (JSC::iterator_next_try_fast_wide16):
        (JSC::iterator_next_try_fast_wide32):
        * runtime/CommonSlowPaths.h:
        * runtime/Intrinsic.cpp:
        (JSC::interationKindForIntrinsic):
        * runtime/Intrinsic.h:
        * runtime/JSArrayIterator.h:
        * runtime/JSCJSValue.h:
        * runtime/JSCJSValueInlines.h:
        (JSC::JSValue::isCallable const):
        * runtime/JSCast.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::arrayProtoValuesFunctionConcurrently const):
        * runtime/OptionsList.h:
        * runtime/Structure.cpp:
        (JSC::Structure::dumpBrief const):

2020-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Replace DFG NewPromise with NewInternalFieldObject
        https://bugs.webkit.org/show_bug.cgi?id=210687

        Reviewed by Saam Barati.

        The feature of DFG::NewPromise can be implemented completely with DFG::NewInternalFieldObject. This reduces code duplication, and furthermore,
        this offers Object Allocation Sinking support for free. This patch replaces DFG::NewPromise with DFG::NewInternalFieldObject and remove DFG::NewPromise
        completely.

        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToNewInternalFieldObject):
        (JSC::DFG::Node::convertToNewInternalFieldObjectWithInlineFields):
        (JSC::DFG::Node::hasIsInternalPromise):
        (JSC::DFG::Node::hasStructure):
        (JSC::DFG::Node::convertToNewPromise): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObject):
        (JSC::DFG::SpeculativeJIT::compileNewPromise): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewPromise): Deleted.
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * runtime/JSInternalPromise.cpp:
        (JSC::JSInternalPromise::createWithInitialValues):
        * runtime/JSInternalPromise.h:
        * runtime/JSPromise.cpp:
        (JSC::JSPromise::createWithInitialValues):
        (JSC::JSPromise::finishCreation):
        (JSC::JSPromise::status const):
        (JSC::JSPromise::result const):
        (JSC::JSPromise::flags const):
        (JSC::JSPromise::resolve):
        (JSC::JSPromise::reject):
        (JSC::JSPromise::rejectAsHandled):
        * runtime/JSPromise.h:
        (JSC::JSPromise::initialValues):
        (JSC::JSPromise::internalField const):
        (JSC::JSPromise::internalField):

2020-04-18  Yusuke Suzuki  <ysuzuki@apple.com>

        Unreviewed, build fix for ARM64E after r260310
        https://bugs.webkit.org/show_bug.cgi?id=207330

        r260310 uses undefined function Instruction.cloneWithNewOperands in arm64e.rb and throws an error.
        This patch calls `node.cloneWithNewOperands`.

        * offlineasm/arm64e.rb:

2020-04-18  Alexey Shvayka  <shvaikalesh@gmail.com>

        RegExp.prototype[@@search] should use SameValue
        https://bugs.webkit.org/show_bug.cgi?id=173226

        Reviewed by Yusuke Suzuki.

        This change exposes Object.is implementation as link-time-constant @sameValue and utilizes
        it in RegExp.prototype[@@search] per spec [1], aligning JSC with V8 and SpiderMonkey.

        [1]: https://tc39.es/ecma262/#sec-regexp.prototype-@@search (steps 5, 8)

        * builtins/BuiltinNames.h:
        * builtins/RegExpPrototype.js:
        (Symbol.search):
        * bytecode/LinkTimeConstant.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:

2020-04-18  Angelos Oikonomopoulos  <angelos@igalia.com>

        Fix code origin when lowering offlineasm instructions on MIPS/ARM64E
        https://bugs.webkit.org/show_bug.cgi?id=207330

        Reviewed by Mark Lam.

        Instruction operands are mapped to RegisterID in RegisterID.forName
        and the operation is memoized. Therefore, we can't use the codeOrigin
        of the operand at that point. Use the codeOrigin of the original
        instruction instead.

        * offlineasm/arm64e.rb:
        * offlineasm/ast.rb:
        * offlineasm/mips.rb:
        * offlineasm/risc.rb:

2020-04-18  Angelos Oikonomopoulos  <angelos@igalia.com>

        REGRESSION(r260246): It broke build on MIPS32 
        https://bugs.webkit.org/show_bug.cgi?id=210665

        Reviewed by Aakash Jain.

        The mnemonic for 'store halfword' is 'sh', not 'shv'. This appears to
        be a typo in a path that was never exercised.

        Exposed by r260246; riscLowerMisplacedAddresses now calls into
        riscAsRegisters with an 'h' suffix, which results in a 'storeh'
        instruction. The storeh is then lowered to the non-existent 'shv'.

        * offlineasm/mips.rb:

2020-04-17  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, reverting r260279.
        https://bugs.webkit.org/show_bug.cgi?id=210678

        Throwing error would be more efficient, having a generic code
        is still worth doing (Requested by yusukesuzuki on #webkit).

        Reverted changeset:

        "[JSC] We do not need to have exit-check for Map/Set iterator
        functions"
        https://bugs.webkit.org/show_bug.cgi?id=210667
        https://trac.webkit.org/changeset/260279

2020-04-17  Saam Barati  <sbarati@apple.com>

        GetTypedArrayByteOffset is broken on arm64e
        https://bugs.webkit.org/show_bug.cgi?id=210631

        Reviewed by Mark Lam.

        The vector of JSArrayBufferView is signed even when null on arm64e.  However, we were
        comparing against zero, which is wrong. This patch changes it so we do the right thing
        and instead compare against whatever constant (ptr=nullptr,size=0) signs as.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayByteOffset):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetTypedArrayByteOffset):
        * runtime/CagedBarrierPtr.h:
        (JSC::CagedBarrierPtr::rawBits const):
        * runtime/JSArrayBufferView.h:
        (JSC::JSArrayBufferView::nullVectorPtr):

2020-04-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] We do not need to have exit-check for Map/Set iterator functions
        https://bugs.webkit.org/show_bug.cgi?id=210667

        Reviewed by Michael Saboff.

        If the intrinsic's DFG node does not support general cases, we should check exit-frequency to avoid exit-recompile loop.
        However, Map/Set iterator creation functions (values, keys, entries) always require Map / Set types. And throwing an error
        when this is not met. So, the current DFG nodes for these intrinsic supports all the cases except for the case throwing an
        error, and error will exit anyway. So we do not need to have this exit-frequency guard here.

        This path is already tested by map-iterator-check-before-fail.js / set-iterator-check-before-fail.js.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):

2020-04-17  Devin Rousso  <drousso@apple.com>

        Rename NullishEq / NULLISHEQUAL to CoalesceEq / COALESCEEQUAL to match the spec
        https://bugs.webkit.org/show_bug.cgi?id=210663

        Reviewed by Ross Kirsling.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::emitShortCircuitAssignment):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeAssignNode):
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/Nodes.h:
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentExpression):
        * parser/ParserTokens.h:

2020-04-17  Devin Rousso  <drousso@apple.com>

        Implement Promise.any and AggregateError
        https://bugs.webkit.org/show_bug.cgi?id=202566

        Reviewed by Yusuke Suzuki.

        `Promise.any` resolves when any of the given `promises` resolve, but only rejects if _all_
        of the given `promises` reject. In order to support aggregating all of the `reason` values
        for all of the rejections, a new error type `AggregateError` is introduced which has an
        `get errors` that returns an aggregated array of the `reason` values.

        * builtins/PromiseConstructor.js:
        (all.newResolveElement):
        (allSettled.newResolveRejectElements):
        (any): Added.
        (any.newRejectElement): Added.
        * runtime/JSPromiseConstructor.cpp:

        * builtins/BuiltinNames.h:
        * bytecode/LinkTimeConstant.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::errorStructure const):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::initializeAggregateErrorConstructor): Added.
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        Expose `@AggregateError` for builtins.

        * runtime/AggregateError.h: Added.
        (JSC::AggregateError::destroy):
        (JSC::AggregateError::subspaceFor):
        (JSC::AggregateError::createStructure):
        (JSC::AggregateError::create):
        (JSC::AggregateError::errors const):
        * runtime/AggregateError.cpp: Added.
        (JSC::AggregateError::AggregateError):
        (JSC::AggregateError::visitChildren):
        (JSC::AggregateError::create):
        (JSC::AggregateError::finishCreation):
        * runtime/AggregateErrorPrototype.h: Added.
        * runtime/AggregateErrorPrototype.cpp: Added.
        (JSC::AggregateErrorPrototype::AggregateErrorPrototype):
        (JSC::AggregateErrorPrototype::finishCreation):
        (JSC::aggregateErrorPrototypeAccessorErrors):
        * runtime/AggregateErrorConstructor.h: Added.
        * runtime/AggregateErrorConstructor.cpp: Added.
        (JSC::callAggregateErrorConstructor):
        (JSC::constructAggregateErrorConstructor):
        (JSC::AggregateErrorConstructor::AggregateErrorConstructor):
        (JSC::AggregateErrorConstructor::finishCreation):
        * runtime/ErrorType.h:
        * runtime/ErrorType.cpp:
        (JSC::errorTypeName):

        * runtime/VM.h:
        * runtime/VM.cpp:
        (JSC::VM::VM):
        Make an `IsoSubspace` for `AggregateError` as it has a different size than `ErrorInstance`.

        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::finishCreation):
        * wasm/js/JSWebAssemblyCompileError.cpp:
        (JSC::JSWebAssemblyCompileError::create):
        * wasm/js/JSWebAssemblyLinkError.cpp:
        (JSC::JSWebAssemblyLinkError::create):
        * wasm/js/JSWebAssemblyRuntimeError.cpp:
        (JSC::JSWebAssemblyRuntimeError::create):
        Assign to `ErrorInstance` member variables inside `ErrorInstance::finishCreation` instead of
        inside `ErrorInstance::create` so that subclasses don't have to do the work as well.

        * runtime/Error.cpp:
        (JSC::createError):

        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::createStructure):
        * runtime/NativeErrorPrototype.h:
        (JSC::NativeErrorPrototype::createStructure):
        Drive-by: fix incorrect usage of `ErrorInstanceType` since `ErrorPrototype` does not inherit
                  from `ErrorInstance` (and therefore neither does `NativeErrorPrototype`).

        * runtime/ArgList.h:
        Add `WTF_MAKE_NONMOVABLE` to `MarkedArgumentBuffer`.

        * Sources.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2020-04-17  Ross Kirsling  <ross.kirsling@sony.com>

        Clean up some Intl classes following the ICU upgrade
        https://bugs.webkit.org/show_bug.cgi?id=210637

        Reviewed by Yusuke Suzuki.

        In r259606, I removed the compile-time guards for {DateTimeFormat, NumberFormat}.prototype.formatToParts,
        but I forgot to move the method setup back to the lookup table.

        This patch addresses that and prunes various other unnecessary includes and forward declarations.

        * runtime/IntlCollator.h:
        * runtime/IntlCollatorConstructor.h:
        * runtime/IntlDateTimeFormat.h:
        * runtime/IntlDateTimeFormatConstructor.h:
        * runtime/IntlDateTimeFormatPrototype.cpp:
        (JSC::IntlDateTimeFormatPrototype::create):
        (JSC::IntlDateTimeFormatPrototype::finishCreation):
        * runtime/IntlDateTimeFormatPrototype.h:
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatConstructor.h:
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatPrototype::create):
        (JSC::IntlNumberFormatPrototype::finishCreation):
        * runtime/IntlNumberFormatPrototype.h:
        * runtime/IntlObject.h:
        * runtime/IntlPluralRules.h:
        * runtime/IntlPluralRulesConstructor.h:
        * runtime/IntlPluralRulesPrototype.cpp:
        (JSC::IntlPluralRulesPrototype::create):
        (JSC::IntlPluralRulesPrototype::finishCreation):
        * runtime/IntlPluralRulesPrototype.h:

2020-04-17  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Map/Set iterator creation functions should fail with BadType etc. before executing insertChecks
        https://bugs.webkit.org/show_bug.cgi?id=210649
        <rdar://problem/61925452>

        Reviewed by Mark Lam.

        Since insertChecks adds some DFG nodes, we should determine whether this intrinsic handling is OK or not before executing insertChecks.
        Otherwise, we will hit an assertion with `!didInsertChecks`.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):

2020-04-17  Mark Lam  <mark.lam@apple.com>

        offlineasm is generating the wrong load/store for the "orh" instruction.
        https://bugs.webkit.org/show_bug.cgi?id=210639
        <rdar://problem/21501876>

        Reviewed by Robin Morisset.

        For example, on ARM64E, the "orh" instruction was generating the following:

            "\tldr w17, [x1, #0]\n"     // JavaScriptCore/llint/LowLevelInterpreter64.asm:919
            "\torr w17, w17, #64\n"     // JavaScriptCore/llint/LowLevelInterpreter64.asm:919
            "\tstr w17, [x1, #0]\n"     // JavaScriptCore/llint/LowLevelInterpreter64.asm:919

        i.e. a 32-bit load, followed by a 32-bit OR, followed by a 32-bit store.

        Instead, it should be generating the following:

            "\tldrh w17, [x1, #0]\n"    // JavaScriptCore/llint/LowLevelInterpreter64.asm:919
            "\torr w17, w17, #64\n"     // JavaScriptCore/llint/LowLevelInterpreter64.asm:919
            "\tstrh w17, [x1, #0]\n"    // JavaScriptCore/llint/LowLevelInterpreter64.asm:919

        i.e. a 16-bit load, followed by a 32-bit OR, followed by a 16-bit store.

        This bug also affects ARM64, ARMv7, and MIPS (basically any backend that uses
        riscLowerMisplacedAddresses() from rise.rb).  It does not affect x86, x86_64, and
        C_LOOP (which was written based on x86).

        * offlineasm/risc.rb:

2020-04-16  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r259480): Two new failing i18n tests
        https://bugs.webkit.org/show_bug.cgi?id=210605

        Reviewed by Darin Adler.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::isUTCEquivalent):
        (JSC::defaultTimeZone):
        (JSC::canonicalizeTimeZoneName):
        The default time zone needs to be canonicalized too.

        * runtime/IntlObject.cpp:
        (JSC::canonicalLangTag):
        (JSC::resolveLocale):
        Deal with some odd ""_s cases from my previous patch.
        (Drive-by fix inspired by Darin's comments on this one.)

2020-04-16  Sergio Villar Senin  <svillar@igalia.com>

        Unreviewed build fix for non unified builds.

        * dfg/DFGOperations.cpp: Added missing includes.

2020-04-16  Mark Lam  <mark.lam@apple.com>

        [Re-landing] Use more PAC diversity for JIT probe code.
        https://bugs.webkit.org/show_bug.cgi?id=210252
        <rdar://problem/54490367>

        Reviewed by Keith Miller.

        Introducing new PtrTags:
            JITProbePtrTag - for the client probe function.
            JITProbeTrampolinePtrTag - for calling the ctiMasmProbeTrampoline.
            JITProbeExecutorPtrTag - for calling the probe executor.
                Currently, this is only the Probe::executeProbe().
            JITProbeStackInitializationFunctionPtrTag - for calling the optional stack
                initialization function that the client probe function may set.

        We'll now use these in the JIT probe mechanism instead of adopting the default
        CFunctionPtrTag.

        Fixed an assert in MacroAssemblerARM64.cpp which does not apply to non ARM64E
        builds.

        * assembler/MacroAssembler.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerPrinter.h:
        (JSC::MacroAssembler::print):
        * assembler/ProbeContext.h:
        * runtime/JSCPtrTag.h:
        * tools/JSDollarVM.cpp:
        (JSC::callWithStackSizeProbeFunction):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):

2020-04-16  Mark Lam  <mark.lam@apple.com>

        Rolling out r259897: Causing crashes on iOS.
        https://bugs.webkit.org/show_bug.cgi?id=210252

        Not reviewed.

        * assembler/MacroAssembler.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerPrinter.h:
        (JSC::MacroAssembler::print):
        * assembler/ProbeContext.h:
        * runtime/JSCPtrTag.h:
        * tools/JSDollarVM.cpp:
        (JSC::callWithStackSizeProbeFunction):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):

2020-04-16  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Implement JSMapIterator/JSSetIterator with JSInternalFieldObjectImpl
        https://bugs.webkit.org/show_bug.cgi?id=210023

        Reviewed by Keith Miller.

        This patch reimplement JSMapIterator/JSSetIterator with JSInternalFieldObjectImpl.
        This makes current JSFinalObject-based Map/SetIterator simple and small.
        We generalize NewArrayIterator/PhantomNewArrayIterator to convert them to NewInternalFieldObject/PhantomNewInternalFieldObject
        to support JSMapIterator/JSSetIterator too in DFG / FTL. This makes allocation efficient and object-allocation-sinking aware.

        * builtins/BuiltinNames.h:
        * builtins/MapIteratorPrototype.js:
        (globalPrivate.mapIteratorNext):
        (next):
        * builtins/MapPrototype.js:
        (globalPrivate.MapIterator): Deleted.
        (values): Deleted.
        (keys): Deleted.
        (entries): Deleted.
        * builtins/SetIteratorPrototype.js:
        (globalPrivate.setIteratorNext):
        (next):
        * builtins/SetPrototype.js:
        (globalPrivate.SetIterator): Deleted.
        (values): Deleted.
        (entries): Deleted.
        * bytecode/BytecodeIntrinsicRegistry.cpp:
        (JSC::BytecodeIntrinsicRegistry::BytecodeIntrinsicRegistry):
        * bytecode/BytecodeIntrinsicRegistry.h:
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitIsMapIterator):
        (JSC::BytecodeGenerator::emitIsSetIterator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::mapIteratorInternalFieldIndex):
        (JSC::setIteratorInternalFieldIndex):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_getMapIteratorInternalField):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_getSetIteratorInternalField):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_putMapIteratorInternalField):
        (JSC::BytecodeIntrinsicNode::emit_intrinsic_putSetIteratorInternalField):
        * dfg/DFGAbstractInterpreterInlines.h:
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsicCall):
        * dfg/DFGClobberize.h:
        (JSC::DFG::clobberize):
        * dfg/DFGClobbersExitState.cpp:
        (JSC::DFG::clobbersExitState):
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::foldConstants):
        * dfg/DFGDoesGC.cpp:
        (JSC::DFG::doesGC):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGMayExit.cpp:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToPhantomNewInternalFieldObject):
        (JSC::DFG::Node::hasStructure):
        (JSC::DFG::Node::isPhantomAllocation):
        (JSC::DFG::Node::convertToPhantomNewArrayIterator): Deleted.
        * dfg/DFGNodeType.h:
        * dfg/DFGObjectAllocationSinkingPhase.cpp:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGSafeToExecute.h:
        (JSC::DFG::safeToExecute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObjectImpl):
        (JSC::DFG::SpeculativeJIT::compileNewGenerator):
        (JSC::DFG::SpeculativeJIT::compileNewAsyncGenerator):
        (JSC::DFG::SpeculativeJIT::compileNewInternalFieldObject):
        (JSC::DFG::SpeculativeJIT::compileNewArrayIterator): Deleted.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStoreBarrierInsertionPhase.cpp:
        * ftl/FTLCapabilities.cpp:
        (JSC::FTL::canCompile):
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileNode):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObjectImpl):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewGenerator):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewAsyncGenerator):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileMaterializeNewInternalFieldObject):
        (JSC::FTL::DFG::LowerDFGToB3::compileNewArrayIterator): Deleted.
        * ftl/FTLOperations.cpp:
        (JSC::FTL::operationPopulateObjectInOSR):
        (JSC::FTL::operationMaterializeObjectInOSR):
        * inspector/JSInjectedScriptHost.cpp:
        (Inspector::JSInjectedScriptHost::subtype):
        (Inspector::JSInjectedScriptHost::getInternalProperties):
        (Inspector::cloneMapIteratorObject):
        (Inspector::cloneSetIteratorObject):
        (Inspector::JSInjectedScriptHost::iteratorEntries):
        * runtime/CommonIdentifiers.h:
        * runtime/Intrinsic.cpp:
        (JSC::intrinsicName):
        * runtime/Intrinsic.h:
        * runtime/JSArrayIterator.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::mapIteratorPrototype const):
        (JSC::JSGlobalObject::setIteratorPrototype const):
        (JSC::JSGlobalObject::mapIteratorStructure const):
        (JSC::JSGlobalObject::setIteratorStructure const):
        * runtime/JSMapIterator.cpp:
        (JSC::JSMapIterator::createWithInitialValues):
        (JSC::JSMapIterator::finishCreation):
        (JSC::JSMapIterator::visitChildren):
        * runtime/JSMapIterator.h:
        * runtime/JSSetIterator.cpp:
        (JSC::JSSetIterator::createWithInitialValues):
        (JSC::JSSetIterator::finishCreation):
        (JSC::JSSetIterator::visitChildren):
        * runtime/JSSetIterator.h:
        * runtime/JSType.cpp:
        (WTF::printInternal):
        * runtime/JSType.h:
        * runtime/JSTypedArrayViewPrototype.cpp:
        (JSC::JSTypedArrayViewPrototype::finishCreation):
        * runtime/MapPrototype.cpp:
        (JSC::MapPrototype::finishCreation):
        (JSC::createMapIteratorObject):
        (JSC::mapProtoFuncValues):
        (JSC::mapProtoFuncKeys):
        (JSC::mapProtoFuncEntries):
        * runtime/SetPrototype.cpp:
        (JSC::SetPrototype::finishCreation):
        (JSC::createSetIteratorObject):
        (JSC::setProtoFuncValues):
        (JSC::setProtoFuncEntries):
        * runtime/VM.cpp:
        (JSC::VM::setIteratorStructureSlow): Deleted.
        (JSC::VM::mapIteratorStructureSlow): Deleted.
        * runtime/VM.h:
        (JSC::VM::setIteratorStructure): Deleted.
        (JSC::VM::mapIteratorStructure): Deleted.

2020-04-15  Yusuke Suzuki  <ysuzuki@apple.com>

        [JSC] Use ensureStillAliveHere in FTL when content of storage should be kept alive
        https://bugs.webkit.org/show_bug.cgi?id=210583
        <rdar://problem/61831515>

        Reviewed by Mark Lam.

        The content of Butterfly / ArrayStorage is kept alive only when the owner JSCell is alive.
        This means that we should keep the owner JSCell alive if we are loading content of storage
        which includes JSCells. This patch inserts ensureStillAliveHere in FTL to ensure this invariant.

        * ftl/FTLJITCode.cpp:
        (JSC::FTL::JITCode::~JITCode): Found that we get crash with `dumpDisassembly` if FTL::JITCode is destroyed while it fails to generate code while testing this.
        * ftl/FTLLowerDFGToB3.cpp:
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByVal):
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayIndexOf):
        (JSC::FTL::DFG::LowerDFGToB3::compileArrayPop):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCharCodeAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileStringCodePointAt):
        (JSC::FTL::DFG::LowerDFGToB3::compileGetByOffset):
        (JSC::FTL::DFG::LowerDFGToB3::compileMultiGetByOffset):

2020-04-15  Keith Miller  <keith_miller@apple.com>

        Disable Store-load pair auto-vectorization for JSC
        https://bugs.webkit.org/show_bug.cgi?id=210574

        Reviewed by Geoffrey Garen.

        slp-vectorization appears to make our slow path code significantly
        slower. That's because when we materialize our constant bytecode
        structs into C++ we load all the fields at the same time then
        widen them to the struct's member C++ size. Since we have 3
        different possible sizes Clang generates a total mess of
        code. Disabling this does not appear to be a regression on any
        platform I tested and improves the performance of slow path code
        significantly in micro benchmarks.

        * CMakeLists.txt:
        * Configurations/JavaScriptCore.xcconfig:

2020-04-15  Robin Morisset  <rmorisset@apple.com>

        Flaky Test: fetch/fetch-worker-crash.html
        https://bugs.webkit.org/show_bug.cgi?id=187257
        <rdar://problem/48527526>

        Reviewed by Yusuke Suzuki.

        The crash is coming from setExceptionPorts which is inlined in WTF::registerThreadForMachExceptionHandling.
        From the error message we know that the problem is an "invalid port right".
        http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/thread_set_exception_ports.html tells us that the "port right" is the third parameter to thread_set_exception_ports, which is exceptionPort in our case.
        exceptionPort is a global variable defined at the top of Signals.cpp:
          static mach_port_t exceptionPort;
        It is set in exactly one place:
          kern_return_t kr = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &exceptionPort);
        in a std::call_once, in startMachExceptionHandlerThread().
        Note that startMachExceptionHandlerThread() is called from the main thread just before the point where we are stuck.. and there is no synchronization to make sure it completed and its effect is visible to the worker thread before it uses exceptionPort.

        So I think the crash is due to this race between allocating exceptionPort and using it, resulting in an invalid exceptionPort being sometimes passed to the kernel.
        So this patch is a simple speculative fix, by running startMachExceptionHandlerThread() in initializeThreading(), before JSLock()::lock() can be run.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreading):

2020-04-15  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed build fix for r260161.

        * runtime/IntlObject.cpp:
        (JSC::canonicalLangTag):

2020-04-15  Ross Kirsling  <ross.kirsling@sony.com>

        Unreviewed, address Darin's feedback on r260151.

        * runtime/IntlObject.cpp:
        (JSC::canonicalLangTag):

2020-04-15  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Extension values should default to true, canonicalize without "-true"
        https://bugs.webkit.org/show_bug.cgi?id=210457

        Reviewed by Yusuke Suzuki.

        This patch implements two simple intertwining updates to ECMA-402:

          - Valueless extension keys should not be dropped when resolving locale
            https://tc39.es/ecma402/#sec-resolvelocale (9.h.4.b)

          - Following UTS 35, "-true" should not appear in canonicalized locale ids
            https://tc39.es/ecma402/#sec-canonicalizeunicodelocaleid
            https://unicode.org/reports/tr35/#Canonical_Unicode_Locale_Identifiers
            ('Any type or tfield value "true" is removed.')

        * runtime/IntlObject.cpp:
        (JSC::canonicalLangTag):
        (JSC::resolveLocale):

2020-04-15  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Fix Intl.DateTimeFormat patterns and fields in WebKit
        https://bugs.webkit.org/show_bug.cgi?id=209783

        Reviewed by Keith Miller.

        This patch implements two intertwining normative changes to Intl.DateTimeFormat:
          - Calendar setting must be taken into account when choosing a date-time pattern
            https://github.com/tc39/ecma402/pull/349
          - formatToParts must recognize relatedYear and yearName parts
            https://github.com/tc39/ecma402/pull/349

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        (JSC::IntlDateTimeFormat::partTypeString):

2020-04-15  Devin Rousso  <drousso@apple.com>

        [ESNext] Implement logical assignment operators
        https://bugs.webkit.org/show_bug.cgi?id=209716

        Reviewed by Ross Kirsling.

        Implement the logical assignment operators proposal, which is now Stage 3. It introduces
        three new assignment operators which will only store the result of the rhs in the lhs if the
        lhs meets the given condition:
         - `??=`, for if the lhs is nullish (`null` or `undefined`)
         - `||=`, for if the lhs is falsy
         - `&&=`, for if the lhs is truthy

        This short circuiting can be beneficial as it can avoid a redundant store when used in the
        common JavaScript programming pattern of "defaulting" a parameter.

        ```js
            function foo(x) {
                x = x || 42;
            }
        ```

        If `x` is a truthy value, it would result in the rhs `x` being stored back into the lhs `x`.
        In some situations, this can have negative unintended side-effects, such as for `innerHTML`.

        Logical assignment operators, however, are defined such that they only store if the rhs is
        to actually be needed/used, skipping the redundant store and simply returning lhs otherwise.

        In the case of readonly references, this means that an error is only thrown when the
        assignment occurs, meaning that if the lhs already satisfies the condition it will be used
        and returned with no error.

        * parser/ParserTokens.h:
        * parser/Lexer.cpp:
        (JSC::Lexer<T>::lexWithoutClearingLineTerminator):
        * parser/Parser.cpp:
        (JSC::Parser<LexerType>::parseAssignmentExpression):

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::makeAssignNode):
        * parser/Nodes.h:
        * parser/NodeConstructors.h:
        (JSC::ShortCircuitReadModifyResolveNode::ShortCircuitReadModifyResolveNode): Added.
        (JSC::ShortCircuitReadModifyBracketNode::ShortCircuitReadModifyBracketNode): Added.
        (JSC::ShortCircuitReadModifyDotNode::ShortCircuitReadModifyDotNode): Added.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::emitShortCircuitAssignment): Added.
        (JSC::ShortCircuitReadModifyResolveNode::emitBytecode): Added.
        (JSC::ShortCircuitReadModifyDotNode::emitBytecode): Added.
        (JSC::ShortCircuitReadModifyBracketNode::emitBytecode): Added.

        * runtime/OptionsList.h:
        Add a `useLogicalAssignmentOperators` setting for controlling this feature.

2020-04-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: add a Step next that steps by expression
        https://bugs.webkit.org/show_bug.cgi?id=210324

        Reviewed by Timothy Hatcher.

        Step next is a hybrid of Step over and Step into which continues execution to the next pause
        opportunity within the current (or ancestor) call frame. It is especially useful when trying
        to debug minified code, such as trying to continue to `c()` in `a() && b() && c();`, where
        Step over would continue to the next statement (i.e. after the `;`) and Step in would
        continue to the first line inside `a()` (and would require a Step out to get back).

        * inspector/protocol/Debugger.json:
        * inspector/agents/InspectorDebuggerAgent.h:
        * inspector/agents/InspectorDebuggerAgent.cpp:
        (Inspector::InspectorDebuggerAgent::stepNext): Added.

        * debugger/Debugger.h:
        * debugger/Debugger.cpp:
        (JSC::Debugger::stepNextExpression): Added.
        (JSC::Debugger::atExpression):
        (JSC::Debugger::clearNextPauseState):

2020-04-13  Alexey Shvayka  <shvaikalesh@gmail.com>

        REGRESSION (r259587): bterlson/eshost throws during init in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=210470

        Reviewed by Ross Kirsling.

        This change makes $262.IsHTMLDDA of JSC shell a CustomValue, allowing it to be reassigned
        and restoring compatibility with any version of https://github.com/bterlson/eshost.

        Since putDirectCustomAccessor() is now used instead of putGetter(), scope exception assert
        is no longer needed and can be safely removed, as well as JSObject::putGetter() export.

        * jsc.cpp:
        * runtime/JSObject.h:

2020-04-13  David Kilzer  <ddkilzer@apple.com>

        Replace use of Checked<size_t, RecordOverflow> with CheckedSize
        <https://webkit.org/b/210461>

        Reviewed by Mark Lam.

        * heap/Heap.cpp:
        (JSC::Heap::deprecatedReportExtraMemorySlowCase):
        (JSC::Heap::extraMemorySize):
        (JSC::Heap::updateAllocationLimits):
        (JSC::Heap::reportExtraMemoryVisited):
        * heap/SlotVisitor.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::expandCapacity):

2020-04-10  Michael Saboff  <msaboff@apple.com>

        [YARR] Allow for Unicode named capture group identifiers in non-Unicode regular expressions
        https://bugs.webkit.org/show_bug.cgi?id=210309

        Reviewed by Ross Kirsling.

        Update YARR pattern processing to allow for non-BMP unicode identifier characters in named capture groups.

        This change was discussed and approved at the March/April 2020 TC-39 meeting.
        See https://github.com/tc39/ecma262/pull/1869 for the discussion and change.

        Updated tryConsumeUnicodeEscape() to allow for unicode escapes in non-unicode flagged regex's.
        Added the same support to consumePossibleSurrogatePair().

        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::consumePossibleSurrogatePair):
        (JSC::Yarr::Parser::parseCharacterClass):
        (JSC::Yarr::Parser::parseTokens):
        (JSC::Yarr::Parser::tryConsumeUnicodeEscape):
        (JSC::Yarr::Parser::tryConsumeIdentifierCharacter):

2020-04-13  Michael Catanzaro  <mcatanzaro@gnome.org>

        Fix various build warnings
        https://bugs.webkit.org/show_bug.cgi?id=210429

        Reviewed by Mark Lam.

        Fix -Wimplicit-fallthrough warning by adding a default case CRASH() to prevent the inner
        switch from falling through to the outer switch.

        * dfg/DFGArrayMode.cpp:
        (JSC::DFG::ArrayMode::alreadyChecked const):

2020-04-12  Mark Lam  <mark.lam@apple.com>

        Enable the ability to build the ASM LLInt for ARMv7k.
        https://bugs.webkit.org/show_bug.cgi?id=210412

        Reviewed by Sam Weinig.

        Fix the offlineasm so that it can build the ASM LLInt for ARMv7k.  This patch does
        not actually enable the ASM LLInt.  The ARMv7k port still build the C Loop LLInt.

        Also, the ARMv7k ASM LLInt is still broken and needs additional work before it
        can run.  This patch only fixes things so that it will build.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        - Added generate_settings_extractor.rb to the project so that we can view it from
          inside Xcode.

        * offlineasm/arm.rb:
        - Added support for the globaladdr LLInt instruction for ARMv7k.

        * offlineasm/backends.rb:
        - Fix the backend to enable ARMV7 also when building for ARMv7k.

2020-04-12  Darin Adler  <darin@apple.com>

        Fix a few mispellings of descendant and propagation
        https://bugs.webkit.org/show_bug.cgi?id=210409

        Reviewed by Mark Lam.

        * ftl/FTLAbstractHeap.h: "descendants"
        * offlineasm/ast.rb: "descendants"

2020-04-12  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] WebKit Intl does not allow calendar and numberingSystem options
        https://bugs.webkit.org/show_bug.cgi?id=209784

        Reviewed by Myles C. Maxfield.

        As an alternative to using `ca` and `nu` extensions in the locale string:
          - the Intl.DateTimeFormat constructor needs to be able to take `calendar` and `numberingSystem` options
            https://tc39.es/ecma402/#sec-initializedatetimeformat
          - the Intl.NumberFormat needs to be able to take a `numberingSystem` option
            https://tc39.es/ecma402/#sec-initializenumberformat

        Since we already support `ca` and `nu`, this is a very simple addition.
        The only interesting part is that we must verify that values for these options are 3-8 alphanumeric characters.

        * runtime/IntlDateTimeFormat.cpp:
        (JSC::IntlDateTimeFormat::initializeDateTimeFormat):
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::initializeNumberFormat):
        (JSC::IntlNumberFormat::resolvedOptions):
        * runtime/IntlObject.cpp:
        (JSC::isUnicodeLocaleIdentifierType):
        * runtime/IntlObject.h:

2020-04-10  Ross Kirsling  <ross.kirsling@sony.com>

        [ECMA-402] Properly implement BigInt.prototype.toLocaleString
        https://bugs.webkit.org/show_bug.cgi?id=209782

        Reviewed by Darin Adler.

        Our BigInt's toLocaleString has been simply falling back to toString instead of following ECMA-402.
        (https://tc39.es/ecma402/#sup-bigint.prototype.tolocalestring)

        Since {Number, BigInt}.prototype.toLocaleString are internally the same as Intl.NumberFormat.prototype.format,
        this patch simultaneously lets the latter method take a BigInt argument.
        (https://tc39.es/ecma402/#sec-number-format-functions)

        This patch continues to use the old unum_* API instead of ICU 62's new unumf_* API,
        as the latter would require a large refactor as well as fallback paths.
        (This will, however, be a prerequisite for https://bugs.webkit.org/show_bug.cgi?id=209774.)

        * runtime/BigIntPrototype.cpp:
        (JSC::bigIntProtoFuncToString):
        (JSC::bigIntProtoFuncToLocaleString):
        (JSC::bigIntProtoFuncToStringImpl): Deleted.
        * runtime/IntlNumberFormat.cpp:
        (JSC::IntlNumberFormat::format):
        (JSC::IntlNumberFormat::formatNumber): Deleted.
        * runtime/IntlNumberFormat.h:
        * runtime/IntlNumberFormatPrototype.cpp:
        (JSC::IntlNumberFormatFuncFormat):
        (JSC::IntlNumberFormatPrototypeGetterFormat):
        (JSC::IntlNumberFormatFuncFormatNumber): Deleted.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToLocaleString):

2020-04-10  Devin Rousso  <drousso@apple.com>

        The rhs in `ReadModifyResolveNode` should be evaluated before throwing an exception if the lhs is read-only
        https://bugs.webkit.org/show_bug.cgi?id=210317

        Reviewed by Ross Kirsling.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::emitReadModifyAssignment):
        (JSC::ReadModifyResolveNode::emitBytecode):
        If the corresponding `Variable` is read-only, pass it to `emitReadModifyAssignment` as an
        additional optionl argument, where it will be used to `emitReadOnlyExceptionIfNeeded` after
        the rhs is emitted.

2020-04-10  Mark Lam  <mark.lam@apple.com>

        Use more PAC diversity for JIT probe code.
        https://bugs.webkit.org/show_bug.cgi?id=210252
        <rdar://problem/54490367>

        Reviewed by Keith Miller.

        Introducing new PtrTags:
            JITProbePtrTag - for the client probe function.
            JITProbeTrampolinePtrTag - for calling the ctiMasmProbeTrampoline.
            JITProbeExecutorPtrTag - for calling the probe executor.
                Currently, this is only the Probe::executeProbe().
            JITProbeStackInitializationFunctionPtrTag - for calling the optional stack
                initialization function that the client probe function may set.

        We'll now use these in the JIT probe mechanism instead of adopting the default
        CFunctionPtrTag.

        * assembler/MacroAssembler.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerARM64.cpp:
        (JSC::MacroAssembler::probe):
        * assembler/MacroAssemblerPrinter.h:
        (JSC::MacroAssembler::print):
        * assembler/ProbeContext.h:
        * runtime/JSCPtrTag.h:
        * tools/JSDollarVM.cpp:
        (JSC::callWithStackSizeProbeFunction):
        * wasm/WasmAirIRGenerator.cpp:
        (JSC::Wasm::AirIRGenerator::emitLoopTierUpCheck):
        * wasm/WasmB3IRGenerator.cpp:
        (JSC::Wasm::B3IRGenerator::emitLoopTierUpCheck):

2020-04-10  Mark Lam  <mark.lam@apple.com>

        [Follow up] Fix bad tests in testmasm's testCagePreservesPACFailureBit().
        https://bugs.webkit.org/show_bug.cgi?id=210314
        <rdar://problem/61556785>

        Not reviewed.

        Applying Keith's feedback in https://bugs.webkit.org/show_bug.cgi?id=210314#c5:
        added the stronger test but kept the weaker one as well.

        * assembler/testmasm.cpp:
        (JSC::testCagePreservesPACFailureBit):

== Rolled over to ChangeLog-2020-04-10 ==
