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 ==
